一、创建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 ?????????NODEnet-test-7b949fc785-2v2qz ??1/1 ??????Running ????????????0 ?????????56s ??????10.2.87.2 ??192.168.56.120net-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 ms64 bytes from 10.2.87.2: icmp_seq=2 ttl=63 time=0.346 ms64 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 2000msrtt 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/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.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 deploymentNAME ??????????????DESIRED ??CURRENT ??UP-TO-DATE ??AVAILABLE ??AGEnet-test ??????????2 ????????2 ????????2 ???????????2 ??????????32mnginx-deployment ??3 ????????3 ????????3 ???????????0 ??????????10s ??[root@linux-node1 ~]# kubectl describe deployment nginx-deployment ?? #查看deployment详情Name: ??????????????????nginx-deploymentNamespace: ?????????????defaultCreationTimestamp: ?????Thu, 16 Aug 2018 16:13:37 +0800Labels: ????????????????app=nginxAnnotations: ???????????deployment.kubernetes.io/revision=1Selector: ??????????????app=nginxReplicas: ??????????????3 desired | 3 updated | 3 total | 0 available | 3 unavailableStrategyType: ??????????RollingUpdateMinReadySeconds: ???????0RollingUpdateStrategy: ?25% max unavailable, 25% max surgePod 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 ???ReplicaSetUpdatedOldReplicaSets: ?<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 ??AGEnet-test-5767cb94df-djt98 ??????????1/1 ??????Running ????????????0 ?????????22mnet-test-5767cb94df-hcwv7 ??????????1/1 ??????Unknown ????????????0 ?????????34mnet-test-5767cb94df-zb8m4 ??????????1/1 ??????Running ????????????0 ?????????34mnginx-deployment-6c45fc49cb-dmc22 ??0/1 ??????ContainerCreating ??0 ?????????2mnginx-deployment-6c45fc49cb-fd8xm ??0/1 ??????ContainerCreating ??0 ?????????2mnginx-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 #创建成功,状态为RunningNAME ???????????????????????????????READY ????STATUS ???RESTARTS ??AGE ??????IP ?????????NODEnet-test-5767cb94df-djt98 ??????????1/1 ??????Running ??0 ?????????24m ??????10.2.73.3 ??192.168.56.13net-test-5767cb94df-hcwv7 ??????????1/1 ??????Unknown ??0 ?????????36m ??????10.2.10.2 ??192.168.56.12net-test-5767cb94df-zb8m4 ??????????1/1 ??????Running ??0 ?????????36m ??????10.2.73.2 ??192.168.56.13nginx-deployment-6c45fc49cb-dmc22 ??1/1 ??????Running ??0 ?????????4m ???????10.2.73.6 ??192.168.56.13nginx-deployment-6c45fc49cb-fd8xm ??1/1 ??????Running ??0 ?????????4m ???????10.2.73.4 ??192.168.56.13nginx-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.6HTTP/1.1 200 OKServer: nginx/1.13.12Date: Thu, 16 Aug 2018 08:18:14 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Mon, 09 Apr 2018 16:01:09 GMTConnection: keep-aliveETag: "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,记录需要加参数--recorddeployment.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 ????????SELECTORnet-test ??????????2 ????????2 ????????2 ???????????2 ??????????39m ??????net-test ????alpine ????????run=net-testnginx-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-CAUSE1 ????????<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=1deployments "nginx-deployment" with revision #1Pod 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 wideNAME ???????????????????????????????READY ????STATUS ???RESTARTS ??AGE ??????IP ?????????NODEnet-test-5767cb94df-djt98 ??????????1/1 ??????Running ??0 ?????????30m ??????10.2.73.3 ??192.168.56.13net-test-5767cb94df-hcwv7 ??????????1/1 ??????Unknown ??0 ?????????42m ??????10.2.10.2 ??192.168.56.12net-test-5767cb94df-zb8m4 ??????????1/1 ??????Running ??0 ?????????42m ??????10.2.73.2 ??192.168.56.13nginx-deployment-64749d4b59-djttr ??1/1 ??????Running ??0 ?????????37s ??????10.2.73.8 ??192.168.56.13nginx-deployment-64749d4b59-jp7fw ??1/1 ??????Running ??0 ?????????3m ???????10.2.73.7 ??192.168.56.13nginx-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.7HTTP/1.1 200 OKServer: nginx/1.15.2 #版本已经升级为1.15.2Date: Thu, 16 Aug 2018 08:24:09 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 24 Jul 2018 13:02:29 GMTConnection: keep-aliveETag: "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 wideNAME ???????????????????????????????READY ????STATUS ???RESTARTS ??AGE ??????IP ??????????NODEnet-test-5767cb94df-djt98 ??????????1/1 ??????Running ??0 ?????????32m ??????10.2.73.3 ???192.168.56.13net-test-5767cb94df-hcwv7 ??????????1/1 ??????Unknown ??0 ?????????43m ??????10.2.10.2 ???192.168.56.12net-test-5767cb94df-zb8m4 ??????????1/1 ??????Running ??0 ?????????43m ??????10.2.73.2 ???192.168.56.13nginx-deployment-6c45fc49cb-b9h84 ??1/1 ??????Running ??0 ?????????24s ????? 10.2.73.11 ??192.168.56.13nginx-deployment-6c45fc49cb-g4mrg ??1/1 ??????Running ??0 ?????????26s ??????10.2.73.10 ?192.168.56.13nginx-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.10HTTP/1.1 200 OKServer: nginx/1.13.12Date: Thu, 16 Aug 2018 08:25:35 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Mon, 09 Apr 2018 16:01:09 GMTConnection: keep-aliveETag: "5acb8e45-264"Accept-Ranges: bytes回滚完成,每一次更新或者回滚ip都会变化,所以需要通过vip进行访问,这就引入了service ??
- 10、使用service的vip进行访问应用
[root@linux-node1 ~]# vim nginx-service.yaml #使用yaml方式创建servicekind: ServiceapiVersion: v1metadata: ?name: nginx-servicespec: ?selector: ???app: nginx ?ports: ?- protocol: TCP ???port: 80 ???targetPort: 80[root@linux-node1 ~]# kubectl create -f nginx-service.yaml #创建serviceservice "nginx-service" created[root@linux-node1 ~]# kubectl get serviceNAME ???????????TYPE ???????CLUSTER-IP ????EXTERNAL-IP ??PORT(S) ??AGEkubernetes ?????ClusterIP ??10.1.0.1 ??????<none> ???????443/TCP ??4hnginx-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 OKServer: nginx/1.13.12Date: Thu, 16 Aug 2018 08:30:08 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Mon, 09 Apr 2018 16:01:09 GMTConnection: keep-aliveETag: "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 InActConnTCP ?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 #对应用的副本数进行扩容,直接指定副本数为5deployment.extensions "nginx-deployment" scaled[root@linux-node1 ~]# kubectl get pod #查看pod状态,可以看到已经增加到5个副本NAME ???????????????????????????????READY ????STATUS ???RESTARTS ??AGEnet-test-5767cb94df-djt98 ??????????1/1 ??????Running ??0 ?????????38mnet-test-5767cb94df-hcwv7 ??????????1/1 ??????Unknown ??0 ?????????50mnet-test-5767cb94df-zb8m4 ??????????1/1 ??????Running ??0 ?????????50mnginx-deployment-6c45fc49cb-b9h84 ??1/1 ??????Running ??0 ?????????6mnginx-deployment-6c45fc49cb-g4mrg ??1/1 ??????Running ??0 ?????????7mnginx-deployment-6c45fc49cb-k29kq ??1/1 ??????Running ??0 ?????????6mnginx-deployment-6c45fc49cb-n9qkx ??1/1 ??????Running ??0 ?????????24snginx-deployment-6c45fc49cb-xpx9s ??1/1 ??????Running ??0 ?????????24s[root@linux-node2 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags ?-> RemoteAddress:Port ??????????Forward Weight ActiveConn InActConnTCP ?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应用
原文地址:https://www.cnblogs.com/linuxk/p/9488340.html