在这里插入图片描述

  • 停止etcd并删除文件内容【启动脚本中的–data-dir 路径】

然后就开始在文本中准备恢复代码并执行

[root@vms20 ~]# systemctl stop etcd

[root@vms20 ~]# rm -rf /var/lib/etcd

[root@vms20 ~]# vi c.txt

[root@vms20 ~]# cat c.txt

etcdctl snapshot restore /srv/data/etcd-snapshot-previous.db --cacert=/opt/KUIN00601/ca.crt --cert= /opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key --data-dir=“/var/lib/etcd” --name=“default” --initial-cluster=“default=http://localhost:2380”

/srv/data/etcd-snapshot-previous.db -恢复地址

–data-dir=“/var/lib/etcd” -恢复路径【启动脚本中有】

–name=“default” - 名称【启动脚本中有】

initial-cluster=“default=http://localhost:2380” - 恢复名字的路径,如果localhost报错了换成127.0.0.1 ,etcdctl member list 后面跟3个证书 可以查看2380端口地址的

[root@vms20 ~]#

[root@vms20 ~]# etcdctl snapshot restore /srv/data/etcd-snapshot-previous.db --cacert=/opt/KUIN00601/ca.crt --cert= /opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key --data-dir=“/var/lib/etcd” --name=“default” --initial-cluster=“default=http://localhost:2380”

[root@vms20 ~]#

  • 修改文件所属组和启动etcd

[root@vms20 ~]# chown -R etcd.etcd /var/lib/etcd

[root@vms20 ~]# systemctl start etcd

5.7% k8s√

========================================================================

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

Task

创建一个名为allow-port-from-namespace 的新NetworkPolicy,以允许现有namespace my-app

中的Pods 连接到同一namespace 中其他pods 的端口9200。

确保新的NetworkPolicy:

 不允许对没有在监听端口9200 的pods 访问

 不允许不来自namespace my-app 的pods 的访问

记住:做这一题的时候,务必要判断出来到底是进的规则,还是出的规则

官网文档复制yaml内容并进入k8s集群粘贴到文本中


  • 在官网文档搜索networkpolicy,进去以后找到networkpolicy资源并复制下面所有代码

在这里插入图片描述

在这里插入图片描述

  • 进入集群后,进入任意名称的yaml文件并粘贴上面复制的代码

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

yaml代码修改并生成pod【ingress规则】


  • 根据题目需求可以得知这是ingress【进】的规则,并且在同一ns中,并且没有需要指定标签,所以标签和egress相关的内容都可以删掉

然后修改题目中的名称和ns名称,最终得到了下面的yaml文件,然后apply生成,如果报错没有ns,那么创建即可

[student@vms20 ~]$ cat 5.yaml

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: allow-port-from-namespace

namespace: my-app

spec:

podSelector:

matchLabels:

policyTypes:

  • Ingress

ingress:

  • from:

  • podSelector:

matchLabels:

ports:

  • protocol: TCP

port: 9200

[student@vms20 ~]$ kubectl apply -f 5.yaml

Error from server (NotFound): error when creating “5.yaml”: namespaces “my-app” not found

[student@vms20 ~]$ kubectl create ns my-app

namespace/my-app created

[student@vms20 ~]$ kubectl apply -f 5.yaml

networkpolicy.networking.k8s.io/allow-port-from-namespace created

[student@vms20 ~]$

考试更新题目【egress规则】


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

  • Task

  • 在internal 命名空间创建一个名为allow-port-from-namespace 的确保新的NetworkPolicy 允

许namespace internal 中的Pods 来连接到namespace big-corp 中的端口9200。

  • 确保新的NetworkPolicy:

  • 不允许对没有在监听端口9200 的pods 访问

  • 不允许不来自namespace internal 的pods 的访问

  • 答案

这里要用Egress,而不是Ingress,要从internal连接到big-corp的ns,应该能很明显看出来是出的吧!

  • 文件获取呢,和上面一样到官方复制,我这不累赘,然后因为这个是要多另一个ns空间的,所以需要加上namespaceSelector:并指定标签【这个在Ingress中有,复制到Egress中即可】

  • 然后因为要指定标签,所以我们需要先查看到big-corp的标签【如果没这个ns,就创建】

  • 全部流程如下

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get ns --show-labels | grep big-corp

