当前位置:   article > 正文

云原生|kubernetes|CKA真题解析-------(6-10题)_front-end 的 deployment

front-end 的 deployment

第六题:

service配置

 解析:

考察两个知识点:

deployment控制器内的port命名

暴露一个pod内的端口到新建的服务内的

这里有一个需要注意的地方,没有告诉你deployment控制器在哪个namespace。假设这个front-end这个pod是在A这个namespace内,那么,service创建的时候也必须是在A这个namespace里,否则,service无法正常工作。

这也算是这道题目的一个小陷阱。

解题:

1,查询deployment

  1. root@k8s-master:~# kubectl get deployments.apps -A
  2. NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
  3. default front-end 1/1 1 1 359d
  4. default guestbook 6/6 6 6 359d
  5. default nfs-client-provisioner 1/1 1 1 359d

2,编辑front-end,给端口命名为http,修改的内容是这些,修改完毕后保存退出:

  1. ports:
  2. - containerPort: 80
  3. name: http
  4. protocol: TCP

3,新增type为NodePort的service:

这里的target-port要引用上面创建的端口,名称为http

  1. root@k8s-master:~# kubectl expose deployment front-end --type=NodePort --target-port=http --port=80 --dry-run=client -oyaml >6.yaml

 修改6.yaml文件,将service名字修改成符合题目要求的名字

4,测试

查看新建的service

  1. root@k8s-master:~# kubectl get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. front-end-svc NodePort 10.97.221.101 <none> 80:32678/TCP 5s
  4. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 375d

curl 这个service 节点IP+332678,如果出现200,表示service正常:

  1. root@k8s-master:~# curl -i 192.168.123.150:32678
  2. HTTP/1.1 200 OK
  3. Server: nginx/1.21.5
  4. Date: Sun, 18 Dec 2022 09:33:59 GMT
  5. Content-Type: text/html
  6. Content-Length: 615
  7. Last-Modified: Tue, 28 Dec 2021 15:28:38 GMT
  8. Connection: keep-alive
  9. ETag: "61cb2d26-267"
  10. Accept-Ranges: bytes

第七题:

解析:

这道题有两种解法,第一种是在官网找示例修改,第二种是命令行方式直接创建ingress,只是需要注意最后要测试创建的ingress是否正确。

第一种方式:

在官网找ingress的示例,官网地址如下:

Ingress | Kubernetes

第一个示例就可以符合题意:

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: minimal-ingress
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: /
  7. spec:
  8. ingressClassName: nginx-example
  9. rules:
  10. - http:
  11. paths:
  12. - path: /testpath
  13. pathType: Prefix
  14. backend:
  15. service:
  16. name: test
  17. port:
  18. number: 80

修改成如下:

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: ping
  5. namespace: ing-internal
  6. annotations:
  7. nginx.ingress.kubernetes.io/rewrite-target: /
  8. spec:
  9. rules:
  10. - http:
  11. paths:
  12. - pathType: Prefix
  13. path: /hello
  14. backend:
  15. service:
  16. name: hello
  17. port:
  18. number: 5678

测试:

查看ingress代理的service结果是什么:

  1. root@k8s-master:~# kubectl get svc -A
  2. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. default front-end-svc NodePort 10.97.221.101 <none> 80:32678/TCP 92m
  4. default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 375d
  5. ing-internal hello ClusterIP 10.106.182.229 <none> 5678/TCP 360d
  6. root@k8s-master:~# curl 10.106.182.229:5678
  7. hello

查看ingress代理的结果,如果输出都一样,表明ingress是正确的:

  1. root@k8s-master:~# kubectl get ing -A
  2. NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
  3. ing-internal ping nginx * 192.168.123.150,192.168.123.151,192.168.123.152 80 3d20h
  4. root@k8s-master:~# curl 192.168.123.150/hello
  5. hello

第二种方式----命令行直接生成:

生成模板文件

ping是ingress的名字,hello:5678 是service的名称和端口

kubectl create ingress -n ing-internal ping --rule=/hello=hello:5678 --annotation=nginx.ingress.kubernetes.io/rewrite-target=/ --dry-run=client -oyaml >7.yaml

查看模板文件:

  1. root@k8s-master:~# cat 7.yaml
  2. apiVersion: networking.k8s.io/v1
  3. kind: Ingress
  4. metadata:
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: /
  7. creationTimestamp: null
  8. name: ping
  9. namespace: ing-internal
  10. spec:
  11. rules:
  12. - http:
  13. paths:
  14. - backend:
  15. service:
  16. name: hello
  17. port:
  18. number: 5678
  19. path: /hello
  20. pathType: Exact
  21. status:
  22. loadBalancer: {}

应用模板文件并进行测试:

kubectl apply -f 7.yaml

需要等待一段时间,直到查询出的ingress绑定有节点的IP后:

  1. root@k8s-master:~# kubectl get ing -A
  2. NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
  3. ing-internal ping <none> * 192.168.123.150,192.168.123.151,192.168.123.152 80 104s

最终测试:

  1. root@k8s-master:~# curl 192.168.123.150/hello
  2. hello

第八题:

解析:这个题确实是送分题,没什么好说的。照做即可。

第九题:

解析:

这个题也是送分题,两步即可完成。

·1,查看节点的标签 是否有disk=ssd,没有则挑选一个节点打上这个标签

  1. root@k8s-master:~# kubectl get no --show-labels
  2. NAME STATUS ROLES AGE VERSION LABELS
  3. k8s-master Ready control-plane,master 375d v1.22.10 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
  4. k8s-node1 Ready <none> 5d20h v1.22.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
  5. k8s-node2 Ready <none> 5d20h v1.22.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

节点没有这个标签,因此,随便选择一个节点,本例选择node2节点,打 disk=ssd这个标签

  1. root@k8s-master:~# kubectl label no k8s-node2 disk=ssd
  2. node/k8s-node2 labeled

      确认标签是否正确:

  1. root@k8s-master:~# kubectl get no --show-labels |grep ssd
  2. k8s-node2 Ready <none> 5d20h v1.22.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

2,按照题意生成模板文件,给模板文件添加nodeSelector 

生成模板文件:

kubectl run nginx-kusc0041 --image=nginx --dry-run=client -oyaml >9.yaml

编辑模板文件,最后结果如下:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. creationTimestamp: null
  5. labels:
  6. run: nginx-kusc0041
  7. name: nginx-kusc0041
  8. spec:
  9. containers:
  10. - image: nginx
  11. name: nginx-kusc0041
  12. resources: {}
  13. dnsPolicy: ClusterFirst
  14. restartPolicy: Always
  15. nodeSelector:
  16. disk: ssd
  17. status: {}

执行模板文件并验证是否正确调度到了k8s-node2节点:

  1. root@k8s-master:~# kubectl apply -f 9.yaml
  2. pod/nginx-kusc0041 created
  1. root@k8s-master:~# kubectl get po nginx-kusc0041 -owide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. nginx-kusc0041 1/1 Running 0 2m39s 10.244.169.149 k8s-node2 <none> <none>

第十题:

 这个题也是送分题,没什么好说的,直接就看出来的:

  1. root@k8s-master:~# kubectl describe nodes |grep -i Taint |grep -iv NoScheduole
  2. Taints: node-role.kubernetes.io/master:NoSchedule
  3. Taints: <none>
  4. Taints: <none>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/171415
推荐阅读
相关标签
  

闽ICP备14008679号