模拟考题:

设置配置环境: [candidate@node-1] $ kubectl config use-context k8s

Task

请重新配置现有的deployment front-end 以及添加名为http的端口规范来公开现有容器 nginx 的端口80/tcp。 创建一个名为front-end-svc的新service,以公开容器端口http。 配置此service,以通过各个Pod所在的节点上的 NodePort 来公开他们。


参考:

概念 --> 工作负载 --> 工作负载资源 --> Deployments https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/


解答:

考试的时候务必记住切换集群, 注意集群名称 kubectl config use-context k8s

检查deployment信息,并记录SELECTOR的Lable标签,这里是app=front-end

kubectl get deployment front-end -o wide

编辑 front-end

kubectl edit deployment front-end

spec下 name:nginx 行后添加

ports:
- name: http
  containerPort: 80
  protocol: TCP

暴露端口:

kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc

# 注意考试中需要创建的是NodePort,还是ClusterIP。如果是ClusterIP,则应为--type=ClusterIP
# --port是service的端口号
# --target-port是deployment里pod的容器的端口号

file


检查:

暴露服务后,检查一下service的selector标签是否正确,这个要与deployment的selector标签一致

kubectl get svc front-end-svc -o wide
kubectl get deployment front-end -o wide

file

如果你kubectl expose暴露服务后,发现service的selector标签是空的,或者不是deployment的,如下图这样: file 则需要编辑此service,手动添加标签

kubectl edit svc front-end-svc

在ports这一小段下面添加selector标签 selector: app: front-end #注意yaml里是写冒号,而不是等号,不是app=front-end file

确保service的selector标签与deployment的selector标签一致 file

kubectl get pod,svc -o wide
curl 所在的node的ip或主机名:30xxx
curl svc的ip地址:80

(注意,只能curl通svc的80端口,但是无法ping通的。)