第一题 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/

第二题 节点设置不可用
设置配置环境:
[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

第三题 升级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

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

第五题 网络策略
问题权重: 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/

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

第七题: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

第八题 扩容 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

第九题 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/

第十题统计准备就绪节点数量
问题权重: 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

第十一题 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

第十二题 创建 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/

第十三题 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/

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

第十五题 给 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/

第十六题 统计使用 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

第十七题 节点 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

————————————————
版权声明:本文为CSDN博主「cloud_engineer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cloud_engineer/article/details/123978205

最新文章

  1. JAVA源码分析-HashMap源码分析(一)
  2. 使用xib封装一个view的步骤
  3. 2014鸟人Birdman中文字幕文件下载
  4. [转载] Redis
  5. Html5 localstorage解决Ajax回退的坑
  6. C#winform控制textbox输入只能为数字
  7. 最小化安装centos的init初始化脚本
  8. Linux内核设计与实现 读书笔记 转
  9. Oracle 体系结构2 - 实例和数据库
  10. TextBox 绑定到DataTable某一列属性上
  11. PPT内嵌视频(指发布时只需要ppt一个文件即可)
  12. java_设计模式_命令模式_Command Pattern(2016-08-09)
  13. HDU 1255 覆盖的面积 ——(线段树+扫描线)
  14. JaveScript基础(1)之变量和数据类型
  15. GitLab CI/CD 进行持续集成
  16. LoadRunner脚本准备
  17. Shell-cat url-list.txt | xargs wget -c
  18. RestTemplate之GET和POST调用和异步回调
  19. aapt 命令可应用于查看apk包名、主activity、版本等很多信息
  20. 寻找List之和的最近素数

热门文章

  1. Kubernetes 版本升级之路
  2. flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解
  3. Elastic:Sense chrome - 在 chrome 浏览器中操作 Elasticsearch 的插件
  4. CentOS yum如何安装php7.4
  5. mac 批量修改文件的后缀名
  6. 《Deep Feature Extraction and Classification of Hyperspectral Images Based on Convolutional Neural Networks》论文笔记
  7. 浅谈 Golang 插件机制
  8. sql 中HAVING函数
  9. POJ2955 Brackets (区间DP)
  10. cudaMemcpy cudaMalloc