Kubernetes DaemonSet with Azure AKS 小記
OS: openSUSE Leap 15
Kubernetes: 1.10.5 AKS in Azure
VS code: 1.30.2
讀書會閱讀進度來到 Chapter 9 - DaemonSet
- DaemonSet 主要會在叢集的各個 node 佈署 pod
接下來就來紀錄今天的實驗小記
因為之前的實驗都是一個 node 就可以, 但是 daemonset 如果要有意義, 就要有兩個 nodes 以上
所以首先先來擴展 AKS Cluster 上面的 node 吧
使用 az 指令列出 aks 管理的 cluster, 可以知道 resource group 還有 cluster name
> az aks list -o table
Name Location ResourceGroup
-------------------- ---------- -----------------------
myAKScluster20180724 japaneast sakanaK8s
列出管理 Cluster 的 agentPoolProfiles, 找出 Pool name
> az aks show --resource-group sakanaK8s --name myAKScluster20180724 --query agentPoolProfiles
[
{
"count": 1,
"maxPods": 110,
"name": "agentpool",
"osType": "Linux",
"storageProfile": "ManagedDisks",
"vmSize": "Standard_F1s"
}
]
可以觀察到 node pool name 是 agentpool
其實在 vscode 如果有裝 kubernetes extension 也可以觀察到 node pool name
使用 aks scale 指令將 node 擴增到 2 個
> az aks scale --resource-group sakanaK8s --name myAKScluster20180724 --node-count 2 --nodepool-name agentpool
再次觀察 Nodes, 就會發現變成 2 個 nodes
接下來 apply 書上的範例 9-1
內容如下
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
labels:
app: fluentd
spec:
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd:v0.14.10
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
可以使用 kubectl apply -f 9-1-fluentd.yaml 或是在 vscode 內用 Ctrl + Shift + p 去呼叫 Kubernetes: Apply 來套用
觀察相關資訊
> kubectl describe daemonset fluentd --namespace kube-system
Name: fluentd
Selector: app=fluentd
Node-Selector: <none>
Labels: app=fluentd
Annotations: <none>
Desired Number of Nodes Scheduled: 2
Current Number of Nodes Scheduled: 2
Number of Nodes Scheduled with Up-to-date Pods: 2
Number of Nodes Scheduled with Available Pods: 2
Number of Nodes Misscheduled: 0
Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed
> kubectl get pods --namespace kube-system -l app=fluentd -o wide
NAME READY STATUS RESTARTS AGE IP NODE
fluentd-bdfxk 1/1 Running 0 45m 10.244.0.137 aks-agentpool-40577543-0
fluentd-ml6b6 1/1 Running 0 45m 10.244.1.3 aks-agentpool-40577543-1
因為上面的 yaml 檔案 namespace 是在 kube-system, 所以查詢的時候要加上 --namespace 才看得到
從資訊上來看, 在兩個 node 上面都有佈署 fluentd 的 pod
接下來驗證如果 node 數量擴增, 那 DaemonSet 是否會如期的將 Pod 部屬上去
使用 aks scale 指令將 node 擴增到 3 個
> az aks scale --resource-group sakanaK8s --name myAKScluster20180724 --node-count 3 --nodepool-name agentpool
再次觀察相關資訊, 驗證新的 node 有部署 fluentd
> kubectl get pods --namespace kube-system -l app=fluentd -o wide
NAME READY STATUS RESTARTS AGE IP NODE
fluentd-bdfxk 1/1 Running 0 55m 10.244.0.137 aks-agentpool-40577543-0
fluentd-ml6b6 1/1 Running 0 55m 10.244.1.3 aks-agentpool-40577543-1
fluentd-x7k9h 1/1 Running 0 1m 10.244.2.3 aks-agentpool-40577543-2
接下來實驗 限制 DaemonSet 只在某些 node 上面佈署
書上的方式是透過 label 的方式來限制
使用 kubectl label 指令來建立 label
> kubectl label nodes aks-agentpool-40577543-2 ssd=true
node/aks-agentpool-40577543-2 labeled
使用 label selector 來觀察
> kubectl get nodes -l ssd
NAME STATUS ROLES AGE VERSION
aks-agentpool-40577543-2 Ready agent 10m v1.10.5
目前只有一個 node 有加上 ssd label
接下來測試書中的範例 9-2-nginx-fast-storage.yaml
內容如下
重點在有進行 label 的指定
apiVersion: extensions/v1beta1
kind: "DaemonSet"
metadata:
labels:
app: nginx
ssd: "true"
name: nginx-fast-storage
spec:
template:
metadata:
labels:
app: nginx
ssd: "true"
spec:
nodeSelector:
ssd: "true"
containers:
- name: nginx
image: nginx:1.10.0
使用 kubectl apply 來套用
> kubectl apply -f 9-2-nginx-fast-storage.yaml
觀察相關資訊
> kubectl get pods -l ssd -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-fast-storage-txl5n 1/1 Running 0 5m 10.244.2.4 aks-agentpool-40577543-2
可以觀察到 只有 label 有 ssd=true 的 node 被佈署 pods
當然也可以實驗將 node 加上 ssd 的 label
> kubectl label nodes aks-agentpool-40577543-1 ssd=true
node/aks-agentpool-40577543-1 labeled
再次觀察
> kubectl get pods -l ssd -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-fast-storage-k5snc 1/1 Running 0 1m 10.244.1.4 aks-agentpool-40577543-1
nginx-fast-storage-txl5n 1/1 Running 0 9m 10.244.2.4 aks-agentpool-40577543-2
做完今天的實驗, 來進行收尾
刪除剛剛建立的 daemonset
> kubectl delete -f 9-1-fluentd.yaml
> kubectl delete -f 9-2-nginx-fast-storage.yaml
將規模縮回 1 個 nodes
> az aks scale --resource-group sakanaK8s --name myAKScluster20180724 --node-count 1 --nodepool-name agentpool
今天大概就這樣了
~ enjoy it
Reference:
沒有留言:
張貼留言