CKA考试
1. K8S集群Control Plane版本升级,不包括etcd、coreDNS
参考文档
- https://v1-20.docs.kubernetes.io/zh/docs/tasks/administer-cluster/safely-drain-node/
- https://v1-20.docs.kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
- https://v1-20.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain
路就是先升级kubeadm,然后使用kubeadm升级容器相关组件,最后升级kubelet、kubectl
注意: 在操作Control Plane之前必须drain该节点,升级完成后还需要uncordon该节点,使其可以正常工作。在drain时会提示daemonset类型的pod无法驱逐,使用提示里面的--ignore-daemonsets参数即可
主要命令如下
root@~ ]$ kubectl get node # 查看节点状态是否都已经ready
root@~ ]$ kubectl drain hostname --ignore-daemonsets # 将该节点设置为不可调度,并驱逐该节点的所有动态pod,--ignore-daemonsets会把所有daemonsets管理的pod也一起驱逐
root@~ ]$ apt update # 更新可用的软件包列表
root@~ ]$ apt-cache policy kubeadm # 显kubeadm的安装状态和版本信息
root@~ ]$ apt-get update && apt-get install -y --allow-change-held-packages kubeadm=1.20.7-00 # 更新kubeadm版本到1.20.7
root@~ ]$ kubeadm version # 验证kubeadm版本
root@~ ]$ kubeadm upgrade plan # 查看升级计划
root@~ ]$ kubeadm upgrade apply --etcd-upgrade=false v1.20.7 # 根据升级计划中提示的升级命令将Contron Plane节点相关静态pod组件升级为1.20.7,如果不升级etcd则添加--etcd-upgrade=false参数,默认是true
root@~ ]$ apt-get update && apt-get install -y --allow-change-held-packages kubelet=1.20.7-00 kubectl=1.20.7-00
root@~ ]$ systemctl daemon-reload
root@~ ]$ systemctl restart kubelet # 重启kubelet
root@~ ]$ kubectl uncordon hostname # 升级完成后恢复该节点为可调度
CoreDNS:如果升级过程中这两个组件也被升级了,那么只需要使用kubectl edit -n kube-system deploy coredns修改deploy中的image版本号为原来的即可,重启kubelet后生效
cordon只会将节点标记为不可调度,而drain不仅会标记为不可调度,默认还会驱逐所有动态pod,但是不能驱逐daemonsets管理的pod。
2. 创建etcd快照,并使用提供的备份快照恢复
参考文档
主要命令如下
root@~ ]$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 --cacert=ca.crt --cert=server.crt --key=server.key snapshot save /data/bucket/etcd-snapshot.db # 备份etcd数据到指定路径下
root@~ ]$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 --cacert=ca.crt --cert=server.crt --key=server.key snapshot status /data/bucket/etcd-snapshot.db -w table # 验证快照信息
root@~ ]$ systemctl stop etcd # 必须停掉etcd服务才可以恢复快照
root@~ ]$ mv /var/lib/etcd /tmp/etcd.bak # 将原有的数据目录移动到新的位置
root@~ ]$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 --cacert=ca.crt --cert=server.crt --key=server.key snapshot restore /srv/data/etcd-snapshot-previous.db # 恢复快照到默认路径
root@~ ]$ mv ~/default.etcd /var/lib/etcd && chown etcd.etcd -R /var/lib/etcd # 将恢复到默认位置的数据移动到etcd实际的数据目录并修改属主及属组
root@~ ]$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 --cacert=ca.crt --cert=server.crt --key=server.key snapshot restore /srv/data/etcd-snapshot-previous.db --data-dir=/var/lib
root@~ ]$ systemctl start etcd
注意: 如果在恢复备份的时候使用了--data-dir=/var/lib参数则不需要再mv恢复的数据目录到实际目录,但是需要检查一下目录的属主和属组信息
3. 为已存在的deployment创建service
- 使用
kubectl create命令创建
root@~ ]$ kubectl create service nodeport front-end-svc --tcp=80:80 --dry-run=client -o yaml # 输出yaml格式内容,将其放入front-end-svc.yaml文件中修改label和selector
- 使用
kubectl expose命令创建
root@~ ]$ kubectl expose deployment front-end --type=NodePort --protocol=TCP --port=80 --target-port=80 --name=front-end-svc --selector=app=front-end --labels=app=font-end-svc # 该命令可以直接创建符合要求的service,其中selector以及标签都设置好了,servcie的name也是OK的
4. 创建ClusterRole,并将其绑定到指定的ServiceAccount
root@~ ]$ kubectl create clusterrole deployment-clusterrole --resource=Deployment,StatefulSet,DaemonSet --verb=create # 创建clusterrole
root@~ ]$ kubectl create namespace app-team1 # 创建namespace
root@~ ]$ kubectl create serviceaccount cicd-token -n app-team1 创建serviceaccount
root@~ ]$ kubectl create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-tema1:cicd-token -n app-team1 # 创建rolebinding
root@~ ]$ kubectl -n app-team1 describe rolebinding cicd-token-binding # 查看rolebinding详情
5. 扩容现有的deployment
root@~ ]$ kubectl scale deployment presentation --replicas=3
6. 创建ingress
root@~ ]$ kubectl create ingress ping --rule=/hi=hi:5678 -n ing-internal

浙公网安备 33010602011771号