CKA(二)题库一

CKA(二)题库一

本文提供了有关Kubernetes认证考试的一份真题

第⼀题:权限控制RBAC

问题权重: 4%

为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定的 namespace 的特定ServiceAccount。

Task 创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole: Deployment StatefulSet DaemonSet

在现有的 namespace app-team1中创建一个名为cicd-token的新 ServiceAccount。 限于 namespace app-team1中,将新的ClusterRole deployment-clusterrole绑定到新的 ServiceAccount cicd-token。

考点:RBAC授权模型的理解。

考点:rbac 🔗

# kubectl config use-context k8s

开始操作 kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets

kubectl -n app-team1 create serviceaccount cicd-token

# 题目中要求“限于namespace app-team1中”,则创建rolebinding。没有要求,则创建clusterrolebinding。

kubectl -n app-team1 create rolebinding cicd-token-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:  # "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制 name: lomtom-deployment-clusterrole rules:

- apiGroups: [""]  # 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets" resources: ["Deployment","StatefulSet","DaemonSet"] verbs: ["create"]

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:  # "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制 name: lomtom-deployment-clusterrole rules:

- apiGroups: [""]  # 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets" resources: ["Deployment","StatefulSet","DaemonSet"] verbs: ["create"] [root@dev-user2-96263-y1rby rbac]# cat service-account.yaml apiVersion: v1 kind: ServiceAccount metadata: name: lomtom-cicd-token namespace: lomtom automountServiceAccountToken: false

apiVersion: rbac.authorization.k8s.io/v1

# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 Secret 资源

kind: RoleBinding metadata: name: lomtom-role-binding namespace: lomtom subjects:

- kind: ServiceAccount name: lomtom-cicd-token      # 'name' 是区分大小写的 namespace: lomtom roleRef: kind: ClusterRole name: lomtom-deployment-clusterrole apiGroup: rbac.authorization.k8s.io

第⼆题:设置节点不可用


问题权重: 4%

Task 将名カek8s-node.1 的node没置カ不可用,并重新凋度该node上所有运行的pods

考点: drain node 🔗


kubectl drain

第三题:升级 kubeadm

- 设置配置环境 kubectl config use-context mk8s
- 现有的 kubernetes 集群正在运行的版本是 1.21.0。仅将主节点上的所有 kubernetes 控制平面 和节点组件升级到版本 1.21.1。
- 另外,在主节点上升级 kubelet 和 kubectl。

确保在升级前 drain 主节点,并在升级后 uncordon 主节点。请不要升级工作节点,etcd,container管理器,CNI 插件,DNS服务或任何其他插件。

第四题:备份还原 etcd


问题权重: 7% 此项目无需更改配置环境。但是,在执行此项目之前,请确保您已返回初始点: [student@nk85- master-0] $ exit Task 首先,为运行在https://127.0.0.1:2379上的现有etcd 实例创建快照并将快照保存到/data/backup/etcd-snapshot.db 为给定实例创建快照预计能在几秒钟内完成。如果该操i作似乎挂起,则命令可能有问题。用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 🔗


etcdctl --endpoints=https://127.0.0.1:2379 \  --cacert= --cert= --key= \  snapshot save

etcdctl --data-dir snapshot restore snapshotdb

第五题:配置⽹络策略 NetworkPolicy


问题权重: 7%

设置配置环境: [studentinode-1] $ kubectl config use-context hk8s

Task

在现有的namespace my-app中创建一个名为allow-port-from-namespace 的新NetworkPolicy 。

确保新的NetworkPolicy 允许namespace my-app 中的Pods来连 接到namespace big-corp 中的端口8080 。

进一步确保新的 NetworkPolicy : 不允许对没有在监听端口8080的Pods的访问 不允午不来自namespace my-app中的Pods的访问

考点:network policy 🔗


apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:  name: allow-port-from-namespace  namespace: lomtom spec:  podSelector: {}  policyTypes:    - Egress  egress:    - to:        - namespaceSelector:            matchLabels:              project: lomtom      ports:        - protocol: TCP          port: 8080

第六题:创建Service


问题权重: 7% 设置配置环境: [student@node-1] $| kubectl config use- context k8s

Task 请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器nginx 的端口80/tcp。 创建一个名为front-end-svc的新服务,以公开容器端口http。 配置此服务,以通过在排定的节点上的NodePort来公开各个Pods

kubectl  run front-end --image nginx --port 80  -n lomtom

kubectl  expose pod front-end --name front-end-svc --port 80 --target-port 80 --type NodePort -n lomtom

第七题:按要求创建 Ingress 资源


问题权重: 7% 设置配置环境: [student@mnode-1] $ kubectl config use-context k8s

Task 如下创建一个新的nginx Ingress 资源:

名称: pong Namespace: ing-internal使用服务端口5678 在路径/hello. 上公开服务hello

可以使用以下命令检查服务hello 的可用性,该命令应返回hello : [student@node-1] $| curl -kL /hello

考点:ingerss 🔗


apiVersion: networking.k8s.io/v1 kind: Ingress metadata:  name: pong  namespace: lomtom  annotations:    nginx.ingress.kubernetes.io/rewrite-target: / spec:  ingressClassName: nginx  rules:  - http:      paths:      - path: /hello        pathType: Prefix        backend:          service:            name: hello            port:              number: 5678

第⼋题:扩容Deployment


问题权重: 4% 设置配置环境: [student@node-1] $ kubeotl corfig use- context k8s Task 将deployment 从loadbalancer 扩展至 5 pods