[student@vms20 ~]$ kubectl create ns big-corp

namespace/big-corp created

[student@vms20 ~]$ kubectl get ns --show-labels | grep big-corp

big-corp Active 2s kubernetes.io/metadata.name=big-corp

[student@vms20 ~]$

#最终配置文件如下,名称做修改,ns修改

#注意复制的标签= 要改为: ,并在后面加一个空格

[student@vms20 ~]$ #vi 5-2.yaml

[student@vms20 ~]$ cat 5-2.yaml

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: allow-port-from-namespace

namespace: internal

spec:

podSelector:

matchLabels:

policyTypes:

  • Egress

egress:

  • to:

  • namespaceSelector:

matchLabels:

kubernetes.io/metadata.name: big-corp

ports:

  • protocol: TCP

port: 9200

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 5-2.yaml

Error from server (NotFound): error when creating “5-2.yaml”: namespaces “internal” not found

[student@vms20 ~]$ kubectl create ns internal

namespace/internal created

[student@vms20 ~]$ kubectl apply -f 5-2.yaml

networkpolicy.networking.k8s.io/allow-port-from-namespace created

[student@vms20 ~]$

6.7% k8s√

========================================================================

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

Task

请重新配置现有的部署front-end 以及添加名为http 的端口规范来公开现有容器nginx 的端

口80/tcp。

创建一个名为front-end-svc 的新服务,以公开容器端口http。

配置此服务,以通过在排定的节点上的NodePort 来公开各个pods。

  • 编辑我们可以用edit来编辑哦

  • 因为上面说了名为http的端口规范,所以增加一个名为http的port,然后指定80端口和tcp类型即可

  • 80端口的containerport记不住可以官网搜索deployment,进入配置文件查看

  • tcp类型的portocol记不住可以官网搜索networkpolicy【上面第五题】,进入配置文件查看

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

cpupod 3/3 3 3 28d

front-end 1/1 1 1 28d

webserver 1/1 1 1 28d

[student@vms20 ~]$ kubectl edit deployments front-end

找到nginx镜像部分,大概在42行左右

增加下面43-46行内容保存退出即可

41 name: nginx

42 resources: {}

43 ports:

44 - name: http

45 containerPort: 80

46 protocol: TCP

47 terminationMessagePath: /dev/termination-log

#保存退出

:wq

“/tmp/kubectl-edit-943303888.yaml” 72L, 2433C written

deployment.apps/front-end edited

[student@vms20 ~]$

  • 创建一个服务公开80端口,实际上就是创建一个svc

[student@vms20 ~]$ kubectl expose --name=front-end-svc deployment front-end --port=80 --type=NodePort

service/front-end-svc exposed

[student@vms20 ~]$

–name=front-end-svc -svc名称【题目有说】

deployment front-end --port=80 --deploy类型 deploy的pod名称 这个pod的端口

–type=NodePort -类型【题目有说】

7.7% k8s√

========================================================================

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

Task

如下创建一个新的nginx ingress 资源:

名称:pong

namespace: ing-internal

使用服务端口5678 在路径/hello 上公开服务hello

可以使用一下命令检查服务hello 的可用性,该命令返回hello:

curl -kL < INTERNAL_IP>/hello/

官网文档复制yaml内容并进入k8s集群


  • 因为题目让创建ingress资源,所以,直接官网搜索 ingress即可,进去以后找到ingress资源的yaml文件内容并复制代码

在这里插入图片描述

在这里插入图片描述

  • 进入k8s集群并vi任意yaml文件粘贴代码

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

编辑yaml文件并生成pod并测试


  • 需要在name下面增加一行namespace,指定名称和ns后,修改下面的path和path下面name和port即可

最后生成

[student@vms20 ~]$ vi 7.yaml

[student@vms20 ~]$ cat 7.yaml

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: pong

namespace: ing-internal

annotations:

nginx.ingress.kubernetes.io/rewrite-target: /

kubernetes.io/ingress.class: “nginx”

spec:

rules:

  • http:

paths:

  • path: /hello

pathType: Prefix

backend:

service:

name: hello

port:

number: 5678

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 7.yaml

ingress.networking.k8s.io/pong created

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get ingress -n ing-internal

