Kubernetes入門篇(六)之創建K8S應用
阿新 • • 發佈:2018-08-16
target extension virt host bsp node ash ava -type
-
一、創建K8S的第一個應用
[root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 36000 #創建名稱為net-test的應用,鏡像指定為alpine,副本數為2個 deployment.apps "net-test" created [root@linux-node1 ~]# kubectl get pod -o wide #查看pod的狀態信息 NAME READY STATUS RESTARTS AGE IP NODE net-test-7b949fc785-2v2qz 1/1 Running 0 56s 10.2.87.2 192.168.56.120 net-test-7b949fc785-6nrhm 0/1 ContainerCreating 0 56s <none> 192.168.56.130 [root@linux-node1 ~]# ping -c 3 10.2.87.2 #檢測pod的連通性 PING 10.2.87.2 (10.2.87.2) 56(84) bytes of data.64 bytes from 10.2.87.2: icmp_seq=1 ttl=63 time=0.841 ms 64 bytes from 10.2.87.2: icmp_seq=2 ttl=63 time=0.346 ms 64 bytes from 10.2.87.2: icmp_seq=3 ttl=63 time=0.617 ms --- 10.2.87.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.346/0.601/0.841/0.203 ms
-
二、創建Nginx服務
- 1、創建deployment
[root@linux-node1 ~]# vim nginx-deployment.yaml #使用yaml的方式進行創建應用 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.13.12 ports: - containerPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-deployment.yaml #創建nginx-deployment應用 deployment.apps "nginx-deployment" created
- 2、查看deployment
[root@linux-node1 ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE net-test 2 2 2 2 32m nginx-deployment 3 3 3 0 10s [root@linux-node1 ~]# kubectl describe deployment nginx-deployment #查看deployment詳情 Name: nginx-deployment Namespace: default CreationTimestamp: Thu, 16 Aug 2018 16:13:37 +0800 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=1 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 0 available | 3 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.13.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available False MinimumReplicasUnavailable Progressing True ReplicaSetUpdated OldReplicaSets: <none> NewReplicaSet: nginx-deployment-6c45fc49cb (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set nginx-deployment-6c45fc49cb to 3
- 3、查看Pod
[root@linux-node1 ~]# kubectl get pod #查看pod在狀態,正在創建中,此時應該正在拉取鏡像 NAME READY STATUS RESTARTS AGE net-test-5767cb94df-djt98 1/1 Running 0 22m net-test-5767cb94df-hcwv7 1/1 Unknown 0 34m net-test-5767cb94df-zb8m4 1/1 Running 0 34m nginx-deployment-6c45fc49cb-dmc22 0/1 ContainerCreating 0 2m nginx-deployment-6c45fc49cb-fd8xm 0/1 ContainerCreating 0 2m nginx-deployment-6c45fc49cb-sc8sh 0/1 ContainerCreating 0 2m [root@linux-node1 ~]# kubectl describe pod nginx-deployment-6c45fc49cb-dmc22 #查看具體某個pod的狀態信息 [root@linux-node1 ~]# kubectl get pod -o wide #創建成功,狀態為Running NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 24m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 36m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 36m 10.2.73.2 192.168.56.13 nginx-deployment-6c45fc49cb-dmc22 1/1 Running 0 4m 10.2.73.6 192.168.56.13 nginx-deployment-6c45fc49cb-fd8xm 1/1 Running 0 4m 10.2.73.4 192.168.56.13 nginx-deployment-6c45fc49cb-sc8sh 1/1 Running 0 4m 10.2.73.5 192.168.56.13
- 4、測試Pod訪問
[root@linux-node1 ~]# curl --head http://10.2.73.6 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:18:14 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes
- 5、更新Deployment
[root@linux-node1 ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record #nginx的版本升級,由1.13.2升級為1.15.2,記錄需要加參數--record deployment.apps "nginx-deployment" image updated [root@linux-node1 ~]# kubectl get deployment -o wide #查看更新後的deployment,可以看到當前4個副本,說明還在滾動升級中 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR net-test 2 2 2 2 39m net-test alpine run=net-test nginx-deployment 3 4 1 3 6m nginx nginx:1.15.2 app=nginx
- 6、查看更新歷史
[root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment #查看更新歷史記錄 deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 <none> 2 kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record=true
- 7、查看具體某一個版本的升級歷史
[root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment --revision=1 deployments "nginx-deployment" with revision #1 Pod Template: Labels: app=nginx pod-template-hash=2701970576 Containers: nginx: Image: nginx:1.13.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none>
- 8、查看更新後的Deployment,並進行訪問
[root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 30m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 42m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 42m 10.2.73.2 192.168.56.13 nginx-deployment-64749d4b59-djttr 1/1 Running 0 37s 10.2.73.8 192.168.56.13 nginx-deployment-64749d4b59-jp7fw 1/1 Running 0 3m 10.2.73.7 192.168.56.13 nginx-deployment-64749d4b59-q4fsn 1/1 Running 0 33s 10.2.73.9 192.168.56.13 [root@linux-node1 ~]# curl --head http://10.2.73.7 HTTP/1.1 200 OK Server: nginx/1.15.2 #版本已經升級為1.15.2 Date: Thu, 16 Aug 2018 08:24:09 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 24 Jul 2018 13:02:29 GMT Connection: keep-alive ETag: "5b572365-264" Accept-Ranges: bytes
- 9、快速回滾到上一個版本
[root@linux-node1 ~]# kubectl rollout undo deployment/nginx-deployment #回滾上一個版本 deployment.apps "nginx-deployment" [root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 32m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 43m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 43m 10.2.73.2 192.168.56.13 nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 24s 10.2.73.11 192.168.56.13 nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 26s 10.2.73.10 192.168.56.13 nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 21s 10.2.73.12 192.168.56.13 [root@linux-node1 ~]# curl --head http://10.2.73.10 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:25:35 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes 回滾完成,每一次更新或者回滾ip都會變化,所以需要通過vip進行訪問,這就引入了service
- 10、使用service的vip進行訪問應用
[root@linux-node1 ~]# vim nginx-service.yaml #使用yaml方式創建service kind: Service apiVersion: v1 metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-service.yaml #創建service service "nginx-service" created [root@linux-node1 ~]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 4h nginx-service ClusterIP 10.1.213.126 <none> 80/TCP 15s #這個就是vip [root@linux-node2 ~]# curl --head http://10.1.213.126 #在node2節點上進行訪問vip測試,在node1上無法訪問是因為沒有安裝kube-proxy導致無法訪問 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:30:08 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes [root@linux-node2 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.0.1:443 rr persistent 10800 -> 192.168.56.11:6443 Masq 1 0 0 TCP 10.1.213.126:80 rr -> 10.2.73.10:80 Masq 1 0 1 -> 10.2.73.11:80 Masq 1 0 1 -> 10.2.73.12:80 Masq 1 0 0
查看LVS狀態可以看到,當訪問VIP:10.1.213.126時,會進行負載均衡到各個pod
- 11、擴容到5個節點
[root@linux-node1 ~]# kubectl scale deployment nginx-deployment --replicas 5 #對應用的副本數進行擴容,直接指定副本數為5 deployment.extensions "nginx-deployment" scaled [root@linux-node1 ~]# kubectl get pod #查看pod狀態,可以看到已經增加到5個副本 NAME READY STATUS RESTARTS AGE net-test-5767cb94df-djt98 1/1 Running 0 38m net-test-5767cb94df-hcwv7 1/1 Unknown 0 50m net-test-5767cb94df-zb8m4 1/1 Running 0 50m nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 6m nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 7m nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 6m nginx-deployment-6c45fc49cb-n9qkx 1/1 Running 0 24s nginx-deployment-6c45fc49cb-xpx9s 1/1 Running 0 24s [root@linux-node2 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.0.1:443 rr persistent 10800 -> 192.168.56.11:6443 Masq 1 0 0 TCP 10.1.213.126:80 rr -> 10.2.73.10:80 Masq 1 0 0 -> 10.2.73.11:80 Masq 1 0 0 -> 10.2.73.12:80 Masq 1 0 1 -> 10.2.73.13:80 Masq 1 0 0 -> 10.2.73.14:80 Masq 1 0 0
Kubernetes入門篇(六)之創建K8S應用