一、为部署管道创建一个新的 ClusterRole
并将其绑定到范围为特定 namespace 的特定 ServiceAccount
任务:
- 创建一个名字为
deployment-clusterrole
且仅允许创建以下资源类型的新ClusterRole
:-
Deployment
-
StatefulSet
-
DaemonSet
-
- 在现有的 namespace
app-team1
中创建一个名为cicd-token
的新ServiceAccount
。 - 限于 namespace
app-team1
,将新的 ClusterRoledeployment-clusterrole
绑定到新的 ServiceAccountcicd-token
。
答案:
kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet
创建clusterrole
kubectl create clusterrole :这是使用kubectl 命令行工具创建集群角色的语法。
deployment-clusterrole : 这是指定要创建的集群角色的名称。
--verb=create : 这是定义集群角色的权限动作,这是创建(create)。这就意味这,这个用户或服务账号将能够创建指定资源类型对象。
--resource=Deployment,StatefulSet,DaemonSet: 这是指定集群角色控制的资源类型
创建
ServiceAccount
kubectl --namespace app-team1 create serviceaccount cicd-token
kubectl --namespace app-team1:指定使用哪个命名空间,在命名空间里操作。
create serviceaccount :指定命名空间里创建一个账号。
cicd-token : 指定要创建的服务账号名称。
绑定 rolebinding
kubectl create rolebinding cicd-token-deployment-clusterrole --clusterrole=deployment-clusterrolr --serviceaccount=app-team1:cicd-token --namespace=app-team1
在
app-team1
命名空间中创建一个名为cicd-token-deployment-clusterrole
的
RoleBinding
资源,将deployment-clusterrole
ClusterRole
绑定到app-team1
命名空间中的cicd-token
服务账号。验证
kubectl -n app-team1 describe rolebindings cicd-token-deployment-clusterrole
二、任务:
将名为 k8s-worker1
的 node 设置为不可用, 并重新调度该 node 上所有运行的 pods
答案:
先查看节点
kiosk@k8s-master:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 167d v1.24.1 k8s-worker1 Ready <none> 167d v1.24.1 k8s-worker2 Ready <none> 167d v1.24.1
驱离节点
kiosk@k8s-master:~$ kubectl drain k8s-woker1
驱离k8s-master节点
kubectl drain k8s-woker1 --ignore-daemonsets --delete-emptydir-data
将会驱逐"k8s-master"节点上的Pod,但会忽略DaemonSet类型的Pod,并删除挂载在EmptyDir卷上的数据。这样可以在维护节点时确保Pod的平稳迁移,并清理临时数据。
检查:
kiosk@k8s-master:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 167d v1.24.1 k8s-worker1 Ready,SchedulingDisabl <none> 167d v1.24.1 k8s-worker2 Ready <none> 167d v1.24.1