NAME CLASS HOSTS ADDRESS PORTS AGE

pong * 80 24s

  • 测试

测试前需要查看ingress的ip,用下面方法,等待一会后ADDRESS 下面会出现一个ip

然后:curl -kL < INTERNAL_IP>/hello/即可看到内容了,然后本题就完了

[student@vms20 ~]$ kubectl get ingress -n ing-internal

NAME CLASS HOSTS ADDRESS PORTS AGE

pong * 192.168.26.23 80 66s

[student@vms20 ~]$ curl -KL 192.168.26.23/hello/

hello

[student@vms20 ~]$

8.4% k8s√

========================================================================

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

Task

将deployment 从webserver 扩展至6pods

  • 修改命令kubectl scale deployment webserver --replicas=6

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

cpupod 3/3 3 3 28d

front-end 1/1 1 1 28d

webserver 1/1 1 1 28d

[student@vms20 ~]$ kubectl scale deployment webserver --replicas=6

deployment.apps/webserver scaled

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

cpupod 3/3 3 3 28d

front-end 1/1 1 1 28d

webserver 1/6 6 1 28d

[student@vms20 ~]$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

cpupod 3/3 3 3 28d

front-end 1/1 1 1 28d

webserver 3/6 6 3 28d

[student@vms20 ~]$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

cpupod 3/3 3 3 28d

front-end 1/1 1 1 28d

webserver 6/6 6 6 28d

[student@vms20 ~]$

9.4% k8s√

========================================================================

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

Task

按如下要求调度一个pod:

 名称:nginx-kusc00401

 image: nginx

 Node selector: disk=ssd

  • 用命令生成吧

kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 9.yaml

生成以后呢在编辑配置文件,在spec下面增加一行指定标签即可,然后创建pod,该题就结束了

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 9.yaml

[student@vms20 ~]$ vi 9.yaml

[student@vms20 ~]$ cat 9.yaml

apiVersion: v1

kind: Pod

metadata:

creationTimestamp: null

labels:

run: nginx-kusc00401

name: nginx-kusc00401

spec:

nodeSelector:

disk: ssd

containers:

  • image: nginx

name: nginx-kusc00401

resources: {}

dnsPolicy: ClusterFirst

restartPolicy: Always

status: {}

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 9.yaml

pod/nginx-kusc00401 created

[student@vms20 ~]$ kubectl get pods | grep kusc004

nginx-kusc00401 1/1 Running 0 5s

[student@vms20 ~]$

  • 测试环境加上imagePullPolicy: IfNotPresent否则下载镜像太慢了

10.4% k8s√

=========================================================================

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

Task

检查有多少个worker nodes 已准备就绪(不包括被打上Taint: NoSchedule 的节点),并将数

量写入/opt/KUSC00402/kusc00402.txt

  • 这个题呢,实际上就是查看node状态,为Ready且没有NoSchedule污点的即可

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get nodes

NAME STATUS ROLES AGE VERSION

vms21.rhce.cc Ready control-plane,master 29d v1.22.2

vms22.rhce.cc Ready 29d v1.22.2

vms23.rhce.cc Ready 29d v1.22.2

[student@vms20 ~]$

#其实上面命令已经可以看出来了,下面这个只是验证下而已

[student@vms20 ~]$ kubectl describe node vms21.rhce.cc | grep Taint

Taints: node-role.kubernetes.io/master:NoSchedule

[student@vms20 ~]$ kubectl describe node vms22.rhce.cc | grep Taint

Taints:

[student@vms20 ~]$ kubectl describe node vms23.rhce.cc | grep Taint

Taints:

[student@vms20 ~]$

直接将数量写入题目中的路径即可

[student@vms20 ~]$ echo 2 > /opt/KUSC00402/kusc00402.txt

-bash: /opt/KUSC00402/kusc00402.txt: 权限不够

[student@vms20 ~]$

  • 提示权限不够,处理方法如下

进入root使用:chmod -R o+w file给权限

[student@vms20 ~]$ sudo -i

[root@vms20 ~]# chmod -R o+w /opt/KUSC00402/

[root@vms20 ~]# exit

登出

[student@vms20 ~]$ echo 2 > /opt/KUSC00402/kusc00402.txt

[student@vms20 ~]$

