本次测试的所有问题都必须在指定的cluster配置环境中完成。为尽量减少切换,系统已对问题进行分组,同一cluster内的所有问题将连续显示。

开启TAB补全

做题前先配置k8s自动补齐功能,否则无法TAB补全命令:

  1. 登陆管理节点
  2. kubectl --help | grep bash,此步是为了找关键词completion

  3. sudo vim /etc/profile
  4. 添加source <(kubectl completion bash)



    5.保存退出,source /etc/profile

1.4% k8s

- 设置配置环境 kubectl config use-context k8s
Context
- 为部署管道创建一个新的 ClusterRole 并将其绑定到范围为特定 namespace 的特定 ServiceAccount
  • 创建一个名字为 deployment-clusterrole 且仅允许创建以下资源类型的新ClusterRole:

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

解答:

1.kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet
2.kubectl create serviceaccount cicd-token -n app-team1
3.kubectl create rolebinding xxx(随便起名字) --clusterrole=deployment-clusterrole --serviceaccount=cicd-token:app-team1 -n app-team1

2.4% ek8s

- 设置配置环境 kubectl config use-context ek8s
- 将名为 ek8s-node-0 (vms25)的 node 设置为不可用,并重新调度该 node 上所有运行的 pods

解答:

kubectl drain vms25.rhce.cc --ignore-daemonsets

3.7% mk8s

- 设置配置环境 kubectl config use-context mk8s
- 现有的 kubernetes 集群正在运行的版本是 1.21.0。仅将主节点上的所有 kubernetes 控制平面 和节点组件升级到版本 1.21.1。
- 另外,在主节点上升级 kubelet 和 kubectl。
[start-plane type="4"]确保在升级前 drain 主节点,并在升级后 uncordon 主节点。请不要升级工作节点,etcd,container管理器,CNI 插件,DNS服务或任何其他插件。[/start-plane]--etcd-upgrade=false
kubeadm upgrade apply 1.21.1 --etcd-upgrade=false

解答:

1.登陆官网k8s.io,可以右上角更换语言,点击Learn Kubernetes Basics

2.搜索upgrade



3.开始升级,步骤官方文档中都有步骤,步骤如下:

kubectl config use-context mk8s
kubectl get nodes
ssh vms28(28为mk8s的控制平面节点)
sudo su - (需用root用户执行下方命令)

apt-get update && \ apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00 (安装kubeadm包)

kubeadm upgrade apply v1.21.1 –etcd-upgrade=false(题中提示etcd不被升级,所以加后面的参数)
kubectl drain vms28.rhce.cc --ignore-daemonsets (升级kubelet和kubectl前腾空节点,官方文档中流程都有,看着修改就好)

apt-get update && \ apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00(安装kubelet和kubectl包)

systemctl daemon-reload
systemctl restart kubelet
kubectl uncordon vms28.rhce.cc

4.7%

  • 此项目无需更改配置环境
  • 首 先 为 运 行 在 https://127.0.0.1:2379 上 的 现 有 etcd 实 例 创 建 快 照 并 将 快 照 保 存 到 /srv/data/etcd-snapshot.db。
  • 为给定实例创建快照预计能在几秒钟内完成。如果该操作似乎挂起,则命令可能有问题。用 ctrl+c 来取消操作,然后重试。
  • 然后还原位于/srv/data/etcd-snapshot-previous.db 的现有先前快照.

提供了一下 TLS 证书和密钥,以通过 etcdctl 连接到服务器。 CA 证书:/opt/KUIN00601/ca.crt 客户端证书: /opt/KUIN00601/etcd-client.crt 客户端密钥:/opt/KUIN00601/etcd-client.key

解答:

使用root账户操作

etcdctl –help 查看是否有snapshot命令,有是版本3无为版本2

若是2.则手动导入3

export ETCDCTL_API=3

不知道命令怎么写可以etcdctl snapshot save --help

主要三个参数为:-–cacert,--cert,--key

1.保存etcd实例快照:

考试环境:

#etcdctl snapshot save -–cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” -- /srv/data/etcd-snapshot.db

