K8S CKA 1.29 题库 考试环境+模拟环境

K8S CKA 1.29 题库 考试环境+模拟环境

微信: kc123123v

题库

题库一共17道题,题目难度都不大,在题库中,context和task是描述信息和任务,每一题都配置了官网的文档。
关键词的使用方法: 在考试的时候只能访问官网查资料,考试是类似于远程桌面,在远程桌面的浏览器访问官网,不能做书签和收藏,所以需要掌握如何查询每道题的官方文档。在给你的关键词中,是让你在官网去搜索用的,考试的时候建议这样用,因为每个题目的链接你下来,用关键词可事半功倍。根据截图去搜索就行。

1、基于角色的访问控制-RBAC

Context:
为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定的 namespace 的特定ServiceAccount。
Tasks:
创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许对Deployment、Daemonset、Statefulset具有create权限,在现有的 namespace app-team1中创建一个名为cicd-token的新 ServiceAccount。
限于 namespace app-team1中,将新的ClusterRole deployment-clusterrole绑定到新的 ServiceAccount cicd-token。
关键词:RBAC
考试环境:

[student@node-1]$ kubectl config use-context k8s  # 设置配置环境,模拟环境不用
[student@node-1]$ kubectl  create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
[student@node-1]$ kubectl create serviceaccount cicd-token -n app-team1
[student@node-1]$ kubectl create rolebinding cicd-token-rolebinding -n app-team1 --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
[student@node-1] $ kubectl describe rolebinding cicd-token-rolebinding -n app-team1 # 检查

模拟环境:

root@master:~# kubectl  create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
root@master:~# kubectl create serviceaccount cicd-token -n app-team1
root@master:~# kubectl create rolebinding cicd-token-rolebinding -n app-team1 --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
root@master:~# kubectl describe rolebinding cicd-token-rolebinding -n app-team1 # 检查

2、节点维护-指定node节点不可用

Tasks:
Set the node named ek8s-node-1 as unavailable and reschedule all the pods running on it .
翻译:
Tasks:
将ek8s-node-1节点设置为不可用,然后重新调度该节点上的所有Pod.
关键词:drain node
考试环境:

[student@node-1] $ kubectl config use-context ek8s
[student@node-1] $ kubectl cordon ek8s-node-1    #设置节点是不可调度状态
[student@node-1] $ kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force

模拟环境:

root@master:~# kubectl  get nodes
NAME     STATUS   ROLES           AGE     VERSION
master   Ready    control-plane   5h55m   v1.29.0
node     Ready    <none>          5h53m   v1.29.0
root@master:~# kubectl  cordon node
node/node cordoned
root@master:~# kubectl  drain node --delete-emptydir-data --ignore-daemonsets --force

3、k8s版本升级

现有的Kebernetes集群正在运行的版本1.29.0。仅将master节点上的所有Kubernetes控制平面和节点组件升级到版本1.29.1。
(注意,考试时,有的考生是1.29.0升级到1.29.1,有的考生是1.30.0升级到1.30.1,具体升级的版本要注意,根据题目要求更改)
确保升级之前drain master节点,并在升级后uncirdon master节点
可以使用一下命令,通过ssh连接到master节点。
ssh master01
可以使用一下命令,在该master节点上获取更高权限:
sudo -i
另外在主节点上升级kubelet和kubectl。
请不要升级工作节点,etcd,container管理器,CNI插件,DNS服务或任何其他插件。

