今天要完成的項目 k8s Task: Memory-default-namesapce 這個 Task
1 建立一個 namespace
2 給這個 namespace 設定一個預設 Memory 設定值
3 佈署一個 Pod 不給定預設 Memory, 察看 Pod 啟動狀態確認是否設定成功
4 佈署一個 Pod 只給定 Memory Limit 不設定預設 Memory 值
5 佈署一個 Pod 只給定 Memory 需求, 不設定 Limit
kubectl create namespace default-mem-example
建立一個名稱為 default-mem-example 的 Namespace
建一個設定檔 memory-defaults.yaml
apiVersion: v1
kind: LimitRange
metadata:
namespace: default-mem-example
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
建立一個對 Container 的記憶體限制
並且套用在 Namespace default-mem-example
每個 Container 限制內容為上限 512Mi
每個 Container 預設給定的 256Mi
佈署指令如下:
kubectl apply -f memory-defaults.yaml
建立設定 memory-defaults-pod.yaml 如下:
apiVersion: v1
kind: Pod
metadata:
namespace: default-mem-example
name: default-mem-demo
spec:
containers:
- name: default-mem-demo-ctr
image: nginx
在 Namespace default-mem-example 建立一個 Pod
名稱設定為 default-mem-demo
使用 nginx 為 image
記憶體不做設定, 測試剛剛 LimitRange 是否會自動套用上設定值
建立指令如下:
kubectl apply -f memory-defaults-pod.yaml
查詢 Pod 佈署結果, 驗證預設定有效
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
結果如下:
Memory 預設配置有設定成功
清除佈署過的 Pod
kubectl delete -f memory-defaults-pod.yaml
建立 memory-defaults-pod2.yaml 如下
apiVersion: v1
kind: Pod
metadata:
namespace: default-mem-example
name: default-mem-demo-2
spec:
containers:
- name: default-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1Gi"
在 Namespace default-mem-example 建立一個 Pod
名稱設定為 default-mem-demo-2
使用 nginx 為 image
記憶體只設定了 Limit 值
建立指令如下:
kubectl apply -f memory-defaults-pod2.yaml
透過查詢指令
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
結果如下:
發現由於有設定 Memory Limit 值, 所以不會套用 LimitRange 內的設定值
而是使用在 Pod 的佈署檔 Limit 值, 而因為 request 沒設定所以直接套用 Limit 值為 Request
清除佈署過的 Pod
kubectl delete -f memory-defaults-pod2.yaml
建立 memory-defaults-pod3.yaml 如下:
apiVersion: v1
kind: Pod
metadata:
namespace: default-mem-example
name: default-mem-demo-3
spec:
containers:
- name: default-mem-demo-3-ctr
image: nginx
resources:
requests:
memory: "128Mi"
在 Namespace default-mem-example 建立一個 Pod
名稱設定為 default-mem-demo-3
使用 nginx 為 image
記憶體只設定了 Request 值
建立指令如下:
kubectl apply -f memory-defaults-pod3.yaml
透過查詢指令
kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
結果如下:
發現由於有設定 Memory Request 值, 所以使用在 Pod 的佈署檔 Memory Request 值
沒有設定 Memory Limit 值, 所以套用了 LimitRange 設定的 Limit 值
清除佈署過的 Pod
kubectl delete -f memory-defaults-pod3.yaml
kubectl delete namespace default-mem-example
在 Namespace 設定預設值可以讓 Namespace 記憶體管理更方便
首先是限制了每個 Container 必須有自己的 Memory 上限
並且控制了所有 Container 使用的 Memory 用量不會超過某個特定的值
前面佈署章節有講到, 設定檔的 apiVersion 會被 cluster 執行的 kubernetes version 影響
minikube 有個可以設定執行在 cluster 的 kubernetes version 的指令如下
minikube start --kubernetes-version=$specified_version
這樣一來就可以透過 minikube 執行所想測試 apiVersion 的設定檔佈署了
其他設定可以查詢minikube 官方指令文件參考