計劃是再更兩篇就完結k8s系列,其中CRD客戶端資源定義會單獨列一篇,或許會講一講operator。不過當前的k8s并沒有細講operator,因為涉及到很多的go語言內容,以及相關的package的方法。
這一部分主要就是講一講k8s如何進行監控和升級,以及ETCD備份與恢復,并會講到Kustomize管理。前兩部分的內容都是來維護k8s系統本身的,kustomize管理則是能夠更好的管理資源,包括打補丁、定制化等內容。
監控與升級
[1]驅逐主節點的pod
先使用kubectl cordon cka-master用來禁止調度,`cordon`是?臨時操作?,通過 API 修改節點狀態,而 ?`NoSchedule`是?持久化污點?。`cordon`?不依賴 Pod 的容忍配置?,`NoSchedule`?需要 Pod 無匹配容忍才會生效?。
使用kubectl drain cka-master --delete-emptydir-data --ignore-daemonsets來驅逐除了daemonset部署的pod,并且刪除使用emptydor臨時掛載的目錄。?`drain`是?命令式操作?,立即觸發驅逐,繞過 Pod 的容忍配置。`NoExecute`是?聲明式機制?,依賴控制器異步處理,并且?尊重 Pod 的容忍規則?。
[2]升級控制平面
使用kubeadm upgrade plan可以查看可以升級的版本,使用kubeadm upgrade apply v1.30.3 --etcd-upgrade=false可以先將kubeadm 升級到1.30.3,然后禁止etcd升級(升級kube-schedule、kube-apiserver、kube-controller-manage)。
主節點要升級kubectl,使用apt install kubectl=1.30.3-1.1 -y。至于所有節點都需要升級kubelet,如果不行的話,單獨升級主機點的kubelet也行。使用apt install kubelet=1.30.3-1.1 -y,保證主節點的Kubelet的版本高于工作節點。
[3]恢復主節點的調度能力
先重新加載一下配置文件,使用systemctl daemon-reload,再使用systemctl restart kubelet.service來重啟服務。使用kubectl uncordon cka-master恢復主節點的調度能力,這樣被kubectl drain強制驅逐的pod又會重新調度到master節點上。
ETCD備份與恢復
需要單獨安裝etcd客戶端,使用apt install etcd-client -y安裝。我們通過etcd快照來備份數據庫數據,但是ETCD 快照備份范圍?僅包含靜態 Pod 的狀態,但不包含其本地 YAML 文件。因此我們要單獨備份靜態節點的yaml文件,然后將備份yaml文件放在指定的配置目錄即可。
Kustomize管理
kustomization.yaml 文件是 Kustomize 的核心配置文件,定義了如何生成最終的 Kubernetes。在`base/kustomization.yaml`定義?基礎資源的集合(指定資源路徑)?,?`overlay/kustomization.yaml`?則定義?如何修改基礎資源?,如補丁、命名空間、標簽等。
在base目錄下的kustomization.yaml文件中通過resources字段在定義?Kubernetes 資源列表,如deployment、service,secrets,configMaps等。overlay目錄下的kustomization.yaml文件以base目錄作為基礎的目錄(通過resources字段指定路徑),可以包含額外的定制(如patches補丁)。
kustomize.yaml文件可以使用?configMapGenerator 和 secretGenerator(兩目錄中都能定義),它們可以根據文件或字面值生成 ConfigMap 或 Secret。patchesStrategicMerge 補丁方式使用 YAML 文件來定義,它允許通過metadata.name指定修改對應base中的資源。