练习环境:

#etcdctl snapshot save /srv/data/etcd-snapshot.db

2.还原快照

考试环境:

#etcdctl snapshot restore –cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” /srv/data/etcd-snapshot.db

练习环境:

#etcdctl snapshot restore /srv/data/etcd-snapshot.db

5.7% k8s

  • 设置配置环境 kubectl config use-context k8s
  • 在 internal 命名空间创建一个名为 allow-port-from-namespace 的确保新的 NetworkPolicy 允 许 namespace internal 中的 Pods 来连接到 namespace big-corp 中的端口 9200。
  • 确保新的 NetworkPolicy:
  • 不允许对没有在监听端口 9200 的 pods 访问
  • 不允许不来自 namespace internal 的 pods 的访问

解答:

1.先创建题中的命名空间(Namespace)

kubectl configuse-context k8s
kubectl get namespace
kubectl create namespace internal
kubectl create namespace big-corp
kubectl label namespace big-corp name=big-corp

2.打开官网,搜索ingress或egress或networkpolicy,然后第一个网络策略





3.复制上方yaml代码,新建yaml文件,例如networkpolicy.yaml,名字随意起

4.将复制的代码按照题意改为下图所示:

kubectl apply -f networkpolicy.yaml
kubectl get networkpolicies.networking.k8s.io -n internal

6.7% k8s√

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

解答:

kubectl config use-context k8s
kubectl get deployments.apps
kubectl edit deployments.apps front-end (edit编辑时只能使用空格,不要TAB否则保存不了)

ports:
- name: http
containePort: 80
protocol: TCP 创建front-end-svc服务:
kubectl expose –-name=front-end-svc deployment front-end -–port=80 –-target-port=80 –-type=NodePort

7.7% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 如下创建一个新的 nginx ingress 资源:
  • 名称:pong
  • namespace: ing-internal
  • 使用服务端口 5678 在路径/hello 上公开服务 hello
  • 可以使用一下命令检查服务 hello 的可用性,该命令返回 hello: curl -kL < INTERNAL_IP>/hello/

解答:

1.kubectl config use-context k8s
2.打开官方文档,搜索ingress,选择第一个结果即可,进入后复制yaml模板并新建一个yaml文件
3.vim ingress.yaml

4.kubectl apply -f 7-ing.yaml
5.kubectl get ing -n ing-internal

8.4% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 将 deployment 从 webserver 扩展至 6pods

解答:

kubectl config use-context k8s
kubectl get deploy
kubectl scale deployment webserver –-replicas=6
kubectl get deploy

9.4% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 按如下要求调度一个 pod:
  • 名称:nginx-kusc00401
  • image: nginx
  • Node selector: disk=ssd

解答:

kubectl run nginx-kusc00401 --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml > 9-pod.yaml
加入如下标红代码

kubectl apply -f 9-pod.yaml
kubectl get pods

10.4% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 检查有多少个 worker nodes 已准备就绪(不包括被打上 Taint: NoSchedule 的节点),并将数 量写入/opt/KUSC00402/kusc00402.txt

解答:

Kubectl get nodes
查看节点是否有污点
kubectl describe nodes [vms22.rhce.cc](http://vms22.rhce.cc) | grep Taint
kubectl describe nodes [vms23.rhce.cc](http://vms23.rhce.cc) | grep Taint
echo 1 > /opt/KUSC00402/kusc00402.txt

11.4% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 创建一个名字为kucc4的pod,在pod里面分别为以下每个images单独运行一个app container (可能会有 1-4 个 images):
  • nginx+redis+memcached+consul

解答:

kubectl run kucc4 1–image=nginx –1image-pull-policy=IfNotPresent –1dry-run=client -o yaml > 11-pod.yaml
vim 11-pod.yaml(将图中标红项复制3次并修改pod名字即可)

kubectl apply -f 11-pod.yaml
kubectl get pod

12.4% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 创建名为 app-data 的 persistent volume,容量为 1Gi,访问模式为 ReadWriteMany。volume 类型为 hostPath,位于/srv/app-data

解答:

1.官方文档中搜索persistent volume,第一个案例即可



2.vim 12-pv.yaml,按照题意修改



3.kubectl apply -f 12-pv.yaml

4.kubectl get pv

13.7% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 创建一个新的 PersistentVolumeClaim:
  • 名称:pvvolume
  • 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 k8s

继续在上题中的官方文档中找到下方案例:

vim 13-pvc.yaml,讲案例复制,注意更改标红项,其他项删除(此步目的:创建新的 PersistentVolumeClaim)



kubectl apply -f 13-pvc.yaml

继续在上题的官方文档中下滑找到下方案例:

vim 13-pvc-pod.yaml,将案例复制(此步目的:创建一个新的 pod,此 pod并挂载到PersistentVolumeClaim)



kubectl apply -f 13-pvc-pod.yaml

kubectl edit pvc pvvolume –-record,将10Mi改为70Mi(--record目的为记录此次更改,不加--record的话第三小题没有分数)

14.5% k8s √

  • 设置配置环境 kubectl config use-context k8s
  • 监控 pod foo 的日志并:
    • 提取与错误 unable-to-access-website 相对应的日志行
    • 将这些日志行写入到/opt/KUTR00101/foo

解答:

$ kubectl config use-context k8s
$ kubectl logs foo | grpe unable-to-access-website > /opt/KUTR00101/foo

15.7% k8s

  • 设置配置环境 kubectl config use-context k8s

    • 在不更改其现有容器的情况下,需要将一个现有的 pod 集成到 kubernetes 的内置日志记录 体系结构中(例如 kubectl logs)。添加 streamimg sidecar 容器是实现此要求的一种好方法。
    • 将一个 busybox sidecar 容器添加到现有的 pod legacy-app。新的 sidecar 容器必须运行一下命令:

      /bin/sh -c tail -n+1 -f /var/log/legacy-app.log
  • 使用名为 logs 的 volume mount 来让文件/var/log/legacy-app.log 可用于 sidecar 容器。

    不要更改现有容器。不要修改日志文件的路径,两个容器必须通过/var/log/legacy-app.log 来访问该文件

解答:

kubectl config use-context k8s

kubectl get pod legacy-app -o yaml > 15-pod.yaml

vim 15-pod.yaml

1.添加pod及vomuleMount挂载点



2.添加volumes



3.修改挂载目录及名称



4.kubectl apply -f 15-pod.yaml

5.删除legacy-app,否则再运行yaml时会提示legacy-app已存在

kubectl delete pod legacy-app -–force

16.5% k8s√

  • 设置配置环境 kubectl config use-context k8s
  • 通过 pod label name=cpu-user,找到运行时占用大量 CPU 的 pod,并将占用 CPU 最高的 pod 名称写入到文件/opt/KUTR000401/KUTR00401.txt(已存在)

解答:

kubectl top pods -l name=cpu-user

echo "占比最高的机器名" > /opt/KUTR000401/KUTR00401.txt

17.13% ek8s

  • 设置配置环境 kubectl config use-context ek8s
  • 名为wk8s-node-0(练习环境使用 vms26.rhce.cc)的 kubernetes worker node 处于 Not Ready状态。调查发生这种情况的原因,并采取相应措施将 node 恢复为Ready状态,确保所做的任何更改永久生效。
  • 可使用以下命令通过ssh连接到故障node:
    • ssh wk8s-node-0 (vms26.rhce.cc)
  • 可使用以下命令在该node上获取更高权限:
    • sudo -i

解答:

kubectl get nodes
ssh vms26.rhce.cc
sudo -i
systemctl start kubelet ; systemctl enable kubectl
Exit退出
$kubectl get nodes

k8s-cka考试题库的更多相关文章

  1. Kubernetes/K8s CKA认证全套实训视频教程下载

    地址: 链接:https://pan.baidu.com/s/1bwEUZTCVzqM3mGjrlISbcg 提取码:r1kx 目录: 目录: │ 1-1.kubernetes理论教程 - 云原生技术 ...

  2. 云K8S - AWS容器库ECR(ERS)编排ECS-EKS以及阿里云编排ACS-ACK

    云K8S相关 AWS 部分-ECR(ERS) ECS EKS 20180824 Chenxin AWS的容器编排目前分为 ECS 和 EKS 两种. AWS价格说明 Fargate模式的ECS,换算成 ...

  3. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  4. kubernetes学习:CKA考试题

    1. 列出环境内所有的pv 并以 name字段排序(使用kubectl自带排序功能) kubectl get pv --sort-by=.metadata.name 2. 列出指定pod的日志中状态为 ...

  5. asp.net微软认证全新考试题库及答案1

    1.你创建了一个ASP.net应用程序,该程序将运行在TK公司的WEB站点上.你的应用程序包括100个WEB页面.你想配置你的应用程序,当HTTP代码发生错误时,可显示自定义的错误信息给用户.同时你想 ...

  6. OCP 062考试题库2019年新出现的考题-17

    choose one What is a pre-requisite to alter a role? A) You should set the OS_ROLES parameter to true ...

  7. (2019)OCP 12c 062考试题库出现大量新题-4

    4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...

  8. 【OCP-12c】2019年CUUG OCP 071考试题库(80题)

    80.View the exhibit and examine the structure in ORDERS and ORDER_ITEMS tables. You need to create a ...

  9. 【OCP-12c】2019年CUUG OCP 071考试题库(79题)

    79.Which statement is true about transactions? A. A set of Data Manipulation Language (DML) statemen ...

随机推荐

  1. Git创建分支进行开发

    一.业务场景 自己当前开发的项目算是一个中型项目,整个项目都是由自己一个人开发完成,主要有两个子项目,一个是小程序的后台,一个是小程序的后台管理系统. 因为从一开始就只有我一个人在进行开发,所以自己平 ...

  2. kafka学习笔记(二)kafka的基本使用

    概述 第一篇随笔从消息队列的定义和各种应用,以及kafka的分类定义和基本知识,第二篇就写一篇关于kafka的基本实际配置和使用的随笔,包括kafka的集群参数的配置,生产者使用机制,消费者使用机制. ...

  3. HIVE执行引擎TEZ学习以及实际使用

    概述 最近公司在使用Tez,今天写一篇关于Tez的学习和使用随笔.Tez是Apache最新的支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能.Tez并不 ...

  4. 学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象

    1.常用的事件: ① onload:页面加载 ② onblur: 失去焦点 onfocus: 获取焦点 ③ onclick:点击 ④ onmouseover:鼠标经过 onmouseout:鼠标离开 ...

  5. 同步gitlab与github

    1.找到setting 2.找到左下方的developer setting 3.按标好的数字依次执行 4.填写note并勾选repo 5.在最左下方勾选 6.保存生成的新的token到其他地方,之后你 ...

  6. Hadoop 代码实现文件上传

    本项目主要实现Windows下利用代码实现Hadoop中文件上传至HDFS 实现上传文本文件中单词个数的计数 1.项目结构 2.相关代码 CopyFromLocalFile 1 package com ...

  7. 【机器学习】HMM

    机器学习算法-HMM 目录 机器学习算法-HMM 1. 模型定义 2. 序列生成 3. 概率计算 3.1 前向计算 3.2 后向计算 4. 学习 4.1 求解 4.2 求解 4.3 求解 5. 预测 ...

  8. 搭建服务器之FTP

    FTP服务器,使用软件vsftpd,服务守护进程也是vsftpd.客户端访问的话可以用浏览器或ftp命令行. 1.yum install vsftpd.安装简单主要是配置,这个比httpd复杂点的地方 ...

  9. vue学习2-bind属性绑定

    需要加上 v-html才能显示网页

  10. Docker 实操

    ---恢复内容开始--- 一.简介 Linux容器作为一类操作系统层面的虚拟化技术成果,旨在立足于单一Linux主机交付多套隔离性Linux环境.与虚拟机不同,容器系统并不需要运行特定的访客操作系统. ...