[student@vms20 ~]$ cat /opt/KUSC00402/kusc00402.txt

2

[student@vms20 ~]$

11.4% k8s√

=========================================================================

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

Task

创建一个名字为kucc4 的pod,在pod 里面分别为以下每个images 单独运行一个app container

(可能会有1-4 个images):

nginx+redis+memcached+consul

  • 我们进入k8s集群后可以先生成一个yaml文件

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl run kucc4 --image=nginx --dry-run=client -o yaml > 11.yaml

[student@vms20 ~]$ cat 11.yaml

apiVersion: v1

kind: Pod

metadata:

creationTimestamp: null

labels:

run: kucc4

name: kucc4

spec:

containers:

  • image: nginx

name: kucc4

resources: {}

dnsPolicy: ClusterFirst

restartPolicy: Always

status: {}

[student@vms20 ~]$

  • 然后编辑这个yaml文件,增加镜像内容即可【题目就几个就增加即可】image-resources为一组

因为镜像名称没有指定,所以我们可以自定义名称,最终得到下面这个yaml文件

[student@vms20 ~]$ cat 11.yaml

apiVersion: v1

kind: Pod

metadata:

creationTimestamp: null

labels:

run: kucc4

name: kucc4

spec:

containers:

  • image: nginx

name: c1

resources: {}

  • image: redis

name: c2

resources: {}

  • image: memcached

name: c3

resources: {}

  • image: consul

name: c4

resources: {}

dnsPolicy: ClusterFirst

restartPolicy: Always

status: {}

[student@vms20 ~]$

  • 然后生成,全部为run即正常,此题结束

[student@vms20 ~]$ kubectl apply -f 11.yaml

pod/kucc4 created

[student@vms20 ~]$ kubectl get pods | grep kucc4

kucc4 4/4 Running 0 10s

[student@vms20 ~]$

  • 测试环境需要加上:imagePullPolicy: IfNotPresent

★12.4% hk8s k8s√

===============================================================================

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

Task

创建名为app-data 的persistent volume,容量为1Gi,访问模式为ReadWriteMany。volume

类型为hostPath,位于/srv/app-data

官网文档复制yaml内容并进入k8s集群


  • 官网搜索persist,下拉,找到持久卷并复制代码

在这里插入图片描述

在这里插入图片描述

  • 进入k8s集群并vi任意yaml文件粘贴代码

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ vi 12.yaml

[student@vms20 ~]$ cat 12.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv0003

spec:

capacity:

storage: 5Gi

volumeMode: Filesystem

accessModes:

  • ReadWriteOnce

persistentVolumeReclaimPolicy: Recycle

storageClassName: slow

mountOptions:

  • hard

  • nfsvers=4.1

nfs:

path: /tmp

server: 172.17.0.2

[student@vms20 ~]$

编辑yaml文件并生成


  • 根据题目需求,得到如下yaml文件

1、修改name

2、修改storage

3、修改accessmodes选项

4、修改nfs类型为hostpath并指定路径

5、删除多余项内容

[student@vms20 ~]$ cat 12.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: app-data

spec:

capacity:

storage: 1Gi

volumeMode: Filesystem

accessModes:

  • ReadWriteMany

persistentVolumeReclaimPolicy: Recycle

hostPath:

path: /srv/app-data

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 12.yaml

persistentvolume/app-data created

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

app-data 1Gi RWX Recycle Available 16s

[student@vms20 ~]$

★13.7% ok8s k8s√

===============================================================================

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

Task

创建一个新的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,并

记录此次更改。

官网文档复制yaml内容并进入k8s集群


  • 官网搜索persist【和12题在一个页面】,下拉,找到persisten…并复制代码

在这里插入图片描述

在这里插入图片描述

  • 进入k8s集群并vi任意yaml文件粘贴代码

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ vi 13.yaml

[student@vms20 ~]$ cat 13.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: myclaim

spec:

accessModes:

  • ReadWriteOnce

volumeMode: Filesystem

resources:

requests:

storage: 8Gi

storageClassName: slow

selector:

matchLabels:

release: “stable”

matchExpressions:

  • {key: environment, operator: In, values: [dev]}

[student@vms20 ~]$

