1: Node隔離和恢復
操作功能:
Node隔離和恢復
操作步驟:
node隔離:
yaml文件:
apiVersion: v1
kind: Node
metadata:
name: kubernetes-minion1
labels:
kubernetes.io/hostname: kubernetes-minion1
spec:
unschedulable: true
然後,通過kubectl replace 命令完成對Node狀態的修改:(kubectl replace -f unschedule_node.yaml)
查看Node的狀態,可以觀察到在Node的狀態中增加了一項SchedulingDisabled
狀態查看命令: kubectl get nodes
這樣後續創建的Pod,系統將不會再向該Node進行調度
同樣可以不適用配置文件,直接使用kubectl path命令來完成:
kubectl patch node kubernetes-minion1 -p '{"spec":{"unschedulable":true}}'
備註: 將某個Node脫離調度範圍時,在其上運行的pod並不會自動停止,管理員需要手動停止在該Node上運行的Pod
node恢復:
如果需要將某個Node重新納入集羣調度範圍,則將unschedulable設置爲false,再次執行kubectl replace或kubectl patch命令就能恢復系統對該Node的調度。
2: Node擴容
操作功能:
Node擴容
操作步驟:
1: 在Node節點上安裝Docker、Kubelet和kube-proxy
2:將kubelet和kube-proxy的啓動參數中的Master URL指定爲當前kubernetes集羣Master的地址
3:最後啓動這些服務
基於kubelet的自動修復機制,新的Node將會自動加入現有的kubernetes集羣中。
3: Pod動態擴容和縮放
操作功能:
Pod動態擴容和縮放
操作步驟:
以Redis-slave RC 爲例子, 已經定義的最初副本數量爲2,通過如下的命令可以將redis-slave RC控制的Pod 副本數量從最初的2變爲3
kubectl scale rc redis-slave --replicas=3
將--replicas設置爲比當前Pod副本數量更小的數字,系統會kill掉一些運行中的pod
kubectl scale rc redis-slave --replicas=1
4:更新資源對象label
操作功能:
更新資源對象label
操作步驟:
給已經創建的Pod “redis-master-bobr0”添加一個標籤role=backend
kubectl label pod redis-master-bobr0 role=backend
刪除一個Label,只需在命令行最後指定Label的key名並與一個減號連接即可:
kubectl label pod redis-master-bobr0 role-
修改一個Label的值,需要加上--overwrite參數:
kubectl label pod redis-master-bobr0 role=master --overwrite
5:將Pod調度到指定的Node上
操作功能:
將Pod調度到指定的Node上
操作步驟:
1: 通過kubectl label 命令給目標Node打上一個特定的標籤
kubectl label nodes <node-name> <label-key>=<label-value>
2:在Pod的配置文件中加入nodeSelector定義
主要定義段:
spec:
nodeSelector:
zone: <label-name>
運行kubectl create -f 命令創建的Pod就不會被調度到排除的Node上
6:kubelet 指定本地鏡像
操作功能:
kubelet 指定本地鏡像
操作步驟:
cat > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf <<EOF
[Service]
Environment="KUBELET_EXTRA_ARGS=--pod-infra-container- image=local.repo/google_containers/pause-amd64:3.1"
EOF
systemctl daemon-reload
systemctl restart kubelet