[student@node-1] $kubectl config use-context mk8s
[student@node-1] $ kubectl get nodes
# cordon 停止调度,将node调为SchedulingDisabled。新pod不会被调度到该node,但在该node的旧pod不受影响。
# drain 驱逐节点。首先,驱逐该node上的pod,并在其他节点重新创建。接着,将节点调为 SchedulingDisabled。
[student@node-1] $ kubectl cordon master01
[student@node-1] $ kubectl drain master01  --delete-emptydir-data --ignore-daemonsets --force
# ssh到master节点,并切换到root下
[student@node-1] $ ssh master01
[student@master01] $ sudo -i
[root@master01] # apt-cache show kubeadm|grep 1.29.1
[root@master01] # apt-mark hold kubeadm  # 解锁
[root@master01] # apt-get update
[root@master01] # apt-get install -y kubeadm=\1.29.1-1.1'
# 验证升级计划
[root@master01] # apt-mark hold kubeadm # 锁定kubeadm 自动升级
[root@master01] #kubeadm upgrade plan
# 排除etcd,升级其他的,提示时,输入y。
[root@master01] # kubeadm upgrade apply v1.29.1 --etcd-upgrade=false # 输入Y
[root@master01] # systemctl restart kubelet 
[root@master01] # kubeadm version 
# 升级kubelet
[root@master01] # apt-mark unhold kubelet kubectl 
[root@master01] #apt-get install -y kubelet=1.29.1-1.1
[root@master01] # kubelet --version
# 升级kubectl
[root@master01] #apt-get install kubectl=1.29.1-1.1
[root@master01] #kubectl version
# 退出root,退回到student@master01
[root@master01] # exit
# 退出master01,退回到student@node-1
[student@master01] $ exit
# 不要输入exit多了,否则会退出考试环境的。
#恢复master01调度
 [student@node-1] $ kubectl uncordon master01
 [student@node-1] $ kubectl get node

模拟环境:

kubectl version
kubelet --version
kubeadm version 
kubectl get nodes
# master节点上设置
kubectl cordon master
kubectl drain master --delete-emptydir-data --ignore-daemonsets --force
apt-cache show kubeadm | grep 1.29.1  # 如果执行这个没有结果的话 先执行后面三条命令 
# apt-mark unhold kubeadm   apt-get update  apt-get install -y kubeadm='1.29.1-1.1'
# 考试的时候已经有了
apt-mark unhold kubeadm  # 允许升级kubeadm 
apt-get update
apt-get install -y kubeadm='1.29.1-1.1' # 下载的时候需要多等一下,考试的时候下载会很快
apt-mark hold kubeadm # 锁定
kubeadm upgrade plan # 验证升级计划
kubeadm upgrade apply v1.29.1 --etcd-upgrade=false # 交互式页面输入Y 
systemctl restart kubelet
kubeadm version # 至此kubeadm升级完成
# 升级kubeket 和kubectl 
apt-mark unhold kubelet kubectl 
apt-get install -y kubelet='1.29.1-1.1'
kubelet --version 
systemctl restart kubelet 
apt-get install -y kubectl='1.29.1-1.1'
kubectl version 
root@master:~# kubectl  get nodes
NAME              STATUS                     ROLES           AGE   VERSION
master   		  Ready,SchedulingDisabled   control-plane   45d   v1.29.1
node			  Ready                      <none>          45d   v1.29.0

kubectl uncordon master

4、ETCD数据库备份恢复

Task:
首先,为运行在https://127.0.0.1:2379上的现有 etcd 实例创建快照并将快照保存到 /srv/data/etcd-snapshot.db文件
为给定实例创建快照预计能在几秒钟内完成。 如果该操作似乎挂起,则命令可能有问题。用 CTRL + C 来取消操作,然后重试。
然后还原位于/var/lib/backup/etcd-snapshot-previous.db的现有先前快照。
提供了以下TLS证书和密钥,以通过etcdctl连接到服务器。
CA 证书: /opt/KUIN00601/ca.crt
客户端证书: /opt/KUIN00601/etcd-client.crt
客户端密钥: /opt/KUIN00601/etcd-client.key
考试环境:

# 确认一下ssh终端,是在[student@node-1] $ 下
# 备份:
# 如果不使用export ETCDCTL_API=3,而使用ETCDCTL_API=3,则下面每条etcdctl命令前都要加ETCDCTL_API=3。
# 如果执行时,提示permission denied,则是权限不够,命令最前面加sudo即可。
student@node-1:~$ export ETCDCTL_API=3
student@node-1:~$ sudo  ETCDCTL_API=3  etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key  snapshot save /srv/data/etcd-snapshot.db
# 还原:
student@node-1:~$ sudo export ETCDCTL_API=3
student@node-1:~$ sudo etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key   snapshot restore /var/lib/backup/etcd-snapshot-previous.db

