本次测试的所有问题都必须在指定的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. 一站式搭建 GitHub Pages 博客 (一)

    本文将详细讲解如何快速搭建 GitHub Pages 博客页面 关于博客主题,博客信息更改,上传文章等将会在 一站式搭建 GitHub Pages 博客 (二) 中进行详细讲解 准备阶段 注册 Git ...

  2. Numpy实现简单BP神经网络识别手写数字

    本文将用Numpy实现简单BP神经网络完成对手写数字图片的识别,数据集为42000张带标签的28x28像素手写数字图像.在计算机完成对手写数字图片的识别过程中,代表图片的28x28=764个像素的特征 ...

  3. linux开放端口关闭防火墙

    linux开放端口关闭防火墙 systemctl status firewalld查看当前防火墙状态. 开启防火墙      systemctl start firewalld开放指定端口       ...

  4. Linux增加用户

    Linux增加用户 注意一个不加-m不会出现家目录 sudo useradd Hans -m sudo passwd Hans sudo usermod -s /bin/bash Hans sudo ...

  5. k8s-pv-pvc

    1. 简介 持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者 使用存储类(Storage Class)来动态供应. 持久卷是集群资源,就像节点也是集群资源 ...

  6. 微服务架构 | *3.5 Nacos 服务注册与发现的源码分析

    目录 前言 1. 客户端注册进 Nacos 注册中心(客户端视角) 1.1 Spring Cloud 提供的规范标准 1.2 Nacos 的自动配置类 1.3 监听服务初始化事件 AbstractAu ...

  7. C# 获取DPI例子

    public static float GetDpiX() { System.Windows.Forms.Panel p = new System.Windows.Forms.Panel(); Sys ...

  8. CentOS 7安装Odoo 15社区版的详细操作指南

    我之前的文章介绍过在Windows环境下安装Odoo 15,如果您需要在Windows部署,具体可参考我文末的微信号<10分钟教你本机电脑安装Odoo 15,并启用一个内置的项目APP应用> ...

  9. 加深对AQS原理的理解示例一:实现一个独占锁

    /** *@Desc * 这个自定义的独占锁 只是一个简单的版本,非常粗糙,只为了加深对AQS原理理解.但还有一些列问题有待解决,比如锁的重入,锁不允许被其他线程中断等! *@Author zhang ...

  10. java解洛谷P1003铺地毯问题

    此题给出的最大地毯数量为10000,创建[10001][4]长度的二维数组 以稀松数组的方法,[第i个地毯]的 [0][1][2][3]分别保存地毯的坐标和大小 再用需要求的坐标比较即可 public ...