kubectl create deployment loadbalancer --image=nginx --replicas=1 -n lomtom

考点:deploy 🔗


kubectl scale deployment/loadbalancer --replicas=5 -n lomtom

第九题:调度 pod 到指定节点


问题权重: 4% 设置配置环境: [student@node-1] $ kubectl config use-context k8s Task 按如下要求调度一个 cod: 名称: nginx-kusc00401 Image: nginx Node selector: disk=ssd

考点:node-selector 🔗


apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: nginx-kusc00401 name: nginx-kusc00401 namespace: lomtom spec: containers:

- image: nginx name: nginx-kusc00401 nodeSelector: disk: ssd

第⼗题: 统计ready 状态节点数量


问题权重: 4% 设置配置环境: [student@node-1] $ kubectl config use-context k8s

Task 检查有多少worker nodes已准备就绪(不包括被打上Taint: NoSchedule的节点),并将数量写入 /opt/KUSC00402/kusc00402.txt

kubectl describe nodes $(kubectl get nodes | grep Ready| awk '{print $1}') | grep Tain | grep -vc NoSchedule > /opt/KUSC00402/kusc00402.txt

第⼗⼀题:创建多容器的pod


问题权重: 4% 设置配置环境: [student@node-1] $ kubectl config use-context k8s Task 创建一个名为kucc4 的pod, 在pod里面分别为以下每个images单独运行一个app container (可能会有1-4个images) : nginx + redis + memcached

apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: kucc4 name: kucc4 namespace: lomtom spec: containers:

- image: nginx name: nginx
- image: redis name: redis
- image: memcached name: memcached

第⼗⼆题:按要求创建PV


问题权重: 4% 设置配置环境: [student@node-1] $| kubectl config use-context hk8s Task 创建名为app-data 的persistent volume,容量为2Gi,访问模式为ReadWriteOnce 。volume 类型为hostPath, 位于/srv/app-data

考点:volume 🔗


apiVersion: v1 kind: PersistentVolume metadata: name: app-data namespace: lomtom spec: capacity: storage: 1Gi volumeMode: Filesystem accessModes:

- ReadWriteOnce hostPath: path: /srv/app-data

第⼗三题:创建和使⽤PVC


问题权重: 7% 设置配置环境: [student@node-1] $ kubectl config use- context ok8s Task 创建一个新的PersistentVolumeClaim ; 名称: pvc-volume Class: csi-hostpath-sc 容量: 10Mi 创建一个新的Pod, 此Pod将作为volume挂载到 PersistentVolumeClaim : 名称: web-server Image: nginx 挂载路径: /usr/share/nginx/html

配置新的pod,以对volume具有ReadWriteOnce权限。

最后,使用kubectl edit 或kubectl patch将PersistentVolumeClaim的容量扩展为70Mi,并记录此更改。

apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume labels: type: local spec: storageClassName: csi-hostpath-sc capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"


apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-volume namespace: lomtom spec: storageClassName: csi-hostpath-sc accessModes: - ReadWriteOnce resources: requests: storage: 10Mi

apiVersion: v1 kind: Pod metadata: name: web-server namespace: lomtom spec: volumes: - name: pvc-volume persistentVolumeClaim: claimName: pvc-volume containers: - name: nginx image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - mountPath: "/usr/share/nginx/html" name: pvc-volume

第⼗四题:监控pod的⽇志


问题权重: 5%

设置配置环境: [student@node-1] $ kubectl config use-context k8s

Task 监控pod bar的日志并: 提取与错误file-not-found 相对应的日志行 将这些日志行写入/opt/KUTR00101/bar

kubectl logs bar | grep file-not-found > /opt/KUTR00101/bar

第⼗五题:添加 sidecar 容器并输出⽇志


问题权重: 7% 设置配置环境: [studentnode-1] $ kubectl config use- context k8s Context 将一个现有的Pod集成到Kubernetes的内置日志记录体系结构中(例如kubectl logs) 。添加streaning sidecar容器是实现此要求的一种好方法。

Task 使用busybox Image来将名为sidecar的sidecar容器添加到现有的Pod legacy-app 中。新的sidecar容器必须运行以下命令: /bin/sh -c tail -n+1 -f /var/1og/legacy-app . log 使用安装在/var/log的Volume,使日志文件legacy-app.log可用于sidecar容器。 除了添加所需的volume mount以外,请勿更改现有容器的规格。

第⼗六题:查看 cpu 使⽤率最⾼的 pod


问题权重: 5%

设置配置环境: [student@node-1] $ kubectl config use- context k8s

Task 通过pod label name=cpu-utilizer,找到运行时占用大量CPU的 pod,并将占用CPU最高的pod名称写入文件 /opt/KUTR00401/KUTR00401.txt (已存在)

第⼗七题:排查集群中故障节点

问题权重: 13%

设置配置环境: [student@node-1] $ kubectl config use-context wk8s

Task 名为wk8s-node-0 的Kubernetes worker node处于NotReady状态。调查发生这种情况的原因,并采取相应措施将node恢复为Ready 状态,确保所做的任何更改永久有效。

注意:

可使用以下命令通过ssh 连接到故障node: [student@node-1] $ ssh wk8s-node-0 可使用以下命令在该node上获取更高权限: [student@w8ks-node-0] $ sudo -i 

题目原文1 🔗

题目原文2 🔗

lomtom

标题:CKA(二)题库一

作者:lomtom

链接:https://lomtom.cn/9855268f