模拟环境:


sudo ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /srv/data/etcd-snapshot.db
cd /srv/data/

sudo ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore  /var/lib/backup/etcd-snapshot-previous.db

5、网络策略

Task:
在现有的namespace my-app 中创建一个名为allow-port-from-namespace 的新Networkpolicy。
确保新的NetworkPolicy允许namespace echo 中的pods 连接到namespace my-app 中的Pods的9000端口。
进一步确保新的NetworkPolicy:
● 不允许对没有在监听端口9000的Pods的访问
● 不允许非来自namespace echo 中的Pods的访问
考试环境:

[student@node-1] $ kubectl config use-context hk8s
# 查看所有ns的标签label
# 如果访问者的namespace没有标签label,则需要手动打一个。考试的时候这个标签都是打好的
[student@node-1] $ kubectl get ns --show-labels
[student@node-1] $ kubectl label ns echo project=echo # 加入需要打标签就用这个命令
[student@node-1] $ vim networkpolicy.yaml # 编写yaml文件 内容如下
[student@node-1] $ kubectl apply -f networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: my-app
spec:
  podSelector:
    matchLabels: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: echo
    ports:
    - protocol: TCP
      port: 9000

模拟环境:

root@master:~#  vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: my-app
spec:
  podSelector:
    matchLabels: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: echo
    ports:
    - protocol: TCP
      port: 9000
root@master:~# kubectl apply -f networkpolicy.yaml
root@master:~# kubectl  get NetworkPolicy -n my-app 
NAME                        POD-SELECTOR   AGE
allow-port-from-namespace   <none>         30s

6、Service四层代理

Task:
重新配置一个已经存在的front-end的deployment,在名字为nginx的容器里面添加一个端口配置,名字为http,暴露端口号为80,然后创建一个service,名字为front-end-svc,暴露该deployment的http端口,并且service的类型为NodePort。
模拟环境:

[student@node-1] $kubectl config use-context k8s
[student@node-1] $kubectl get deploy front-end
[student@node-1] $kubectl edit deploy front-end 
# 参考官方文档,按照需要edit deployment,添加端口信息
# 找到name为nginx的容器,在后面添加如下信息

在这里插入图片描述

[student@node-1] $ kubectl expose deploy front-end --name=front-end-svc  --port=80 --target-port=http --type=NodePort
[student@node-1] $ kubectl describe svc front-end-svc # 验证

模拟环境:

root@master:~# kubectl  get deploy front-end
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
front-end   1/1     1            1           4m17s
root@master:~# kubectl  edit deploy front-end
root@master:~# kubectl expose deploy front-end --name=front-end-svc  --port=80 --target-port=http --type=NodePort
root@master:~#  kubectl describe svc front-end-svc # 验证

在这里插入图片描述

7、Ingress七层代理

Task:
如下创建一个新的nginx Ingress资源:
名称: pong
Namespace: ing-internal
使用服务端口 5678在路径 /hello 上公开服务 hello
可以使用以下命令检查服务 hello的可用性,该命令应返回 hello:
curl -kL <INTERNAL_IP>/hello
模拟环境没有创建service不用管,curl能够出来503就行 考试环境已经创建。

考试环境:

# 做题之前看清楚题目有没有叫切换集群
[student@node-1] $ vim ingressclass.yaml  #参考官网内容编写class类的yaml文件
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: nginx-example
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
  namespace: ing-internal # 添加名称空间
spec:
  controller: k8s.io/ingress-nginx
[student@node-1] $ vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678
# 验证
[student@node-1] $ kubectl  get ingress -n ing-internal
NAME   CLASS           HOSTS   ADDRESS          PORTS   AGE
pong   nginx-example   *       192.168.40.201   80      78s
[student@node-1] $ curl -kL 192.168.40.201/hello  

模拟环境:

[student@node-1] $ vim ingressclass.yaml  #参考官网内容编写class类的yaml文件
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: nginx-example
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
  namespace: ing-internal # 添加名称空间
