目录
-
Kubernetes之(五)快速部署应用
-
kubectl命令介绍
-
kubectl run命令行部署应用
-
kubectl expose 通过service暴漏Pod
-
kubectl scale 动态伸缩应用副本
-
kubectl set image 应用版本升级
-
kubectl rollout 回滚
-
集群外部访问Service
-
Kubernetes之(五)快速部署应用
kubectl命令介绍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 1[root@master ~]# kubectl --help
2kubectl controls the Kubernetes cluster manager.
3
4Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
5
6Basic Commands (Beginner):
7 create Create a resource from a file or from stdin.
8 expose 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes Service
9 run 在集群中运行一个指定的镜像
10 set 为 objects 设置一个指定的特征
11
12Basic Commands (Intermediate):
13 explain 查看资源的文档
14 get 显示一个或更多 resources
15 edit 在服务器上编辑一个资源
16 delete Delete resources by filenames, stdin,resources and names, or
17by resources and label selector
18
19Deploy Commands:
20 rollout Manage the rollout of a resource
21 scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job设置一个新的副本数量
22 autoscale 自动调整一个 Deployment, ReplicaSet, 或者ReplicationController 的副本数量
23
24Cluster Management Commands:
25 certificate 修改 certificate 资源.
26 cluster-info 显示集群信息
27 top Display Resource (CPU/Memory/Storage) usage.
28 cordon 标记 node 为 unschedulable
29 uncordon 标记 node 为 schedulable
30 drain Drain node in preparation for maintenance
31 taint 更新一个或者多个 node 上的 taints
32
33Troubleshooting and Debugging Commands:
34 describe 显示一个指定 resource 或者 group 的 resources 详情
35 logs 输出容器在 pod 中的日志
36 attach Attach 到一个运行中的 container
37 exec 在一个 container 中执行一个命令
38 port-forward Forward one or more local ports to a pod
39 proxy 运行一个 proxy 到 Kubernetes API server
40 cp 复制 files 和 directories 到 containers
41和从容器中复制 files 和 directories.
42 auth Inspect authorization
43
44Advanced Commands:
45 diff Diff live version against would-be applied version
46 apply 通过文件名或标准输入流(stdin)对资源进行配置
47 patch 使用 strategic merge patch 更新一个资源的 field(s)
48 replace 通过 filename 或者 stdin替换一个资源
49 wait Experimental: Wait for a specific condition on one or many
50resources.
51 convert 在不同的 API versions 转换配置文件
52
53Settings Commands:
54 label 更新在这个资源上的 labels
55 annotate 更新一个资源的注解
56 completion Output shell completion code for the specified shell (bash or
57zsh)
58
59Other Commands:
60 api-resources Print the supported API resources on the server
61 api-versions Print the supported API versions on the server, in the form of"group/version"
62 config 修改 kubeconfig 文件
63 plugin Provides utilities for interacting with plugins.
64 version 输出 client 和 server 的版本信息
65
66Usage:
67 kubectl [flags] [options]
68
69Use "kubectl <command> --help" for more information about a given command.
70Use "kubectl options" for a list of global command-line options (applies to all
71commands).
72
kubectl run命令行部署应用
语法:
1
2
3
4
5 1Usage:
2 kubectl run NAME --image=image [--env="key=value"] [--port=port]
3[--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] --
4[COMMAND] [args...] [options]
5
举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 1[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 --dry-run=true
2kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
3deployment.apps/nginx-deploy created (dry run)
4#--image 指定镜像
5#--port 暴漏端口
6#--replicas 设置副本数量
7# --dry-run=true 干跑模式,不执行,类似验证,无问题后再执行
8[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
9deployment.apps/nginx-deploy created
10## 查看是否创建成功
11#查看deployment
12[root@master ~]# kubectl get deployment
13NAME READY UP-TO-DATE AVAILABLE AGE
14nginx-deploy 1/1 1 1 30s
15#查看pod
16[root@master ~]# kubectl get pods
17NAME READY STATUS RESTARTS AGE
18nginx-deploy-84cbfc56b6-st4tq 1/1 Running 0 72s
19# -o wide 显示更多详细信息
20[root@master ~]# kubectl get pods -o wide
21NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
22nginx-deploy-84cbfc56b6-st4tq 1/1 Running 0 98s 10.244.2.2 node02 <none> <none>
23
从上面创建的应用可以得知,nginx-deploy应用的pod的ip为10.244.2.2,这是一个pod ip,仅仅可以在集群内部访问,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 1[root@master ~]# curl -I 10.244.2.2
2HTTP/1.1 200 OK
3Server: nginx/1.14.2
4Date: Thu, 28 Mar 2019 02:23:42 GMT
5Content-Type: text/html
6Content-Length: 612
7Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
8Connection: keep-alive
9ETag: "5c81dccc-264"
10Accept-Ranges: bytes
11
12[root@node01 ~]# curl -I 10.244.2.2
13HTTP/1.1 200 OK
14Server: nginx/1.14.2
15Date: Thu, 28 Mar 2019 02:23:48 GMT
16Content-Type: text/html
17Content-Length: 612
18Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
19Connection: keep-alive
20ETag: "5c81dccc-264"
21Accept-Ranges: bytes
22
23[root@node02 ~]# curl -I 10.244.2.2
24HTTP/1.1 200 OK
25Server: nginx/1.14.2
26Date: Thu, 28 Mar 2019 02:23:46 GMT
27Content-Type: text/html
28Content-Length: 612
29Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
30Connection: keep-alive
31ETag: "5c81dccc-264"
32Accept-Ranges: bytes
33
尝试删除Pod
1
2
3
4
5
6 1[root@master ~]# kubectl delete pods nginx-deploy-84cbfc56b6-st4tq
2pod "nginx-deploy-84cbfc56b6-st4tq" deleted
3[root@master ~]# kubectl get pods -o wide
4NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
5nginx-deploy-84cbfc56b6-w66pw 1/1 Running 0 53s 10.244.2.3 node02 <none> <none>
6
可以看到删除Pod后又重新开起了一个Pod,因为pod是被控制器管理的(此处为deployment),当Pod数量不满足控制器的desired值得时候,会自动补全Pod(随机在集群内满足要求得node节点创建),来满足期望值,同样的如果过多也会关掉多余得Pod。
此时Pod得IP已经发生变化,所以如果需要被外部访问就需要提供一个固定得端点,就是接下来说得Service:
kubectl expose 通过service暴漏Pod
语法
1
2
3
4
5
6
7
8 1Usage:
2 kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
3[--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
4#--port=port 这里是服务端口
5#--target-port 容器端口
6#--type=type service类型,分为Custer IP ,NodePort,LoadBalancer,ExternalName,默认是Custer IP
7后面会详细讲解
8
举例
1
2
3
4
5
6
7
8
9 1#将name为nginx-deploy的deployment暴漏为80端口
2[root@master ~]# kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
3service/nginx-deploy exposed
4#查看服务 services 简写为svc
5[root@master ~]# kubectl get svc
6NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
7kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h
8nginx ClusterIP 10.98.2.12 <none> 80/TCP 3s 35s
9
此时在节点访问svc的80端口来访问pod,即使Pod被删除后重建也可以访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 1#Pod在node02上,次数使用node01来访问
2[root@node01 ~]# curl -I 10.98.2.12
3HTTP/1.1 200 OK
4Server: nginx/1.14.2
5Date: Thu, 28 Mar 2019 02:48:13 GMT
6Content-Type: text/html
7Content-Length: 612
8Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
9Connection: keep-alive
10ETag: "5c81dccc-264"
11Accept-Ranges: bytes
12#删除Pod后再次尝试
13[root@master ~]# kubectl get pods
14NAME READY STATUS RESTARTS AGE
15nginx-deploy-84cbfc56b6-w66pw 1/1 Running 0 20m
16[root@master ~]# kubectl delete pods nginx-deploy-84cbfc56b6-w66pw
17pod "nginx-deploy-84cbfc56b6-w66pw" deleted
18[root@master ~]# kubectl get pods -o wide
19NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
20nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 6s 10.244.2.4 node02 <none> <none>
21[root@node01 ~]# curl -I 10.98.2.12
22HTTP/1.1 200 OK
23Server: nginx/1.14.2
24Date: Thu, 28 Mar 2019 02:49:35 GMT
25Content-Type: text/html
26Content-Length: 612
27Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
28Connection: keep-alive
29ETag: "5c81dccc-264"
30Accept-Ranges: bytes
31
10.99.146.96这网段依然是集群内部的网段,只能被集群内部客户端访问,外部是无法通过service的ip进行访问。那么针对pod的客户端除了通过service ip访问还可以通过service的名称进行访问,但是前提是需要对service的名称能够进行解析。而解析时是依赖coredns服务的,而我们本地的dns指向并非coredns,如下:
1
2
3
4
5
6
7
8 1[root@node02 ~]# curl -I nginx
2curl: (6) Could not resolve host: nginx-deploy; 未知的错误
3#查看节点的dns地址
4[root@node02 ~]# cat /etc/resolv.conf
5# Generated by NetworkManager
6nameserver 114.114.114.114
7nameserver 10.0.0.2
8
查看coredns的IP地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1[root@master ~]# kubectl get pods -n kube-system -o wide
2NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
3coredns-78d4cf999f-6cb69 1/1 Running 0 18h 10.244.1.2 node01 <none> <none>
4coredns-78d4cf999f-tflpn 1/1 Running 0 18h 10.244.1.3 node01 <none> <none>
5etcd-master 1/1 Running 0 18h 10.0.0.10 master <none> <none>
6kube-apiserver-master 1/1 Running 0 18h 10.0.0.10 master <none> <none>
7kube-controller-manager-master 1/1 Running 0 18h 10.0.0.10 master <none> <none>
8kube-flannel-ds-amd64-gtv85 1/1 Running 0 18h 10.0.0.10 master <none> <none>
9kube-flannel-ds-amd64-gwbql 1/1 Running 1 18h 10.0.0.12 node02 <none> <none>
10kube-flannel-ds-amd64-ml7nf 1/1 Running 0 18h 10.0.0.11 node01 <none> <none>
11kube-proxy-ch4vp 1/1 Running 0 18h 10.0.0.11 node01 <none> <none>
12kube-proxy-cz2rf 1/1 Running 1 18h 10.0.0.12 node02 <none> <none>
13kube-proxy-kdp7d 1/1 Running 0 18h 10.0.0.10 master <none> <none>
14kube-scheduler-master 1/1 Running 0 18h 10.0.0.10 master <none> <none>
15#-n指定名称空间
16
正常来说,也不会直接访问coredns的Pod的IP来直接访问,也是通过coredns的service进行访问
1
2
3
4 1[root@master ~]# kubectl get svc -n kube-system
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 18h
4
可以通过这个service ip:10.96.0.10进行解析上面的nginx服务。
提前准备dig命令 yum install -y bind-utils,这里需要使用完整的服务名称,否则可能由于dns搜索域问题导致失败
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 1[root@master ~]# dig -t A nginx.default.svc.cluster.local @10.96.0.10
2
3; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t A nginx.default.svc.cluster.local @10.96.0.10
4;; global options: +cmd
5;; Got answer:
6;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58335
7;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
8
9;; QUESTION SECTION:
10;nginx.default.svc.cluster.local. IN A
11
12;; ANSWER SECTION:
13nginx.default.svc.cluster.local. 5 IN A 10.98.2.12
14
15;; Query time: 1 msec
16;; SERVER: 10.96.0.10#53(10.96.0.10)
17;; WHEN: 四 3月 28 11:02:11 CST 2019
18;; MSG SIZE rcvd: 96
19
尝试通过集群内pod客户端进行访问:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 1[root@master ~]# kubectl run client --image=busybox --replicas=1 -it --restart=Never
2If you don't see a command prompt, try pressing enter.
3/ # cat /etc/resolv.conf
4nameserver 10.96.0.10
5search default.svc.cluster.local svc.cluster.local cluster.local
6options ndots:5
7/ # wget -O - -q http://nginx:80
8<!DOCTYPE html>
9<html>
10<head>
11<title>Welcome to nginx!</title>
12<style>
13 body {
14 width: 35em;
15 margin: 0 auto;
16 font-family: Tahoma, Verdana, Arial, sans-serif;
17 }
18</style>
19</head>
20<body>
21<h1>Welcome to nginx!</h1>
22<p>If you see this page, the nginx web server is successfully installed and
23working. Further configuration is required.</p>
24
25<p>For online documentation and support please refer to
26<a href="http://nginx.org/">nginx.org</a>.<br/>
27Commercial support is available at
28<a href="http://nginx.com/">nginx.com</a>.</p>
29
30<p><em>Thank you for using nginx.</em></p>
31</body>
32</html>
33
此时name为nginx的service就为name为nginx-deploy的deployment提供了固定访问断电,无论deployment内Pod的增加删除,都不影响访问,使用命令来查看services的详细信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1[root@master ~]# kubectl describe svc nginx
2Name: nginx
3Namespace: default
4Labels: run=nginx-deploy
5Annotations: <none>
6Selector: run=nginx-deploy
7Type: ClusterIP
8IP: 10.98.2.12
9Port: <unset> 80/TCP
10TargetPort: 80/TCP
11Endpoints: 10.244.2.4:80
12Session Affinity: None
13Events: <none>
14
15#Endpoints: Pod的IP地址
16
无论Pod怎么增删,只要标Labels存在run=nginx-deploy的 就会被svc锁访问。
1
2
3
4
5 1[root@master ~]# kubectl get pods --show-labels
2NAME READY STATUS RESTARTS AGE LABELS
3client 1/1 Running 0 28m run=client
4nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 51m pod-template-hash=84cbfc56b6,run=nginx-deploy
5
run=nginx-deploy就是这个应用的标签,所以当pod的改变,并不会影响service的访问。
kubectl scale 动态伸缩应用副本
语法
1
2
3 1Usage:
2 kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
3
举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1#创建新的deployment
2[root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
3kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
4deployment.apps/myapp created
5[root@master ~]# kubectl get deployment
6NAME READY UP-TO-DATE AVAILABLE AGE
7myapp 2/2 2 2 48s
8nginx-deploy 1/1 1 1 3h58m
9#查看pod
10[root@master ~]# kubectl get pods -o wide
11NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
12client 0/1 Completed 0 3h2m 10.244.2.5 node02 <none> <none>
13myapp-9b4987d5-98k45 1/1 Running 0 64s 10.244.1.4 node01 <none> <none>
14myapp-9b4987d5-ncpb7 1/1 Running 0 64s 10.244.2.6 node02 <none> <none>
15nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 3h26m 10.244.2.4 node02 <none> <none>
16
此时使用客户端访问
1
2
3
4
5 1/ # wget -O - -q 10.244.2.6/hostname.html
2myapp-9b4987d5-ncpb7
3/ # wget -O - -q 10.244.1.4/hostname.html
4myapp-9b4987d5-98k45
5
为myapp创建service
1
2
3
4
5
6
7
8 1[root@master ~]# kubectl expose deployment myapp --name=myapp --port=80
2service/myapp exposed
3[root@master ~]# kubectl get svc
4NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
5kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22h
6myapp ClusterIP 10.104.138.182 <none> 80/TCP 3s
7nginx ClusterIP 10.98.2.12 <none> 80/TCP 3h21m
8
所生成的myapp的地址为10.104.138.182,端口暴漏为80,协议默认为TCP
使用客户端访问myapp服务
1
2
3
4
5
6
7
8
9 1Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
2/ # wget -O - -q myapp/hostname.html
3myapp-9b4987d5-98k45
4/ # wget -O - -q myapp/hostname.html
5myapp-9b4987d5-98k45
6/ # wget -O - -q myapp/hostname.html
7myapp-9b4987d5-ncpb7
8#hostname.html显示的是pod的名字,也是pod的hostname
9
扩展副本数量
1
2
3
4
5
6
7
8
9
10
11
12 1[root@master ~]# kubectl scale --replicas=5 deployment myapp
2deployment.extensions/myapp scaled
3[root@master ~]# kubectl get pods -o wide
4NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
5client-f5cdb799f-pklmc 1/1 Running 0 5m46s 10.244.2.7 node02 <none> <none>
6myapp-9b4987d5-98k45 1/1 Running 0 8m44s 10.244.1.4 node01 <none> <none>
7myapp-9b4987d5-ck9bt 1/1 Running 0 9s 10.244.2.8 node02 <none> <none>
8myapp-9b4987d5-gfqjp 1/1 Running 0 9s 10.244.2.9 node02 <none> <none>
9myapp-9b4987d5-ncpb7 1/1 Running 0 8m44s 10.244.2.6 node02 <none> <none>
10myapp-9b4987d5-wrp7r 1/1 Running 0 9s 10.244.1.5 node01 <none> <none>
11nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 3h33m 10.244.2.4 node02 <none> <none>
12
此时使用客户端访问myapp服务
1
2
3
4
5
6
7
8
9
10
11
12
13 1/ # for i in `seq 10000`;do wget -O - -q myapp/hostname.html;sleep 1;done
2myapp-9b4987d5-wrp7r
3myapp-9b4987d5-ncpb7
4myapp-9b4987d5-wrp7r
5myapp-9b4987d5-98k45
6myapp-9b4987d5-wrp7r
7myapp-9b4987d5-98k45
8myapp-9b4987d5-gfqjp
9myapp-9b4987d5-wrp7r
10myapp-9b4987d5-gfqjp
11myapp-9b4987d5-gfqjp
12myapp-9b4987d5-ncpb7
13
再次修改副本数量为3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 1[root@master ~]# kubectl get pods -o wide
2NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
3client-f5cdb799f-pklmc 1/1 Running 0 8m32s 10.244.2.7 node02 <none> <none>
4myapp-9b4987d5-98k45 1/1 Running 0 11m 10.244.1.4 node01 <none> <none>
5myapp-9b4987d5-ck9bt 0/1 Terminating 0 2m55s 10.244.2.8 node02 <none> <none>
6myapp-9b4987d5-gfqjp 0/1 Terminating 0 2m55s 10.244.2.9 node02 <none> <none>
7myapp-9b4987d5-ncpb7 1/1 Running 0 11m 10.244.2.6 node02 <none> <none>
8myapp-9b4987d5-wrp7r 1/1 Running 0 2m55s 10.244.1.5 node01 <none> <none>
9nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 3h36m 10.244.2.4 node02 <none> <none>
10
11#客户端查看
12myapp-9b4987d5-98k45
13myapp-9b4987d5-98k45
14myapp-9b4987d5-wrp7r
15myapp-9b4987d5-wrp7r
16myapp-9b4987d5-wrp7r
17myapp-9b4987d5-wrp7r
18myapp-9b4987d5-ncpb7
19myapp-9b4987d5-ncpb7
20myapp-9b4987d5-98k45
21
此时服务就只会访问剩余的3个副本间
kubectl set image 应用版本升级
语法
Usage:
kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 … CONTAINER_NAME_N=CONTAINER_IMAGE_N
[options]
举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 1#升级myapp的版本为v2
2[root@master ~]# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
3deployment.extensions/myapp image updated
4
5#查看更新过程
6[root@master ~]# kubectl rollout status deployment myapp
7Waiting for deployment "myapp" rollout to finish: 2 out of 3 new replicas have been updated...
8Waiting for deployment "myapp" rollout to finish: 2 out of 3 new replicas have been updated...
9Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
10Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
11deployment "myapp" successfully rolled out
12
13#此过程客户端过程
14/ # for i in `seq 10000`;do wget -O - -q myapp;sleep 1;done
15Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
16Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
17Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
18Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
19Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
20Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
21Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
22Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
23Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
24Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
25Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
26Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
27
也可以使用kubectl describe 来查看Pod的详细信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 1[root@master ~]# kubectl get pods
2NAME READY STATUS RESTARTS AGE
3client-f5cdb799f-pklmc 1/1 Running 0 21m
4myapp-65899575cd-q9wt9 1/1 Running 0 4m56s
5myapp-65899575cd-xhwmr 1/1 Running 0 4m58s
6myapp-65899575cd-xnqd4 1/1 Running 0 4m58s
7nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 3h49m
8[root@master ~]# kubectl describe pods myapp-65899575cd-xhwmr
9Name: myapp-65899575cd-xhwmr
10Namespace: default
11Priority: 0
12PriorityClassName: <none>
13Node: node01/10.0.0.11
14Start Time: Thu, 28 Mar 2019 14:33:50 +0800
15Labels: pod-template-hash=65899575cd
16 run=myapp
17Annotations: <none>
18Status: Running
19IP: 10.244.1.10
20Controlled By: ReplicaSet/myapp-65899575cd
21Containers:
22 myapp:
23 Container ID: docker://5f9c63ce9f84fb6f863b44dd2eb9626f3eff2a599b48eb7000c84f5b70f6d2c9
24 Image: ikubernetes/myapp:v2
25... ...
26
kubectl rollout 回滚
一种方法是直接修改image版本,另外一种是使用kubectl rollout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 1[root@master ~]# kubectl rollout -h
2Manage the rollout of a resource.
3
4Valid resource types include:
5
6 * deployments
7 * daemonsets
8 * statefulsets
9
10Examples:
11 # Rollback to the previous deployment
12 kubectl rollout undo deployment/abc
13
14 # Check the rollout status of a daemonset
15 kubectl rollout status daemonset/foo
16
17Available Commands:
18 history 显示 rollout 历史
19 pause 标记提供的 resource 为中止状态
20 resume 继续一个停止的 resource
21 status 显示 rollout 的状态
22 undo 撤销上一次的 rollout
23
24Usage:
25 kubectl rollout SUBCOMMAND [options]
26
举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 1[root@master ~]# kubectl rollout undo deployment myapp
2deployment.extensions/myapp rolled back
3[root@master ~]# kubectl get pods
4NAME READY STATUS RESTARTS AGE
5client-f5cdb799f-pklmc 1/1 Running 0 24m
6myapp-65899575cd-q9wt9 0/1 Terminating 0 8m15s
7myapp-65899575cd-xhwmr 1/1 Terminating 0 8m17s
8myapp-65899575cd-xnqd4 1/1 Running 0 8m17s
9myapp-9b4987d5-47sjj 0/1 ContainerCreating 0 0s
10myapp-9b4987d5-684q9 1/1 Running 0 2s
11myapp-9b4987d5-djdr9 1/1 Running 0 3s
12nginx-deploy-84cbfc56b6-tcssz 1/1 Running 0 3h52m
13
14#客户端查看
15/ # for i in `seq 10000`;do wget -O - -q myapp;sleep 1;done
16Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
17Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
18Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
19Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
20Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
21Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
22Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
23Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
24Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
25Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
26Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
27Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
28Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
29Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
30Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
31Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
32#已经全部回退到上个版本
33
集群外部访问Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 1[root@master ~]# kubectl edit svc myapp
2# Please edit the object below. Lines beginning with a '#' will be ignored,
3# and an empty file will abort the edit. If an error occurs while saving this file will be
4# reopened with the relevant failures.
5#
6apiVersion: v1
7kind: Service
8metadata:
9 creationTimestamp: "2019-03-28T06:20:00Z"
10 labels:
11 run: myapp
12 name: myapp
13 namespace: default
14 resourceVersion: "36470"
15 selfLink: /api/v1/namespaces/default/services/myapp
16 uid: 8425bae4-5121-11e9-80a7-000c295ec349
17spec:
18 clusterIP: 10.104.138.182
19 ports:
20 - port: 80
21 protocol: TCP
22 targetPort: 80
23 selector:
24 run: myapp
25 sessionAffinity: None
26 type: NodePort
27status:
28 loadBalancer: {}
29
查看服务
1
2
3
4
5
6 1[root@master ~]# kubectl get svc
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22h
4myapp NodePort 10.104.138.182 <none> 80:30298/TCP 38m
5nginx ClusterIP 10.98.2.12 <none> 80/TCP 4h
6
myapp服务80端口映射到节点的30298,且整个集群的30298节点都可以访问
另一节点访问