创建 Deployment 以及查看状态信息
[root@k8s-master01 ~]# kubectl apply -f my-nginx.yaml deployment.apps/my-nginx created [root@k8s-master01 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 8s [root@k8s-master01 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE my-nginx-94fb9fc7c-2xjqc 1/1 Running 0 11s my-nginx-94fb9fc7c-rmwtr 1/1 Running 0 11s my-nginx-94fb9fc7c-x969q 1/1 Running 0 11s此时已经可以访问每一个 Pod ,为了防止后端的 Pod 挂掉之后重新创建新的 Pod ,IP地址也会随着改变,所以要通过 Service (服务发现)来保证可靠性。
接下来创建 Service,my-nginx-svc.yaml配置文件如下
apiVersion: v1 kind: Service metadata: name: my-nginx-service # Service 名称 spec: type: ClusterIP # Service 类型 selector: run: my-nginx # 标签匹配后端 Pod ports: # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。 - port: 80 targetPort: 80创建 Service 和查看状态
[root@k8s-master01 ~]# kubectl apply -f my-nginx-svc.yaml service/my-nginx-service created [root@k8s-master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d my-nginx-service ClusterIP 10.100.13.4 <none> 80/TCP 7s查看 Service 详细事件时,可以看到后端的 IP 地址都对应着每一个 Pod。
访问 Service IP 地址实际是访问后端的 Pod,Service 做了一个轮询的访问策略。
[root@k8s-master01 ~]# curl 10.100.13.4 version: v1 hostname: my-nginx-94fb9fc7c-2xjqc [root@k8s-master01 ~]# curl 10.100.13.4 version: v1 hostname: my-nginx-94fb9fc7c-x969q [root@k8s-master01 ~]# curl 10.100.13.4 version: v1 hostname: my-nginx-94fb9fc7c-rmwtr NodePort 类型利用刚刚创建好的 Deployment,这里只需要修改 Service 文件重新创建即可。my-nginx-svc.yaml文件如下
apiVersion: v1 kind: Service metadata: name: my-nginx-service # Service 名称 spec: type: NodePort # Service 类型 selector: run: my-nginx # 标签匹配后端 Pod ports: # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。 - port: 80 targetPort: 80 # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767) nodePort: 30001创建 Service 和查看状态
[root@k8s-master01 ~]# kubectl apply -f my-nginx-svc.yaml service/my-nginx-service created [root@k8s-master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d my-nginx-service NodePort 10.104.50.48 <none> 80:30001/TCP 6s外部访问端口30001,集群中任意一个节点的IP地址加上端口访问即可。
由于实验环境原因LoadBalancer 类型 和ExternalName 类型没有进行实验演示,下一章更新 Ingress 基本概念及功能演示的学习笔记,欢迎关注我。