spec:
  controller: k8s.io/ingress-nginx
[student@node-1] $ vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678
[root@master] # kubectl   apply -f ingressclass.yaml  
[root@master] # kubectl   apply -f ingress.yaml
[root@master] # kubectl  get ingress -n ing-internal
NAME   CLASS           HOSTS   ADDRESS          PORTS   AGE
pong   nginx-example   *       192.168.40.201   80      78s
[root@master] # curl -kL 192.168.40.201/hello  

8、Deployment管理pod的扩缩容

Task:
将loadbalancer的deployment管理的Pod的副本数扩容成6个
考试环境:

[student@node-1] $  kubectl config use-context k8s
[student@node-1] $  kubectl get deployment loadbalancer
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
loadbalancer   3/3     3            3           56s
[student@node-1] $  kubectl scale --replicas=6 deployment loadbalancer
[student@node-1] $  kubectl get deployment loadbalancer
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
loadbalancer   6/6     6            6           56s

模拟环境:

root@master:~# kubectl get deployment loadbalancer
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
loadbalancer   3/3     3            3           3m1s
root@master:~# kubectl  scale --replicas=6 deployment loadbalancer
root@master:~# kubectl get deployment loadbalancer
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
loadbalancer   6/6     6            6           3m39s

9、Pod指定节点调度

Task:
创建一个Pod,名字为nginx-kusc00401,镜像地址是nginx,调度到具有disk=spinning标签的节点上 。
考试环境:

[student@node-1] $ kubectl config use-context k8s 
[student@node-1] $ kubectl get nodes  --show-labels # 查看带有disk=spinning的节点
[student@node-1] $ vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
  labels: 
    role: nginx-kusc00401
spec: 
  nodeSelector: 
    disk: spinning
  containers: 
  - name: nginx
    image: nginx 
[student@node-1] $ kubectl apply -f  pod-ns.yaml
[student@node-1] $kubectl  describe pods nginx | grep Node # 验证
Node:             node/192.168.40.201
Node-Selectors:              disk=spinning

模拟环境:

[root@master] # kubectl get nodes  --show-labels | grep disk # 查看带有disk=spinning的节点
[root@master] # vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: docker.io/library/nginx:1.9.1 # 模拟环境用的是这个镜像,考试的时候用题目给的nginx
  nodeSelector:
    disk: spinning
root@master:~# kubectl apply -f pod-ns.yaml
root@master:~# kubectl  describe pods nginx | grep Node
Node:             node/192.168.40.201
Node-Selectors:              disk=spinning

10、检查Ready节点数量

Task:
检查集群中有多少节点为Ready状态(不包括被打上 Taint:NoSchedule 的节点),之后将数量写到/opt/KUSC00402/kusc00402.txt
考试环境:

[student@node-1] $  kubectl config use-context k8s
[student@node-1 ~]# kubectl get nodes |grep -w "Ready"
[student@node-1] $ kubectl get nodes |grep -w "Ready" |wc -l
# 得到的结果是2
[root@node-1 ~]# kubectl  describe nodes master node-1 | grep Taint |grep NoSchedule |wc -l
# 得到的结果是1 kubectl  describe nodes 后面跟的是节点的节点的名称,通过kubectl get nodes |grep -w "Ready"  得到的节点名称
# 上面两个结果相减2-1=1
[student@node-1] $ echo “1” >  /opt/KUSC00402/kusc00402.txt

