云原生俱乐部-k8s知识点归纳(7)

计划是再更两篇就完结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中的资源。