当前位置:   article > 正文

kubernetes CKA题库(附答案、视频)

cka题库

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第一题 RBAC授权

问题权重: 4%

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

Context
为部署管道创建一个新的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 。

解题

kubectl config use-context k8s
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create ns app-team1
kubectl create serviceaccount cicd-token -n app-team1
kubectl create rolebinding cicd-token --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
#验证
kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第二题 节点设置不可用

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

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

解题

 kubectl config use-context ek8s
 kubectl drain k8s21-worker01 --ignore-daemonsets
  • 1
  • 2

注:如果执行drain提示错误,根据提示再加上选项,例如–delete-local-data–force

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第三题 升级K8s版本

问题权重: 7%
设置配置环境:
[student@node-1] $ kubectl config use- context mk8s
Task
现有的Kubernetes集群正在运行版本1.20.0。仅将主节点上的所
有Kubernetes控制平面和节点组件升级到版本1.20.1。
确保在升级之前drain主节点,并在升级后uncordon主节点。

可使用以下命令通过ssh 连接到主节点:
[student@node-1] $| ssh mk8s-master-0
可使用以下命令在该主节点上获取更高权限:
[student@mk8s-master-0] $ sudo -i
另外,在主节点升级kubelet和kubectl。

kubectl config use-context mk8s 
kubectl drain mk8s-master-0 --ignore-daemonsets
ssh mk8s-master-0
sudo -i
apt install kubeadm-1.20.1-00 -y
kubeadm upgrade plan
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false # 题目要求不升级etcd
# 升级 kubelet 和 kubectl
apt install kubelet-l.20.1-00 kubectl-l.20.1-00 -y
systemctl restart kubelet
#设置为可调度
kubectl uncordon mk8s-master-0
# 查看升级结果
kubectl get node
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第四题 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

答题:

# 备份
ETCDCTL_API=3 etcdctl snapshot save /data/backup/etcd-snap.db --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key --endpoints=https://127.0.0.1:2379
# 恢复
systemctl stop etcd
systemctl cat etcd # 确认下数据目录(--data-dir 值)
mv /var/lib/etcd /var/lib/etcd.bak
ETCDCTL_API=3 etcdctl snapshot restore /data/backup/etcd-snapshot-previous.db --
data-dir=/var/lib/etcd
chown -R etcd:etcd /var/lib/etcd
systemctl start etcd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第五题 网络策略

问题权重: 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的访问

解题:

kubectl config use-context hk8s
#给命名空间打标签:
kubectl label namespace big-corp name=big-corp

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: my-app
spec:
  podSelector: {} 
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: big-corp
    ports:
    - protocol: TCP
      port: 8080
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

参考文档:https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第六题 SVC 暴露应用

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

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

kubectl config use-context k8s
kubectl create deployment --image=nginx --port=80 front-end
kubectl edit deployment front-end修改port的名字
.....
 spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
.......
kubectl expose deployment front-end --port=80 --target-port=80 --type="NodePort" --name=front-end-svc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第七题: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 <INTERNAL_ IP>/hello

# 以下考试无需要操作
kubectl create ns ing-internal
kubectl create deployment hello --image=nginx --port=80 --namespace=ing-internal
kubectl expose deployment hello --port=5678 --target-port=80 --name=hello --namespace=ing-internal
kubectl exec -it hello-8fd7d4d77-2kdv9 -- /bin/bash -n ing-internal
  echo "hello" > /usr/share/nginx/html/index.html
# 以下考试操作
cat 7.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678
curl -kL <INTERNAL_ IP>/hello              
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第八题 扩容 Pod 数量

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

解题:

#以下考试不需要操作
kubectl create deployment loadbalancer --image=nginx --replicas=1
#以下考试操作
kubectl config use-context k8s
kubectl scale deployment loadbalancer --replicas=5
  • 1
  • 2
  • 3
  • 4
  • 5

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第九题 nodeSelector

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

解题:

# 以下考试无需要操作
kubectl label node k8s21-worker02 disk=ssd
# 以下考试操作
kubectl config use-context k8s

cat 9.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disk: ssd
kubectl apply -f 9.yaml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十题统计准备就绪节点数量

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

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

解题:

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

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十一题 Pod 配置多容器

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

解题:

kubectl config use-context k8s
cat 11.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: kubcc4
spec:
  containers:
  - name: nginx
    image: nginx
  - name: redis
    image: redis
  - name: memcached
    image: memcached

kubectl apply -f 11.yaml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十二题 创建 PV

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

答题:

kubectl config use-context hk8s
cat 12.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-data
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/srv/app-data"

kubectl apply -f 12.yaml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十三题 Pod 使用 PVC

问题权重: 7%
设置配置环境:
[student@node-1] $ kubectl config use- context ok8s
Task
创建一个新的PersistentVolumeClaim ;
名称: pv-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,并记录此更改。

kubectl config use- context ok8s
# cat 12.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  storageClassName: nfs-server
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: web-server
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage
kubectl apply -f 12.yaml
# 扩容 PVC 容量
kubectl edit pvc pv-volume --save-config
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十四题 获取 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
  • 1

https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十五题 给 Pod 增加一个容器(边车)

问题权重: 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以外,请勿更改现有容器的规格。

kubectl config use-context k8s 
apiVersion: v1 
kind: Pod 
metadata: 
 name: legacy-app 
spec: 
 containers: 
 - name: count 
   image: busybox 
   args: 
   - /bin/sh 
   - -c 
   - > 
     i=0; 
     while true; 
     do 
       echo "$i: $(date)" >> /var/log/legacy-app.log; 
       sleep 1; 
     done 
   volumeMounts: 
   - name: varlog 
     mountPath: /var/log 
 volumes: # volumes 块在导出的 yaml 下面已经有了,在已有的添加下面两行即可 
 - name: varlog 
   emptyDir: {} 
 
kubectl get pod legacy-app -o yaml > legacy-app.yaml # 导出后修改文件 
kubectl delete pod legacy-app 
kubectl apply -f legacy-app.yaml 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十六题 统计使用 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 (已存在)

答题:

kubectl config use-context k8s
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" –A # 然后将第一个 Pod 名称写到文件
echo "<podname>" > /opt/KUR00401.txt
  • 1
  • 2
  • 3

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

第十七题 节点 NotReady 处理

问题权重: 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
  • 3
  • 4

答题:

kubectl config use-context wk8s
kubectl get node
ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本博客相关视频链接: https://www.ixigua.com/7080166741921235492?id=7151713414783042085

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/171476?site
推荐阅读
相关标签
  

闽ICP备14008679号