# CKA **Repository Path**: alibobo_boc/CKA ## Basic Information - **Project Name**: CKA - **Description**: CKA考试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2020-07-11 - **Last Updated**: 2023-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CKA #### 介绍 CKA考试 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 题目解析 1.监控 pod foo 的日志并: 提取与错误 unable-to-access-website相对应的日志行 将这些日志行写入 /opt/KULM00201/foo kubectl logs foo | grep -i unable-to-access-website > /opt/KULM00201/foo 2.按 name排序列出所有persistent volumes,将完整的 kubectl 输出保存到/opt/KUCC00102/pv_list。 使用 kubectl 的自带功能对输出排序,不要做其他任何处理。 kubectl get pv -A --sort-by=.metadata.name > /opt/KUCC00102/pv_list 3.确保在 Kubernetes cluster 的每个 node上都运行pod nginx的一个实例, 此处的一个实例, 此处nginx也 表示必须使用的Image名称。 切勿覆盖当前存在的任何taint 。 使用 DaemonSet完成此任务,并使用 ds-kusc00201 作为 DaemonSet名 apiVersion: apps/v1 kind: DaemonSet metadata: name: ds-kusc00201 namespace: kube-system labels: k8s-app: ds-kusc00201 spec: selector: matchLabels: name: ds-kusc00201 template: metadata: labels: name: ds-kusc00201 spec: tolerations: - key: node-role.kubernetes.io/master operator: "Exists" effect: NoSchedule containers: - name: nginx image: nginx 4.执行以下任务: 添加一个init container 至 lumpy-koala (已在spec文件/opt/KUCC00108/pod-spec-KUCC00108.yaml中定义) initcontainer应该:创建一个名为/workdir/eager.txt的空文件 如果未检测到/workdir/eager.txt,pod应退出 一旦使用initcontainer定义更新spec文件,则应创建pod 原文件 { apiVersion: v1 kind: Pod metadata: name: kumpy-koala spec: volumes: - name: workdir emptyDir: {} containers: - name: checker image: alpine command: ["/bin/sh", "-c", "if [ -f /workdir/calm.txt ];then sleep 100000;else exit 1;fi"] volumeMounts: - name: workdir mountPath: /workdir } 增加内容: initContainers: - name: init-mydb image: busybox:1.28 command: ['sh', '-c', "touch /workdir/eager.txt"] volumeMounts: - name: workdir mountPath: /workdir 5.创建一个名为 kucc4的pod,在 pod里面分别为以下每个 images单独运行一个appcontainer (可能会有 1-4 个 imagesimages images ): nginx + redis apiVersion: v1 kind: Pod metadata: labels: run: kucc4 name: kucc4 spec: containers: - image: nginx name: nginx - image: redis name: redis 6.按如下要求调度一个pod: 名称: nginx-kusc00101 Image:nginx Node selector:disk=ssd apiVersion: v1 kind: Pod metadata: labels: run: nginx-kusc00101 name: nginx-kusc00101 spec: containers: - image: nginx name: nginx-kusc00101 nodeSelector: disk: ssd 7.按如下要求创建一个deployment: 名称: nginx-app 使用 container:nginx,版本号为 1.11.10-alpine Deployment应包含3 个副本 然后,执行滚动更新使用版本 1.12.0-alpine 部署应用并记录此更新。 最后,将此更新回滚至之前版本 1.11.10-alpine apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-app name: nginx-app spec: replicas: 3 selector: matchLabels: app: nginx-app template: metadata: labels: app: nginx-app spec: containers: - image: nginx:1.11.10-alpine name: nginx kubectl set image deployment/nginx-app nginx=nginx:1.12.0-alpine --record kubectl rollout history deployment nginx-app kubectl rollout undo deployment nginx-app --to-revision=1 8.创建和配置front-end-service service,以便可通过 ClusterIP 访问该 service 并将其路由到名为 front-end 的现有 pod apiVersion: v1 kind: Service metadata: name: front-end-service spec: selector: app: front-end ports: - protocol: TCP port: 80 targetPort: 80 9.按如下要求创建一个pod: 名称: nginx 使用 Image:nginx 在名为 website-frontend的新 Kubernetes namespace中 kubectl run nginx --image=nginx -n website-frontend --dry-run=client -o yaml 10.创建一个deployment 的 spec 文件: 发布: Image:redis,3 个副本,label : app_runtime_mode=staging Deployment 名称: kual00201 将此spec 文件的副本保存至 /opt/KUAL00201/deployment_spec.yaml (或 /opt/KUAL00201/deployment_spec.json )。 完成后,清理(删除)执行此任务时生的何新Kubernetes API对象 kubectl create deployment kual00201 --image=redis --dry-run=client -o yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app_runtime_mode: staging name: kual00201 spec: replicas: 3 selector: matchLabels: app_runtime_mode: staging template: metadata: labels: app_runtime_mode: staging spec: containers: - image: redis name: redis kubectl delete -f kual00201.yaml 11.创建文件:/opt/KUCC00302/kucc00302.txt ,该文件列出在命名空间default下关联服务foo所有 pods。 文件格式应为每行只列一个 pod 名称 kubectl get pod -n default -o yaml kubectl get pods -l app=foo -l service=backend -o custom-columns=NAME:.metadata.name > /opt/KUCC00302/kucc00302.txt 12.按如下要求创建一个kubernetes secret: 名称:super-secret credential: s3kr3t 使用redis image创建一个名为pod-secrets-via-file 的Pod,该pod在/secrets目录下挂载名为super-secret的secret 使用redis image创建一个名为pod-secrets-via-env的pod,将credential导出为TOPSECRET apiVersion: v1 kind: Secret metadata: name: super-secret type: Opaque data: credential: s3kr3t(base64) apiVersion: v1 kind: Pod metadata: name: pod-secrets-via-file spec: containers: - name: pod-secrets-via-file image: redis volumeMounts: - name: super-secret mountPath: "/secrets" volumes: - name: super-secret secret: secretName: super-secret - key: credential path: super-secret piVersion: v1 kind: Pod metadata: name: pod-secrets-via-env spec: containers: - name: pod-secrets-via-env image: redis env: - name: TOPSECRET valueFrom: secretKeyRef: name: super-secret key: credential restartPolicy: Never 13.按如下要求创建一个pod: 名称: non-persistent-redis Container Image:redis Volume 的名称为:app-cache 挂载路径: /data/redis 应在 pre-prod namespace发布,且该 volume必须不能是永久的 apiVersion: v1 kind: Pod metadata: name: non-persistent-redis namespace: pre-prod spec: containers: - image: redis name: redis volumeMounts: - mountPath: /data/redis name: app-cache volumes: - name: app-cache emptyDir: {} 14.将 deployment 从 loadbalancer扩展至5 pods。 kubectl scale deployment loadbalancer --replicas=5 15.检查有多少 worker nodes已准备就绪(不包括被打上 TaintTaint :NoSchedule 的节点) 并将 数量写入 /opt/KUCC00104/kucc00104.txt kubectl get node 16.通过 pod label name=overload-cpu ,找到运行时占用大量 , CPU的 pod 并将占用CPU最高的pod 名称写入文件/opt/KUTR00102/KUTR00102.txt(已存在)。 kubectl top pod -l name=overload-cpu -A 17.按如下要求创建一个deployment: 名称: nginx-random 通过 service暴露:nginx-random 确保 service 和 pod可通过各自的 DNS记录访问 在此 deployment中运行的任何 pod 内的 container 都应使用 nginx Image 接下来,使用实工具nslookup查询该 service和 pod的 DNS记录 并将输出结果分别写入 /opt/KUNW00601/service.dns和/opt/KUNW00601/Pod.dns。 kubectl create deployment nginx-random --image=nginx --dry-run=client -o yaml kubectl expose deployment nginx-random --port=80 kubectl get pod -o wide kubectl run busybox -it --rm --image=busybox:1.28 sh nslookup nginx-random nslookup ip 18.为在 https://127.0.0.1:2379 运行的 etcd 实例创建快照,并将保存至文件路径/srv/data/etcd-snapshot.db 以下 TLS证书 /密钥用于通过 etcdctl 连接服务器 CA 证书: /opt/KUCM00302/ca.crt 客户端证书:/opt/KUCM00302/etcd-client.crt 客户端密钥:/opt/KUCM00302/etcd-client.key ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 snapshot save /srv/data/etcd-snapshot.db --cacert=/opt/KUCM00302/ca.crt --cert=/opt/KUCM00302/etcd-client.crt --key=/opt/KUCM00302/etcd-client.key 19.将名为ek8s-node-1 的 node 设置为不可用,并重新调度该node 上所有运行的pods kubectl drain node ek8s-node-1 --ignore-daemonset 20.名为wk8s-node-0 的 Kubernetes worker node处于 NotReady状态。调查发生这种情况的原因 并采取相应措施将node恢复为Ready状态,确保所做的任何更改永久有效。 可使用以下命令通过ssh 连接到故障 node ssh wk8s-node-0 可使用以下命令在该node 上获取更高权限 sudo -i 启动kubelet即可 21.在标签为name=wk8s-node-1 的 node 上配置 kubelet systemd-managed service, 以自启动包含名称为app、 Image为 jenkins的单个container的 pod。 所需的有 spec文件应放在该node的 /etc/kubernetes/manifests 目录中。 可使用以下命令通过ssh 连接到故障 node ssh wk8s-node-0 可使用以下命令在该node 上获取更高权限 sudo -i 将yaml文件放到相应的文件夹下即可 22.作为小型开发团队的管理员,您被要求设置一个 Kubernetes cluster以测试新的application的可行性。 TaskTask 您必须使用kubeadm来执行此任务。任何kubeadm 调用 都需要使用--ignore-preflight-errors=all选项。 将 node ik8s-master-0 配置为master node。 将 node ik8s-node-0 加入到cluster 中。 You must use the kubeadm configuration file located at /etc/kubeadm.conf when initializingyour cluster. 一旦两个 nodes 都处于 “就绪 ”状态,cluster 将被视为完成 23.提供一个非完全正常运行的 Kubernetes cluster,在该 cluster中找出故障征兆。 确定 node和出现故障的服务,采取措施修复故障服务使 cluster恢复正常 24.创建名为app-config的 persistent volume ,容量为 2Gi,访问模式为ReadWriteMany volume类型为hostPath ,位于/srv/app-config apiVersion: v1 kind: PersistentVolume metadata: name: app-config spec: capacity: storage: 2Gi volumeMode: Filesystem accessModes: - ReadWriteMany storageClassName: slow hostPath: path: "/srv/app-config"