云原生俱乐部-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中的资源。