k8s運維指南

一、Node的隔離與恢復
在硬件升級、維護等情況下,我們需要將某些Node進行隔離,脫離k8s集羣的調度範圍。k8s提供了一種機制,既可以將Node納入調度範圍,也可以將Node脫離調度範圍。
創建配置文件unschedule_node.yaml,在spec部分指定unschedulable 問true:

[root@master node]# cat unschedule_node.yaml 
apiVersion: v1
kind: Node
metadata:
  name: 192.168.0.222
  labels:
    kubernetes.io/hostname: k8s-node-1
spec: 
  unschedulable: true

然後,通過 kubectl replace 命令完成對Node 狀態的修改:

[root@master node]# kubectl replace -f unschedule_node.yaml 
node/192.168.0.222 replaced
[root@master node]# kubectl get nodes
NAME            STATUS                     ROLES     AGE       VERSION
192.168.0.144   Ready                      <none>    25d       v1.11.6
192.168.0.148   Ready                      <none>    25d       v1.11.6
192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6

查看Node的狀態,可以觀察到在Node的狀態中增加了一項SchedulingDisabled,對於後續創建的Pod,系統將不會再向該Node進行調度。也可以不使用配置文件,直接使用 kubectl patch 命令完成:
kubectl patch node k8s-node-1 -p '{"spec": {"unschedulaable": true}}'
需要注意的是,將某個Node脫離調度範圍時,在其上運行的pod並不會自動停止,管理員需要手動停止在改Node是上運行的pod.
同樣,如果需要將某個node重新納入集羣調度範圍,則將unschedulable 設置爲false,再次執行 kubectl replace 或者kubectl  patch 命令就能恢復系統對改node的調度。

第三種方法:
使用kubectl cordon <node_name> 對某個Node 進行隔離調度操作
[root@master node]# kubectl cordon 192.168.0.148
node/192.168.0.148 cordoned
[root@master node]# kubectl get nodes
NAME            STATUS                     ROLES     AGE       VERSION
192.168.0.144   Ready                      <none>    25d       v1.11.6
192.168.0.148   Ready,SchedulingDisabled   <none>    25d       v1.11.6
192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6

恢復調度操作:
[root@master node]# kubectl uncordon 192.168.0.222
node/192.168.0.222 uncordoned
[root@master node]# kubectl get nodes
NAME            STATUS    ROLES     AGE       VERSION
192.168.0.144   Ready     <none>    25d       v1.11.6
192.168.0.148   Ready     <none>    25d       v1.11.6
192.168.0.222   Ready     <none>    5d        v1.11.6

二、Node擴容
在k8s集羣中,一個新node的加入是非常簡單的。在新的node節點上安裝Docker、kubelet和kube-proxy服務,然後配置kubelet和kube-proxy的啓動參數,拷貝證書,最後啓動這些服務。通過kubelet默認的自動註冊機制,新的node將會自動加入現有的k8s集羣中。
k8s master在接受了新Node的註冊之後,會自動將其納入當前集羣的調度範圍內,在之後創建容器時,就可以像新的Node進行調度了。
通過這種機制,實現集羣中Node的擴容。
三、Namespace: 集羣環境共享與隔離
1.創建namespace

[root@master yaml]# kubectl create namespace test
namespace/test created
[root@master yaml]# kubectl get namespace
NAME          STATUS    AGE
default       Active    55d
kube-public   Active    55d
kube-system   Active    55d
quizii        Active    42d
test          Active    9s
[root@master yaml]# kubectl delete namespace test
namespace "test" deleted

[root@master yaml]cat  namespace-devlopment.yaml
   apiVersion: v1
   kind: Namespace
   metadata:
        name: development
        
 # kubectl create -f namespace-development.yaml
    namespaces/developmentx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章