编辑yaml文件并生成


  • 根据题目需求,得到如下yaml文件

  • 1、修改name

  • 2、修改accessmodes【下面创建pod有说指定为readwriteonce

  • 3、修改大小

  • 4、指定classname

  • 5、下面用不到的删掉

[student@vms20 ~]$ vi 13.yaml

[student@vms20 ~]$ cat 13.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvvolume

spec:

accessModes:

  • ReadWriteOnce

volumeMode: Filesystem

resources:

requests:

storage: 10Mi

storageClassName: csi-hostpath-sc

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 13.yaml

persistentvolumeclaim/pvvolume created

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

pvvolume Bound pvc-c3ca5b13-206e-43cc-8982-983f4cc8fbe7 10Mi RWO csi-hostpath-sc 111s

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

app-data 1Gi RWX Recycle Available 8m25s

pvc-c3ca5b13-206e-43cc-8982-983f4cc8fbe7 10Mi RWO Delete Bound default/pvvolume csi-hostpath-sc 5s

[student@vms20 ~]$

创建pod并查看


  • 上面进入的官网文档界面继续往下拉,然后复制使用申领作为卷的yaml内容

在这里插入图片描述

  • vi任意yaml文件并编辑,最终得到如下yaml文件

这个比较直观,不需要删代码,只需要修改几个值就行

  • 1、3个name改为web-server

  • 2、修改mountpath

  • 3、修改cliamname为上面创建的PersistentVolumeClaim名称

[student@vms20 ~]$ cat 13-2.yaml

apiVersion: v1

kind: Pod

metadata:

name: web-server

spec:

containers:

  • name: myfrontend

image: nginx

volumeMounts:

  • mountPath: “/usr/share/nginx/html”

name: web-server

volumes:

  • name: web-server

persistentVolumeClaim:

claimName: pvvolume

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 13-2.yaml

pod/web-server created

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get pods | grep web-server

web-server 1/1 Running 0 71s

[student@vms20 ~]$

  • 测试环境需要加上:imagePullPolicy: IfNotPresent

edit修改卷大小


  • 题目说并记录此次更改,n阿么最后必须加上--record

里面后面有2处10Mi的需要改为70Mi,然后保存退出即可

[student@vms20 ~]$ kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

pvvolume Bound pvc-c3ca5b13-206e-43cc-8982-983f4cc8fbe7 10Mi RWO csi-hostpath-sc 34m

[student@vms20 ~]$ kubectl edit pvc pvvolume --record

[student@vms20 ~]$ kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

pvvolume Bound pvc-c3ca5b13-206e-43cc-8982-983f4cc8fbe7 70Mi RWO csi-hostpath-sc 37m

14.5% k8s √

==========================================================================

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

Task

监控pod foo 的日志并:

 提取与错误unable-to-access-website 相对应的日志行

 将这些日志行写入到/opt/KUTR00101/foo

  • 这个简单,直接 >到这个目录即可

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[root@vms20 ~]# kubectl logs foo | grep unable-to-access-website > /opt/KUTR00101/foo

[root@vms20 ~]#

[student@vms20 ~]$ cat /opt/KUTR00101/foo

unable-to-access-website

unable-to-access-website

unable-to-access-website

unable-to-access-website

unable-to-access-website

[student@vms20 ~]$

  • 如果提示权限不够,处理方法如下

进入root使用:chmod -R o+w file给权限

15.7% k8s

========================================================================

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

Context

在不更改其现有容器的情况下,需要将一个现有的pod 集成到kubernetes 的内置日志记录

体系结构中(例如kubectl logs)。添加streamimg sidecar 容器是实现此要求的一种好方法。

Task

将一个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 来

访问该文件。

yaml文件准备


pod是不能在线修改的,因为题目说不能更改容器内容,所以我们可以把这个pod信息导出为yaml文件【最好导出2份,一个备份】,然后删除该pod,后面编辑该yaml文件重新生成即可

[student@vms20 ~]$ kubectl get pods legacy-app -o yaml > 15.yaml

[student@vms20 ~]$ kubectl get pods legacy-app -o yaml > 15.yaml.bak

[student@vms20 ~]$

[student@vms20 ~]$ kubectl delete pod legacy-app

pod “legacy-app” deleted

[student@vms20 ~]$

定义volumes和新增pod


  • vi编辑上面导出的配置文件

