NAME STATUS ROLES AGE VERSION k8s-node1 Ready master 17h v1.15.0 k8s-node2 Ready <none> 16h v1.15.0 k8s-node3 Ready <none> 16h v1.15.0 k8s-node4 Ready <none> 16h v1.15.0
现在可以看到所有的节点已经运行 Ready 。
测试集群通过上面的步骤,k8s 集群(1个 master 节点和 3 个 worker 节点)环境已经搭建完毕,并且所有的节点都得正常工作,现在我们要通过添加 Nginx 应用来测试集群。
创建单 Pod 的 Nginx 应用
kubectl create deployment nginx --image=nginx:alpine
deployment.apps/nginx created
查看 pod 详情
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-8f6959bd-6pth6 1/1 Running 0 73s 10.2.1.2 k8s-node2 <none> <none>
Pod 的 IP 地址是从 Master 节点初始化的参数 --pod-network-cidr=10.2.0.0/16 的地址段中分配的。
访问 nginx
通过上面获取的 Pod 的 ip 10.2.1.2 地址访问 nginx
curl -I
HTTP/1.1 200 OK Server: nginx/1.17.1 Date: Thu, 18 Jul 2019 07:53:22 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 25 Jun 2019 14:15:08 GMT Connection: keep-alive ETag: "5d122c6c-264" Accept-Ranges: bytes
扩容为 2 个 节点
kubectl scale deployment nginx --replicas=2
deployment.extensions/nginx scaled
查看 pod
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-8f6959bd-6pth6 1/1 Running 0 6m44s 10.2.1.2 k8s-node2 <none> <none> nginx-8f6959bd-l56n9 1/1 Running 0 28s 10.2.3.2 k8s-node4 <none> <none>
可以看到 Pod 已经有了两个副本,每个副本都有各自的 IP, 通过 IP 访问新增加的副本,照样是可以提供服务的。
curl -I
HTTP/1.1 200 OK Server: nginx/1.17.1 Date: Thu, 18 Jul 2019 07:58:27 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 25 Jun 2019 14:15:08 GMT Connection: keep-alive ETag: "5d122c6c-264" Accept-Ranges: bytes
**暴露为服务 **
多个副本需要暴露为一个服务来统一对外提供服务,服务会创建一个Cluster IP,从 Master 节点初始化参数 --service-cidr=10.1.0.0/16 地址段中进行分配。服务会自动在在多个副本之间进行负载均衡。
运行以下命令为 nginx 应用暴露服务,并开启 NodePort 在所有节点上进行端口映射,进行外部访问。
kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
运行以下命令看一下服务列表
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 19h nginx NodePort 10.1.59.105 <none> 80:32502/TCP 80s
可以看到,nginx 服务的 vip 为 10.1.59.105, Node 节点上端口 32502 映射到 nginx 的 80 端口。
运行以下命令,通过 vip 访问服务
curl -I
HTTP/1.1 200 OK Server: nginx/1.17.1 Date: Thu, 18 Jul 2019 08:10:45 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 25 Jun 2019 14:15:08 GMT Connection: keep-alive ETag: "5d122c6c-264" Accept-Ranges: bytes
在主机上运行以下命令通过节点的 IP 访问服务
curl -I :32502