上一篇咱们部署了Kubernetes集群,接下来会在这个集群上运行一个简单的应用。 html
如下面的图来安装一个简单的静态内容的nginx应用: node
首先,咱们用复制器启动一个2个备份的nginx Pod。而后在前面挂Service,一个service只能被集群内部访问,一个能被集群外的节点访问。 nginx
1. 部署nginx pod 和复制器 web
#cat nginx-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx-controller spec: replicas: 2 selector: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
咱们定义了一个nginx pod复制器,复制份数为2,咱们使用nginx docker镜像。 docker
执行下面的操做建立nginx pod复制器: shell
[root@master test]# kubectl create -f nginx-rc.yaml replicationcontrollers/nginx-controller记得先去下载gcr.io镜像,而后更名,不然会提示失败。因为还会下载nginx镜像,因此所建立的Pod须要等待一些时间才能处于running状态。
[root@master test]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 1d nginx-controller-dkl3v 1/1 Running 0 14s nginx-controller-hxcq8 1/1 Running 0 14s
咱们可使用describe 命令查看pod的相关信息: api
[root@master test]# kubectl describe pod nginx-controller-dkl3v Name: nginx-controller-dkl3v Namespace: default Image(s): nginx Node: 192.168.32.17/192.168.32.17 Labels: name=nginx Status: Running Reason: Message: IP: 172.17.67.2 Replication Controllers: nginx-controller (2/2 replicas created) Containers: nginx: Image: nginx State: Running Started: Wed, 30 Dec 2015 02:03:19 -0500 Ready: True Restart Count: 0 Conditions: Type Status Ready True Events: FirstSeen LastSeen Count From SubobjectPath Reason Message Wed, 30 Dec 2015 02:03:14 -0500 Wed, 30 Dec 2015 02:03:14 -0500 1 {scheduler } scheduled Successfully assigned nginx-controller-dkl3v to 192.168.32.17 Wed, 30 Dec 2015 02:03:15 -0500 Wed, 30 Dec 2015 02:03:15 -0500 1 {kubelet 192.168.32.17} implicitly required container POD pulled Pod container image "kubernetes/pause" already present on machine Wed, 30 Dec 2015 02:03:16 -0500 Wed, 30 Dec 2015 02:03:16 -0500 1 {kubelet 192.168.32.17} implicitly required container POD created Created with docker id e88dffe46a28 Wed, 30 Dec 2015 02:03:17 -0500 Wed, 30 Dec 2015 02:03:17 -0500 1 {kubelet 192.168.32.17} implicitly required container POD started Started with docker id e88dffe46a28 Wed, 30 Dec 2015 02:03:18 -0500 Wed, 30 Dec 2015 02:03:18 -0500 1 {kubelet 192.168.32.17} spec.containers{nginx} created Created with docker id 25fcb6b4ce09 Wed, 30 Dec 2015 02:03:19 -0500 Wed, 30 Dec 2015 02:03:19 -0500 1 {kubelet 192.168.32.17} spec.containers{nginx} started Started with docker id 25fcb6b4ce092. 部署节点内部可访问的nginx service
Service的type有ClusterIP和NodePort之分,缺省是ClusterIP,这种类型的Service只能在集群内部访问。配置文件以下: curl
#cat nginx-service-clusterip.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-clusterip spec: ports: - port: 8001 targetPort: 80 protocol: TCP selector: name: nginx
执行下面的命令建立service: tcp
[root@master test]# kubectl create -f ./nginx-service-clusterip.yaml services/nginx-service-clusterip查看所建立的service:
[root@master test]# kubectl get service NAME LABELS SELECTOR IP(S) PORT(S) kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.1 443/TCP nginx-service-clusterip <none> name=nginx 10.254.234.255 8001/TCP上面的输出告诉咱们这个 Service的Cluster IP是10.254.234.255,端口是8001。下面咱们验证这个PortalNet IP的工做状况:
在192.168.32.16上执行如下命令: ide
[root@minion1 ~]# curl -s 10.254.234.255:8001 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
从前面部署复制器的部分咱们知道nginx Pod运行在17节点上。上面咱们特地从16代理节点上访问咱们的服务来体现Service Cluster IP在全部集群代理节点的可到达性。
3. 部署外部可访问的nginx service下面咱们建立NodePort类型的Service,这种类型的Service在集群外部是能够访问。配置文件以下:
cat nginx-service-nodeport.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: ports: - port: 8000 targetPort: 80 protocol: TCP type: NodePort selector: name: nginx执行以下命令建立service并进行查看:
[root@master test]# kubectl create -f ./nginx-service-nodeport.yaml You have exposed your service on an external port on all nodes in your cluster. If you want to expose this service to the external internet, you may need to set up firewall rules for the service port(s) (tcp:31000) to serve traffic. See http://releases.k8s.io/HEAD/docs/user-guide/services-firewalls.md for more details. services/nginx-service-nodeport [root@master test]# kubectl get service NAME LABELS SELECTOR IP(S) PORT(S) kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.1 443/TCP nginx-service-clusterip <none> name=nginx 10.254.234.255 8001/TCP nginx-service-nodeport <none> name=nginx 10.254.210.68 8000/TCP建立service时提示须要设置firewall rules,不用去管,不影响后续操做。
查看建立的service:
[root@master test]# kubectl describe service nginx-service-nodeport Name: nginx-service-nodeport Namespace: default Labels: <none> Selector: name=nginx Type: NodePort IP: 10.254.210.68 Port: <unnamed> 8000/TCP NodePort: <unnamed> 31000/TCP Endpoints: 172.17.67.2:80,172.17.67.3:80 Session Affinity: None No events.这个 Service的节点级别端口是31000。下面咱们验证这个 Service的工做状况:
[root@master test]# curl -s 192.168.32.16:31000 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> [root@master test]# curl -s 192.168.32.17:31000 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>无论是从16仍是17,都能访问到咱们的服务。
4. 总结
本文只是一个简单的应用,在应用部署时,了解Kubernetes的应用模型是很是重要的。还须要对Kubernetes进行更深刻的研究。