模拟环境:
```

11、Pod封装多个容器

Task:
创建一个Pod,名字为kucc1,这个Pod包含4容器,为nginx、redis、memcached、consul
考试环境:

[student@node-1] $ kubectl config use-context k8s
[student@node-1] $ vim pod-kucc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kucc1
spec:
  containers:
  - name: nginx
    image: nginx
  - name: redis
    image: redis
  - name: memcached
    image: memcached
  - name: consul
    image: consul
[student@node-1] $ kubectl apply -f pod-kucc.yaml
[student@node-1] $ kubectl get pods 

模拟环境:

root@master:~# vim pod-kucc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kucc1
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent #模拟环境加上这参数的意思是用本地的镜像,考试的时候不用加
  - name: redis
    image: redis
    imagePullPolicy: IfNotPresent #模拟环境加上这参数的意思是用本地的镜像,考试的时候不用加
  - name: memcached
    image: memcached
    imagePullPolicy: IfNotPresent #模拟环境加上这参数的意思是用本地的镜像,考试的时候不用加
  - name: consul
    image: consul
    imagePullPolicy: IfNotPresent #模拟环境加上这参数的意思是用本地的镜像,考试的时候不用加
root@master:~# kubectl apply -f pod-kucc.yaml
root@master:~# kubectl get pods 

12、PV

task:
创建一个pv,名字为app-config,大小为2Gi,访问权限为ReadWriteMany。Volume的类型为hostPath,路径为/srv/app-config

考试环境:

[student@node-1] $ kubectl config use-context hk8s
[student@node-1] $ vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"
[student@node-1] $ kubecl apply -f pv.yaml
[student@node-1] $ kubectl  get pv

模拟环境:

root@master:~# vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: app-config
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"
root@master:~# kubecl apply -f pv.yaml
root@master:~# kubectl  get pv

13、PVC

Task:
创建一个名字为pv-volume的pvc,指定storageClass为csi-hostpath-sc,大小为10Mi
然后创建一个Pod,名字为web-server,镜像为nginx,并且挂载该PVC至/usr/share/nginx/html,挂载的权限为ReadWriteOnce。之后通过kubectl edit或者kubectl path将pvc改成70Mi,并且记录修改记录。
考试环境:

[student@node-1] $ kubectl config use-context ok8s
[student@node-1] $ vim pvc.yaml
[student@node-1] $ vim pvc-pod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  storageClassName: csi-hostpath-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: pv-volume
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: pv-volume
[student@node-1] $kubectl apply -f pvc.yaml
[student@node-1] $kubectl apply -f pvc-pod.yaml
[student@node-1] $kubectl  edit pvc pv-volume --record

模拟环境:

root@master:~# vim pvc.yaml
root@master:~# vim pvc-pod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  storageClassName: csi-hostpath-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: pv-volume
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: IfNotPresent # 镜像拉取策略
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: pv-volume
root@master:~# kubectl apply -f pvc.yaml
root@master:~# kubectl apply -f pvc-pod.yaml
root@master:~# kubectl get pvc 
root@master:~# kubectl  edit pvc pv-volume --record

14、查看Pod日志

考试环境:

[student@node-1] $ kubectl config use-context k8s
[student@node-1] $ kubectl logs foobar | grep unable-to-access-website > /opt/KUTR00101/foobar

模拟环境:

root@master:~# kubectl logs foobar | grep unable-to-access-website > /opt/KUTR00101/foobar

15、sidecar代理

Context:
将一个现有的 Pod 集成到 Kubernetes 的内置日志记录体系结构中(例如 kubectl logs)。
添加 streaming sidecar 容器是实现此要求的一种好方法。
Task:
使用busybox Image来将名为sidecar的sidecar容器添加到现有的Pod legacy-app上,新的sidecar容器必须运行以下命令:
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
使用volume挂载/var/log/目录,确保sidecar能访问/var/log/legacy-app.log文件

[student@node-1] $ kubectl config use-context k8s
# 首先将legacy-app的Pod的yaml导出,大致如下:
[student@node-1] $ kubectl get po legacy-app -oyaml > c-sidecar.yaml
# 再此yaml中添加sidecar和volume
[student@node-1] $ vim c-sidecar.yaml
# 标注出来的地方认真检查,需要执行的是什么命令,log日志的位置,卷是否正常挂载

在这里插入图片描述

# 做完上面的步骤后保存退出
[student@node-1] $ kubectl delete -f c-sidecar.yaml  
[student@node-1] $ kubectl delete -f c-sidecar.yaml  --grace-period=0 --force --wait=false # 如果删除比较慢 可以加参数强制删除  一般来说需要加上
[student@node-1] $ kubectl apply -f c-sidecar.yaml
[student@node-1] $ kubectl  logs legacy-app -c sidecar  # 能看到内容而不是报错,考试的时候不一定是下面的内容
Mon Jun 17 11:54:34 UTC 2024 INFO 0
Mon Jun 17 11:54:35 UTC 2024 INFO 1
Mon Jun 17 11:54:36 UTC 2024 INFO 2
Mon Jun 17 11:54:37 UTC 2024 INFO 3
Mon Jun 17 11:54:38 UTC 2024 INFO 4
Mon Jun 17 11:54:39 UTC 2024 INFO 5
Mon Jun 17 11:54:40 UTC 2024 INFO 6
Mon Jun 17 11:54:41 UTC 2024 INFO 7
Mon Jun 17 11:54:42 UTC 2024 INFO 8
Mon Jun 17 11:54:43 UTC 2024 INFO 9
Mon Jun 17 11:54:44 UTC 2024 INFO 10

模拟环境:

root@master:~# kubectl  get pods  | grep legacy-app
legacy-app                             2/2     Running   0              5m43s
root@master:~# kubectl get po legacy-app -oyaml > c-sidecar.yaml
root@master:~# vim c-sidecar.yaml
# 标注出来的地方认真检查,需要执行的是什么命令,log日志的位置,卷是否正常挂载

在这里插入图片描述

root@master:~# $ kubectl delete -f c-sidecar.yaml  --grace-period=0 --force --wait=false # 强制删除
root@master:~# $ kubectl apply -f c-sidecar.yaml 
root@master:~# kubectl logs  legacy-app -c sidecar

在这里插入图片描述

16、查看Pod CPU

Task:
找出标签是name=cpu-user的Pod,并过滤出使用CPU最高的Pod,然后把它的名字写在已经存在的/opt/KUTR00401/KUTR00401.txt文件里(注意他没有说指定namespace。所以需要使用-A指定所以namespace)
考试环境:

[student@node-1] $ kubectl config use-context k8s
[student@node-1] $ kubectl top pod -l name=cpu-loader --sort-by=cpu -A
# 将cpu占用最多的pod的name写入/opt/KUTR00401/KUTR00401.txt文件
[student@node-1] $ echo "查出来的Pod Name" > /opt/KUTR00401/KUTR00401.txt

模拟环境:

root@master:~# kubectl  top pods -l name=cpu-loader --sort-by=cpu -A
NAMESPACE     NAME                                   CPU(cores)   MEMORY(bytes)
kube-public   cpu-loader-pod                         2m           13Mi
default       nginx-cpu-loader-dep-7c97958cb-gr2ch   0m           4Mi
default       nginx-cpu-loader-dep-7c97958cb-kvw4f   0m           4Mi
default       nginx-cpu-loader-dep-7c97958cb-zfv66   0m           3Mi
root@master:~# echo "cpu-loader-pod" > /opt/KUTR00401/KUTR00401.txt
root@master:~# cat  /opt/KUTR00401/KUTR00401.txt
cpu-loader-pod

17、集群故障排查-kubelet故障

Task:
一个名为wk8s-node-0的节点状态为NotReady,让其恢复至正常状态,并确认所有的更改开机自动完成。
可以使用以下命令,通过ssh连接到wk8s-node-0节点:
ssh wk8s-node-0
可以使用以下命令,在该节点上获取更高权限:
sudo -i

[student@node-1] $ kubectl config use-context  wk8s
[student@node-1] $ ssh wk8s-node-0 
[student@wk8s-node-0] $ sudo -i 
[root@wk8s-node-0] # systemctl status kubelet 
[root@wk8s-node-0] # systemctl enable kubelet 
[root@wk8s-node-0] # systemctl restart kubelet 
[root@wk8s-node-0] # exit
[student@wk8s-node-0] $ exit 
[student@node-1] $ # 退回到stuentd@node-1 不要多退出会退出考试环境
root@master:~# systemctl status kubelet  # 模拟环境Kubelet不是活跃的
root@master:~# systemctl enable kubelet 
root@master:~# systemctl restart kubelet  
  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值