CKA题库练习
CKA题库练习
夏佳怡开启TAB补全
做题前先配置k8s自动补齐功能,否则无法TAB补全命令:
- 登陆管理节点
kubectl --help | grep bash
,此步是为了找关键词completionsudo vim /etc/profile
- 添加
source <(kubectl completion bash)
5.保存退出,source /etc/profile
创建ClusterRole
- 创建一个名字为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole:
- Deployment
- StatefulSet
- DaemonSet
- 在现有的 namespace app-team1 中创建有个名为 cicd-token 的新 ServiceAccount。
- 限 于 namespace app-team1 , 将 新 的 ClusterRole deployment-clusterrole 绑 定 到 新 的 ServiceAccount cicd-token。
1 | kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet |
设置节点不可用,并重新调度pod
将名为 ek8s-node-0 (vms25)的 node 设置为不可用,并重新调度该 node 上所有运行的 pods
1 | kubectl cordon ek8s-node-0 (vms25) # 设置节点是不可调度状态 |
此三个命令都会使node停止被调度,后期创建的pod不会继续被调度到该节点上,但操作的暴力程度不一
1.cordon 停止调度
影响最小,只会将node调为SchedulingDisabled
之后再发创建pod,不会被调度到该节点
旧有的pod不会受到影响,仍正常对外提供服务
恢复调度
kubectl uncordon node_name
2.drain 驱逐节点
首先,驱逐node上的pod,其他节点重新创建
接着,将节点调为 SchedulingDisabled
–force
当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候
就需要用–force来强制执行 (例如:kube-proxy)
–ignore-daemonsets
无视DaemonSet管理下的Pod
–delete-local-data
如果有mount local volumn的pod,会强制杀掉该pod并把料清除掉
另外如果跟本身的配置讯息有冲突时,drain就不会执行
恢复调度
kubectl uncordon node_name
封锁节点,先让节点变的不可调度
kubectl cordon
对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod。
安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisruptionBudgets 执行优雅的中止。
注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod,如果您想了解更多详细的内容,请参考kubectl drain
kubectl drain 返回成功表明所有的 pod (除了前面排除的那些)已经被安全驱逐(遵循期望优雅的中止期,并且没有违反任何应用程序级别的中断预算)。
然后,通过对物理机断电或者在云平台上删除节点所在的虚拟机,都能安全的将节点移除。
kubectl uncordon
1 |
|
3.delete 删除节点
首先,驱逐node上的pod,其他节点重新创建
然后,从master节点删除该node,master对其不可见,失去对其控制,master不可对其恢复
恢复调度,需进入node节点,重启kubelet
基于node的自注册功能,节点重新恢复使用
systemctl restart kubelet
delete是一个比较粗暴的命令,它会将被删node上的pod直接驱逐,由其他node创建(针对replicaset),然后将被删节点从master管理范围内移除,master对其失去管理控制,若想使node重归麾下,必须在node节点重启kubelet
升级集群
现有的 Kubernetes 集群正在运行版本 1.24.2。仅将 master 节点上的所有 Kubernetes 控制平面和节点组件升级到版本 1.24.3。
确保在升级之前 drain master 节点,并在升级后 uncordon master 节点。
可以使用一下命令,通过 ssh 连接到 master 节点:
ssh master01
可以使用一下命令,在该 master 节点上获取更高权限:
sudo -i
另外,在主节点上升级 kubelet 和 kubectl。
请不要升级工作节点,etcd,container 管理区,CNI 插件,DNS 服务或任何其他插件。
1 | # 停止调度主节点,并驱逐(腾空)主节点。 |
etcd备份还原
首先,创建运行在https://127.0.0.1:2379现有etcd实例的快照,将快照保存到文件路径 /data/backup/etcd-snapshot.db
接下来,恢复现有的,以前的快照位于 /data/backup/etcd-snapshot-previous. db
etcd实例正在运行etcd版本3.1.10
提供以下TLS证书/密钥用于使用etcdctl连接到服务器
CA证书: /opt/KUCM00302/ca.crt
客户证书: /opt/KUCM00302/etcd-client.crt
客户端密钥:/opt/KU CM 00302/etc d-client. key
备份
1 | #参数说明 |
还原
1 | ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 snapshot restore /data/backup/etcd-snapshot.db |
NetworkPolicy 网络策略
- 设置配置环境 kubectl config use-context k8s
- 在 internal 命名空间创建一个名为 allow-port-from-namespace 的 NetworkPolicy。
- 允 许 namespace internal 中的 Pods 来连接到 namespace big-corp 中的端口 9200。
- 确保新的 NetworkPolicy:
- 不允许对没有在监听端口 9200 的 pods 访问
- 不允许不来自 namespace internal 的 pods 的访问
参考:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/
1 | # 这是一个 NetworkPolicy 的示例 |