排查故障节点
模拟题目:
设置配置环境: [candidate@node-1] $ kubectl config use-context wk8s
Task
名为node02的Kubernetes worker node处于NotReady状态。 调查发生这种情况的原因,并采取相应的措施将node恢复为Ready状态,确保所做的任何更改永久生效。 可以使用以下命令,通过ssh连接到node02节点: ssh node02 可以使用以下命令,在该节点上获取更高权限: sudo -i
参考:
故障排除
主要考点为故障排除,需要结合实际情况和 k8s 文档操作说明进行学习,本题故障为节点 kubelet 未配置开机自启,故障点固定,不涉及官网参数查询。
检查服务 kubernetes.io/zh-cn/docs/…
解答:
考试的时候务必记住切换集群, 注意集群名称 kubectl config use-context k8s
检查故障节点
kubectl get nodes
切换到故障节点
ssh node02
sudo -i
systemctl status kubelet
systemctl enable kubelet --now
答完题要退回 node01 使用 exit 或者是 Ctrl + D
检查:
systemctl status kubelet
kubectl get nodes
节点维护
模拟题目:
设置配置环境: [candidate@node-1] $ kubectl config use-context ek8s
Task
将名为 node02 的 node 设置为不可用,并重新调度该 node 上所有运行的 pods。
参考:
任务 --> 管理集群 --> 安全地清空一个节点 kubernetes.io/zh-cn/docs/…
考点相关内容分析
node
在 Kubernetes(K8s)中,Node 是集群中的一个工作节点,也称为 Minion。Node 是运行应用程序和负责容器的实际主机。每个 Node 都有 Kubelet,它是 Kubernetes 主要组件之一,用于与控制平面通信,并管理 Node 上的容器。
Node 的主要组成部分包括:
- Kubelet: 是在每个 Node 上运行的代理,它负责管理该节点上的容器,以及与主控制平面通信以接收并执行调度任务。 容器运行时(Container Runtime): 用于在 Node 上运行容器的软件,如 Docker、containerd、cri-o 等。
- kube-proxy: 是负责管理网络代理的组件,它维护着节点上的网络规则,并处理集群内部的网络通信。
- Pods: 是 Kubernetes 中最小的调度单元,一个 Pod 可以包含一个或多个容器,它们共享网络命名空间和存储卷,并在同一节点上调度和管理。
- Node 是 Kubernetes 集群的计算资源,它们接收调度器分配的任务,并负责在节点上运行容器。节点的数量取决于集群的规模和负载要求,它们组成了 Kubernetes 集群的计算能力。
相关操作命令
查看节点列表:
$ kubectl get nodes
查看节点详细信息:
$ kubectl describe node <node-name>
添加标签到节点
$ kubectl label node <node-name> <label-key>=<label-value>
删除节点
$ kubectl delete node <node-name>
驱逐节点上的 Pod
$ kubectl drain <node-name>
恢复节点
$ kubectl uncordon <node-name>
解答:
考试的时候务必记住切换集群, 注意集群名称 kubectl config use-context k8s
kubectl get nodes
kubectl cordon node02
kubectl get nodes
kubectl drain node02 --ignore-daemonsets --force
kubectl uncordon <node name>
检查:
kubectl get node
kubectl get pod -A -o wide | grep node02
备份还原etcd
题目:
设置配置环境 此项目无需更改配置环境。但是,在执行此项目之前,请确保您已返回初始节点。 [candidate@master01] $ exit #注意,这个之前是在 master01 上,所以要 exit 退到 node01,如果已经是 node01 了,就不要再 exit 了。
Task 首先,为运行在 https://127.0.0.1:2379 上的现有 etcd 实例创建快照并将快照保存到 /var/lib/backup/etcd-snapshot.db 为给定实例创建快照预计能在几秒钟内完成。 如果该操作似乎挂起,则命令可能有问题。用 CTRL + C 来取消操作,然后重试。 然后还原位于/data/backup/etcd-snapshot-previous.db 的现有先前快照。 提供了以下 TLS 证书和密钥,以通过 etcdctl 连接到服务器。
CA 证书: /opt/KUIN00601/ca.crt 客户端证书: /opt/KUIN00601/etcd-client.crt 客户端密钥: /opt/KUIN00601/etcd-client.key
考点:
etcd 的备份和还原命令
参考链接:
依次点击 Tasks → Administer a Cluster → Operating etcd clusters for Kubernetes (看不懂英文的,可右上角翻译成中文)
kubernetes.io/zh-cn/docs/…
解答:
注意:
- 记得设置 ETCDCTL_API=3
- 如果文件没权限, 就 sudo -i
备份快照
$ sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot save /var/lib/backup/etcd-snapshot.db
恢复快照
$ sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot restore /data/backup/etcd-snapshot-previous.db
检查
# 没必要
$ etcdctl snapshot status /var/lib/backup/etcd-snapshot.db -wtable