• CKA考题 [k8s1.21]


    相关链接:
    CKA考题[k8s1.24]: https://blog.csdn.net/qq_41822345/article/details/127136171

    【摘要】 (CKA)认证Kubernetes管理员,由Linux基金会和云原生计算基金会(CNCF)推出,是关于kubernetes技术的官方认证。当前考题考试环境kubernetes1.21。考试共计17道题,线上考试,2小时之内完成。

    题目来自 华为云社区 :https://bbs.huaweicloud.com/blogs/301628

    第一题 权限控制 RBAC

    任务:

    使用kubectl config use-context k8s

    • 创建 名字为deployment-cluserrole的ClusterRole,可以创建Deployment,StatefulSet,DaemonSet。
    • 在namespace名字为app-team1下创建名字为cicd-token的ServiceAccount。
    • 将创建好的ClusterRole和cicd-token进行绑定。

    答案:

    切换到kubectl config use-context k8s

    kubectl create clusterrole deployment-clusterrole--verb=create--resource=Deployment,StatefulSet,DaemonSet
    
    kubectl -n app-team1 create serviceaccourt cicd-token
    
    kubectl create rolebinding cicd-token --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token --namespace=app-team1
    
    • 验证
    kubectl describe -n app-team1 rolebindings cicd-bind
    

    第二题 驱逐node中的pod

    任务:

    使用kubectl config use-context ek8s

    • 将名字为ek8s-node-0的节点,设置为不可用。

    答案:

    切换到kubectl config use-context ek8s。

    kubectl drain ek8s-node-0 --ignore-daemonsets --force
    
    • 验证
    kubectl describe ek8s-node-0
    

    第三题 K8s升级

    任务:

    使用kubectl config use-context mk8s。

    • Master节点使用Kubeadm将升级至1.21.1。升级前master设置drain,升级后恢复uncordon。
    • Kubelet和kubectl同样升级,但是etcd不升级。

    答案:

    切换到kubectl config use-context mk8s

    # (确定哪个node是master )
    kubectl get nodes
    kubectl drain ek8s-node-0--ignore-daemonsets --force
    # 登录节点,并sudo -i 授权
    ssh master
    apt-get install -y kubeadm=1.21.1-00
    # (验证)
    Kubeadm upgrade plan
    Kubeadm upgrade apply v1.21.1 --etcd-upgrade=false
    Apt-get install -y kubelet=1.21.1-00 kubectl=1.21.1-00
    systemctl daemon-reload
    systemctl restart kubelet
    #Exit(返回到mk8s)
    kubectl uncordon ek8s-node-0
    
    • 验证
    #(查看状态是否非unschedule)
    kubectl describe ek8s-node-0
    

    第四题 etcd备份恢复

    任务:

    • 对etcd进行备份。
    • 用/srv/data/etcd-snapshot-previous.db恢复etcd。

    答案:

    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/opt/KUIN00601/ca.crt --cert= --key=/opt/KUIN00601/etcd-client.crt \ --key=/opt/KUIN00601/etcd-client.key  snapshot save /data/backup/etcd-snapshot.db
     
    ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 snapshot restore /srv/data/etcd-snapshot-previous.db
    

    第五题 配置网络策略 NetworkPolicy

    任务:

    使用kubectl config use-context hk8s。

    • 创建一个名字为allow-port-from-namespace的NetworkPolicy,只允许NS为internal的pod允许通过80端口访问NS为fubar的pod。

    答案:

    切换到kubectl config use-context hk8s。

    # (查看internal的标签)
    Kubectl get ns --show-labels
    Vim NetworkPolicy.yaml
    # 如下
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-port-from-namespace
      namespace: fubar
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
        ingress:
      - from:
        - namespaceSelector:
          matchLabels:
            label1: internal
        ports:
          - protocol: TCP
            port: 80
    

    创建网络策略:

    kubectl apply -f NetworkPolicy.yaml
    

    第六题 暴露服务 Service

    任务:

    使用kubectl config use-context k8s。

    • 通过一个已经存在的名字为front-end的deployment增加一个特殊的配置:
      容器为nginx,名字为http端口为80。
    • 通过修改后front-end这个deployment导出一个名字为front-end-svc,并且该SVC可以启用新修改的配置。

    答案:

    切换到kubectl config use-context k8s。

    #(查看front-end)
    kubectl get deployment.app front-end -o yaml
    kubectl edit deployment.app front-end
    

    在name=nginx下面插入:

    ports:
      - name: http
        containerPort: 80
    
    # (看到已经增加的http和80端口,则代表更改完成)
    kubectl descript deployment.app front-end
    kubectl expose deployment.app frond-end --port=80 --target-port=http --type=NodePort --name=front-end-svc
    

    验证:

    # (看到有front-end-svc)
    Kubectl get svc
    # (看到http和80端口的映射状态,代表成功)
    Kubectl descript svc front-end-svc 
    
    

    第七题 创建 Ingress

    任务:

    使用kubectl config use-context k8s。

    • 创建名字为pong的ingress,命名空间ing-internal,服务名hi,路径/hi,服务端口5678。

    答案:

    切换到kubectl config use-context k8s。

    Vim ingress.yaml
    # 如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: pong
      namespace: ing-internal
    spec:
      rules:
      - http:
         paths:
          - path: /hi
            pathType: Prefix
            backend:
              service:
                name: hi
                port:
                  number: 5678
    
    • 验证
    kubectl -ning-internal get ingress
    Curl -kL <internal_ip> /hi
    

    第八题 扩容 deployment 副本数

    任务:

    使用kubectl config use-context k8s。

    • 将guestbook的deployment内pod数量更改为6。

    答案:

    切换到kubectl config use-context k8s。

    kubectl scale deployment guestbook --replicas=6
    
    • 验证
    kubectl get deployment guestbook
    

    第九题 调度 pod 到指定节点

    任务:

    使用kubectl config use-context k8s。

    • 创建一个pod,名字为nginx-kusc00401,镜像为nginx,nodeSelector为disk:spinning。

    答案:

    Vim nginx.yaml
    # 如下:
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-kusc00401
    spec:
      containers:
      - name: nginx
        image: nginx
      nodeSelector:
        disk: spinning
    

    创建pod应用

    kubectl apply -f nginx.yaml
    kubectl get pod nginx-kusc00401
    

    第十题 查看可用node数量

    任务:

    使用kubectl config use-context k8s。

    • 查看当前状态为ready的node,统计ready的node,taint=none,并将统计的数量输出到/opt/KUSC00402/kusc00402.txt。

    答案:

    # (查看共有几个状态为ready的node)
    kubectl get nodes
    # (taints:,每一个node都查看一下,统计数量)
    kubectl describe nodes <node name> | grep -i taint
    # (将结果输入)
    echo 4>/opt/KUSC00402/kusc00402.txt
    

    第十一题 创建多容器的pod

    任务:

    使用kubectl config use-context k8s。

    • 创建一个名字为kucc8的pod,里面包含2个容器redis和consul。

    答案:

    Vim kucc8.yaml
    # 如下:
    apiVersion: v1
    kind: Pod
    metadata:
    name: kucc8
      spec:
        containers:
        - name: redis
          image: redis
        - name: consul
          image: consul
    

    创建应用

    kubectl apply -f kucc8.yaml
    kubectl get pod
    

    第十二题 创建 PV

    任务:

    使用kubectl config use-context hk8s。

    • 创建一个名字为app-config,大小2G,readwritenany,类型为host path,path路径为/srv/app-config的卷。

    答案:

    使用kubectl config use-context hk8s。

    Vim app-config.yaml
    # 如下:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: app-config
      spec:
        capacity:
          storage: 2Gi
        accessModes:
          - ReadWriteMany
        hostPath:
          path: /srv/app-config
    
    • 验证
    Kubectl get pv
    

    第十三题 创建 PVC

    任务:

    • 创建一个名字为pv-volume,类型为csi-hostpath-sc,大小为10M的pvc。
    • 创建一个pod,使用第一步创建的pvc,挂在地址是/usr/share/nginx/html。
    • 将第一步创建的pv-volume大小更改为70M。

    答案:

    Vim pv-volume.yaml
    # 如下:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
       name: pv-volume #pvc 名字
    spec:
       storageClassName: csi-hostpath-sc
       accessModes:
          - ReadWriteOnce # 注意,考试时访问模式可能有 ReadWriteMany 和 ReadOnlyMany 和 ReadWriteOnce,根据题目要求写。
       resources:
          requests:
            storage: 10Mi
    

    创建pvc

    kubectl apply -f pv-volume.yaml
    

    创建pod,绑定pvc

    vim web-server.yaml
    # 如下:
    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server
    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
          - mountPath: /usr/share/nginx.html
            name: mypd
        volumes:
          - name: mypd
            persistentVolumeClaim:
              claimName: pv-volume
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
       name: pv-volume #pvc 名字
    spec:
       storageClassName: csi-hostpath-sc
       accessModes:
          - ReadWriteOnce # 注意,考试时访问模式可能有 ReadWriteMany 和 ReadOnlyMany 和 ReadWriteOnce,根据题目要求写。
       resources:
          requests:
            storage: 10Mi
    

    创建pod并验证

    kubectl apply -f web-server.yaml
    kubectl descript pod web-server
    # (将10Mi改成70Mi,保存即可)
    kubectl edit pvc pv-volume
    

    第十四题 查看 pod 日志

    任务:

    使用kubectl config use-context k8s。

    • 导出pod名为foobar的日志,查找其中包含file-not-found的错误,并写入到/opt/KUTR00101/foobar。

    答案:

    切换到kubectl config use-context k8s。

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

    第十五题 使用 sidecar 代理容器日志

    任务:

    使用kubectl config use-context k8s。

    已经有一个pod,用于存储记录kubectl的logs。

    • 已有的名字为11-factor-app的pod,添加一个容器sidicar,使用busybox镜像,命令为/binsh -c “tail -n+1 f /var/log/11-factor-app.log”。
    • 将新容器(看数据)和老容器(写数据),都挂在存储到/var/log。

    答案:

    # (输出其yaml文件)
    kubectl get pod 11-factor-app -o yaml > app.yaml
    # (先备份一份,删除managed部分,删除status部分,不删会有问题。)
    vim app.yaml
    # 在container下添加:
    containers:
      - name: sidecar
        image: busybox
        args: [/bin/sh, -c,'"tail -n+1 f /var/log/11-factor-app.log"']
        volumeMounts:
        - name: varlog
          mountPath: /var/log
    # 在原容器下添加:
        volumeMounts:
        - name: varlog
          mountPath: /var/log
    #注意:pod的volumes为emptyDir。
        volumes:
        - name: varlog
          emptyDir: {}
    

    重新创建pod应用

    kubectl delete pod 11-factor-app
    kubectl apply -f app.yaml
    

    第十六题 查看 pod 的 CPU

    任务:

    使用kubectl config use-context k8s。

    • 查找label标签name=cpu-utilizer的pod,查看他们的CPU使用率,将使用率最高的pod,写到/opt/KUTR00401/KUTR00401.txt。

    答案:

    切换到kubectl config use-context k8s。

    # (查看哪个pod的CPU使用率最高,如pod名为websvr)
    kubectl top pod -l name=cpu-utilizer
    echo websvr >/opt/KUTR00401/KUTR00401.txt
    

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

    任务:

    使用kubectl config use-context wk8s。

    • 名字叫做wk8s-node-0的node状态为NotReady,查找原因,并让其状态变为ready。

    答案:

    切换到kubectl config use-context wk8s。

    ssh wk8s-node-0
    sudo -i
    # (查看kubelet为啥没起来)
    systemctl status kubelet
    systemctl start kubelt
    systemctl enable kubelet
    exit
    

    验证:

    # (状态为Ready)
    kubectl get node
    
  • 相关阅读:
    Flutter开发 - 花式收键盘&TextField小贴士
    剑指offer刷题【链表篇】
    D - Wall Painting
    BIM如何通过3D开发工具HOOPS实现WEB轻量化?
    安防视频监控EasyCVR视频汇聚平台与萤石云平台的适配方案分析
    Springboot整合轻量级反爬虫组件kk-anti-reptile
    WPF MVVM模式下如何给Textbox设置焦点(GalaSoft.MvvmLight)
    JSP基础
    java-net-php-python-springboot区校企大型仪器智慧共享平台计算机毕业设计程序
    机器学习:详细推导序列最小优化SMO算法+Python实现
  • 原文地址:https://blog.csdn.net/qq_41822345/article/details/127038941