原创文章,欢迎转载。转载请注明:转载自,谢谢!
原文链接地址:
我们在使用pod的时候,pod之前可以相互ping通的,机器本身也可以ping通pod和另外机器的pod,如果是一个serivce的话,我们通过端口号,就可以访问service。源码:
不要直接使用和管理Pods,为什么?
- 当我们使用ReplicaSet 或者ReplicationController做水平扩展scale的时候,Pods可能被结束。
- 当我们使用Deployment的时候,我们去更新Docker Image Version,旧的Pods会被结束,然后新的Pods创建,Ip地址发生了变化。
Service
- kubectl expoese命令,会给我们的pod创建一个Service,供外部访问。
- Service 主要有三种类型:
- ClsterIP
- NodePort
- LoadBalancer
- 另外也可以使用DNS,但是需要DNS的add-on
Service的演示
- 创建service。
get podkubectl get pod -o widekubectl expose pods nginx#查看到已经创建的servicekubectl get svc复制代码
- 访问service
ping 10.254.233.245复制代码
- 创建deployment
cd deployk8s-master/ cd labs/ cd deployment/more deployment_nginx.yml复制代码
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12.2 ports: - containerPort: 80复制代码
kubectl create -f deployment_nginx.ymlkubectl get pods -o wide 复制代码
我们进入node节点访问这些deployment
- 创建deploy对应的service
kubectl get deploymentexpose deployment nginx-deploymentkubectl get svc复制代码
service内部的修改部署
kubectl edit deployment nginx-deployment复制代码
PS:根据你修改的文件内容,它就自动更新了,但是ip没有发生改变,这就是service的强大。但是目前这种直接改deloyment文件的形式,不是推荐的因为他不是滚动更新,下次说下滚动更新。