找到volumes处,增加题目需求:

  • 使用名为logs 的volume mount 来让文件/var/log/legacy-app.log 可用于sidecar 容器。

可以官网搜索sidecar里面有定义volume mount的方法,其中name就是名称。

在这里插入图片描述

  • 将一个busybox sidecar 容器添加到现有的pod legacy-app。新的sidecar 容器必须运行一下命

令:

/bin/sh -c tail -n+1 -f /var/log/legacy-app.log

  • 一共新增了下面3处内容【注意看注释说的新增行号】

先定义一个log卷

增加了,52和53行内容

51 volumes:

52 - name: logs #题目要求的名字

53 emptyDir: {} #定义一个默认类型【题目没指定】

54 - name: kube-api-access-l8xjt

55 projected:

挂载到/var/log/ 【这是路径】

新增了28,29行内容

27 volumeMounts:

28 - name: logs

29 mountPath: /var/log/

30 - mountPath: /var/run/secrets/kubernetes.io/serviceaccount

根据题目需求增加pod信息

#新增了33-38行内容,- name必须和 - env对齐

32 readOnly: true

33 - name : busybox #题目没有指定,所以自定体名称

34 image: busybox

35 command: [“sh”,“-c”,“tail -n+1 -f /var/log/legacy-app.log”] #让执行的语句

36 volumeMounts: #挂载卷

37 - name: logs

38 mountPath: /var/log/

39 dnsPolicy: ClusterFirst

创建pod并查看


  • 正常情况呢legacy-app会有2个数量的pod状态为running

[student@vms20 ~]$ kubectl get pods | grep app

[student@vms20 ~]$

[student@vms20 ~]$ kubectl apply -f 15.yaml

pod/legacy-app created

[student@vms20 ~]$

[student@vms20 ~]$ kubectl get pods | grep app

legacy-app 0/2 ContainerCreating 0 3s

[student@vms20 ~]$ kubectl get pods | grep app

legacy-app 2/2 Running 0 7s

[student@vms20 ~]$

16.5% k8s√

=========================================================================

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

Task

通过pod label name=cpu-user,找到运行时占用大量CPU 的pod,并将占用CPU 最高的pod

名称写入到文件/opt/KUTR000401/KUTR00401.txt(已存在)

  • 这个比较简单,top语句加上-l参数,后面跟上label信息就可以了

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl top pods -l name=cpu-user

NAME CPU(cores) MEMORY(bytes)

cpupod-85cbdc7c87-bp5c7 9m 8Mi

cpupod-85cbdc7c87-gvl6l 4m 3Mi

cpupod-85cbdc7c87-l8w4s 1m 3Mi

[student@vms20 ~]$

[student@vms20 ~]$ echo cpupod-85cbdc7c87-bp5c7 > /opt/KUTR000401/KUTR00401.txt

[student@vms20 ~]$

[student@vms20 ~]$ cat /opt/KUTR000401/KUTR00401.txt

cpupod-85cbdc7c87-bp5c7
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ser,找到运行时占用大量CPU 的pod,并将占用CPU 最高的pod

名称写入到文件/opt/KUTR000401/KUTR00401.txt(已存在)

  • 这个比较简单,top语句加上-l参数,后面跟上label信息就可以了

[student@vms20 ~]$ kubectl config use-context k8s

Switched to context “k8s”.

[student@vms20 ~]$

[student@vms20 ~]$ kubectl top pods -l name=cpu-user

NAME CPU(cores) MEMORY(bytes)

cpupod-85cbdc7c87-bp5c7 9m 8Mi

cpupod-85cbdc7c87-gvl6l 4m 3Mi

cpupod-85cbdc7c87-l8w4s 1m 3Mi

[student@vms20 ~]$

[student@vms20 ~]$ echo cpupod-85cbdc7c87-bp5c7 > /opt/KUTR000401/KUTR00401.txt

[student@vms20 ~]$

[student@vms20 ~]$ cat /opt/KUTR000401/KUTR00401.txt

cpupod-85cbdc7c87-bp5c7
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-B31cBfjX-1713530120495)]

[外链图片转存中…(img-HEYWYT1g-1713530120498)]

[外链图片转存中…(img-CSb43HDj-1713530120499)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

[外链图片转存中…(img-GrBgpPQD-1713530120500)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