Kubernetes之快速部署应用

目录

  • Kubernetes之快速部署应用

    • kubectl命令介绍
    • kubectl run命令行部署应用
    • kubectl expose 通过service暴漏Pod
    • kubectl scale 动态伸缩应用副本
    • kubectl set image 应用版本升级
    • kubectl rollout 回滚
    • 集群外部访问Service

Kubernetes之快速部署应用

kubectl命令介绍

[[email protected] ~]# kubectl --help
kubectl controls the Kubernetes cluster manager. 

Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create         Create a resource from a file or from stdin.
  expose         使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes Service
  run            在集群中运行一个指定的镜像
  set            为 objects 设置一个指定的特征

Basic Commands (Intermediate):
  explain        查看资源的文档
  get            显示一个或更多 resources
  edit           在服务器上编辑一个资源
  delete         Delete resources by filenames, stdin,resources and names, or
by resources and label selector

Deploy Commands:
  rollout        Manage the rollout of a resource
  scale          为 Deployment, ReplicaSet, Replication Controller 或者 Job设置一个新的副本数量
  autoscale      自动调整一个 Deployment, ReplicaSet, 或者ReplicationController 的副本数量

Cluster Management Commands:
  certificate    修改 certificate 资源.
  cluster-info   显示集群信息
  top            Display Resource (CPU/Memory/Storage) usage.
  cordon         标记 node 为 unschedulable
  uncordon       标记 node 为 schedulable
  drain          Drain node in preparation for maintenance
  taint          更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:
  describe       显示一个指定 resource 或者 group 的 resources 详情
  logs           输出容器在 pod 中的日志
  attach         Attach 到一个运行中的 container
  exec           在一个 container 中执行一个命令
  port-forward   Forward one or more local ports to a pod
  proxy          运行一个 proxy 到 Kubernetes API server
  cp             复制 files 和 directories 到 containers
和从容器中复制 files 和 directories.
  auth           Inspect authorization

Advanced Commands:
  diff           Diff live version against would-be applied version
  apply          通过文件名或标准输入流(stdin)对资源进行配置
  patch          使用 strategic merge patch 更新一个资源的 field(s)
  replace        通过 filename 或者 stdin替换一个资源
  wait           Experimental: Wait for a specific condition on one or many
resources.
  convert        在不同的 API versions 转换配置文件

Settings Commands:
  label          更新在这个资源上的 labels
  annotate       更新一个资源的注解
  completion     Output shell completion code for the specified shell (bash or
zsh)

Other Commands:
  api-resources  Print the supported API resources on the server
  api-versions   Print the supported API versions on the server, in the form of"group/version"
  config         修改 kubeconfig 文件
  plugin         Provides utilities for interacting with plugins.
  version        输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all
commands).

kubectl run命令行部署应用

语法:

Usage:
 kubectl run NAME --image=image [--env="key=value"] [--port=port]
[--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] --
[COMMAND] [args...] [options]

举例

[[email protected] ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 --dry-run=true
kubectl 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.
deployment.apps/nginx-deploy created (dry run)
#--image 指定镜像
#--port 暴漏端口
#--replicas 设置副本数量
# --dry-run=true 干跑模式,不执行,类似验证,无问题后再执行
[[email protected] ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
deployment.apps/nginx-deploy created
## 查看是否创建成功
#查看deployment
[[email protected] ~]# kubectl get deployment
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   1/1     1            1           30s
#查看pod
[[email protected] ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-84cbfc56b6-st4tq   1/1     Running   0          72s
# -o wide 显示更多详细信息
[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-deploy-84cbfc56b6-st4tq   1/1     Running   0          98s   10.244.2.2   node02   <none>           <none>

从上面创建的应用可以得知,nginx-deploy应用的pod的ip为10.244.2.2,这是一个pod ip,仅仅可以在集群内部访问,如下:

[[email protected] ~]# curl -I 10.244.2.2
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 28 Mar 2019 02:23:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
Connection: keep-alive
ETag: "5c81dccc-264"
Accept-Ranges: bytes

[[email protected] ~]# curl -I 10.244.2.2
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 28 Mar 2019 02:23:48 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
Connection: keep-alive
ETag: "5c81dccc-264"
Accept-Ranges: bytes

[[email protected] ~]# curl -I 10.244.2.2
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 28 Mar 2019 02:23:46 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
Connection: keep-alive
ETag: "5c81dccc-264"
Accept-Ranges: bytes

尝试删除Pod

[[email protected] ~]# kubectl delete pods nginx-deploy-84cbfc56b6-st4tq
pod "nginx-deploy-84cbfc56b6-st4tq" deleted
[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-deploy-84cbfc56b6-w66pw   1/1     Running   0          53s   10.244.2.3   node02   <none>           <none>

可以看到删除Pod后又重新开起了一个Pod,因为pod是被控制器管理的(此处为deployment),当Pod数量不满足控制器的desired值得时候,会自动补全Pod(随机在集群内满足要求得node节点创建),来满足期望值,同样的如果过多也会关掉多余得Pod。

此时Pod得IP已经发生变化,所以如果需要被外部访问就需要提供一个固定得端点,就是接下来说得Service:

kubectl expose 通过service暴漏Pod

语法

Usage:
  kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
[--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
#--port=port 这里是服务端口
#--target-port 容器端口
#--type=type service类型,分为Custer IP ,NodePort,LoadBalancer,ExternalName,默认是Custer IP
后面会详细讲解

举例

#将name为nginx-deploy的deployment暴漏为80端口
[[email protected] ~]# kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
service/nginx-deploy exposed
#查看服务 services 简写为svc
[[email protected] ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   18h
nginx        ClusterIP   10.98.2.12   <none>        80/TCP    3s    35s

此时在节点访问svc的80端口来访问pod,即使Pod被删除后重建也可以访问

#Pod在node02上,次数使用node01来访问
[[email protected] ~]# curl -I 10.98.2.12
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 28 Mar 2019 02:48:13 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
Connection: keep-alive
ETag: "5c81dccc-264"
Accept-Ranges: bytes
#删除Pod后再次尝试
[[email protected] ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-84cbfc56b6-w66pw   1/1     Running   0          20m
[[email protected] ~]# kubectl delete pods nginx-deploy-84cbfc56b6-w66pw
pod "nginx-deploy-84cbfc56b6-w66pw" deleted
[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          6s    10.244.2.4   node02   <none>           <none>
[[email protected] ~]# curl -I 10.98.2.12
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 28 Mar 2019 02:49:35 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 08 Mar 2019 03:09:00 GMT
Connection: keep-alive
ETag: "5c81dccc-264"
Accept-Ranges: bytes

10.99.146.96这网段依然是集群内部的网段,只能被集群内部客户端访问,外部是无法通过service的ip进行访问。那么针对pod的客户端除了通过service ip访问还可以通过service的名称进行访问,但是前提是需要对service的名称能够进行解析。而解析时是依赖coredns服务的,而我们本地的dns指向并非coredns,如下:

[[email protected] ~]# curl -I nginx
curl: (6) Could not resolve host: nginx-deploy; 未知的错误
#查看节点的dns地址
[[email protected] ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 10.0.0.2

查看coredns的IP地址

[[email protected] ~]# kubectl get pods -n kube-system -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
coredns-78d4cf999f-6cb69         1/1     Running   0          18h   10.244.1.2   node01   <none>           <none>
coredns-78d4cf999f-tflpn         1/1     Running   0          18h   10.244.1.3   node01   <none>           <none>
etcd-master                      1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
kube-apiserver-master            1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
kube-controller-manager-master   1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
kube-flannel-ds-amd64-gtv85      1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
kube-flannel-ds-amd64-gwbql      1/1     Running   1          18h   10.0.0.12    node02   <none>           <none>
kube-flannel-ds-amd64-ml7nf      1/1     Running   0          18h   10.0.0.11    node01   <none>           <none>
kube-proxy-ch4vp                 1/1     Running   0          18h   10.0.0.11    node01   <none>           <none>
kube-proxy-cz2rf                 1/1     Running   1          18h   10.0.0.12    node02   <none>           <none>
kube-proxy-kdp7d                 1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
kube-scheduler-master            1/1     Running   0          18h   10.0.0.10    master   <none>           <none>
#-n指定名称空间

正常来说,也不会直接访问coredns的Pod的IP来直接访问,也是通过coredns的service进行访问

[[email protected] ~]# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP   18h

可以通过这个service ip:10.96.0.10进行解析上面的nginx服务。
提前准备dig命令 yum install -y bind-utils,这里需要使用完整的服务名称,否则可能由于dns搜索域问题导致失败

[[email protected] ~]# dig -t A nginx.default.svc.cluster.local @10.96.0.10

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t A nginx.default.svc.cluster.local @10.96.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58335
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;nginx.default.svc.cluster.local. IN    A

;; ANSWER SECTION:
nginx.default.svc.cluster.local. 5 IN   A       10.98.2.12

;; Query time: 1 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: 四 3月 28 11:02:11 CST 2019
;; MSG SIZE  rcvd: 96

尝试通过集群内pod客户端进行访问:

[[email protected] ~]# kubectl run client --image=busybox --replicas=1 -it --restart=Never
If you don't see a command prompt, try pressing enter.
/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
/ # wget -O - -q http://nginx:80
<!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>

此时name为nginx的service就为name为nginx-deploy的deployment提供了固定访问断电,无论deployment内Pod的增加删除,都不影响访问,使用命令来查看services的详细信息:

[[email protected] ~]# kubectl describe svc nginx
Name:              nginx
Namespace:         default
Labels:            run=nginx-deploy
Annotations:       <none>
Selector:          run=nginx-deploy
Type:              ClusterIP
IP:                10.98.2.12
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.2.4:80
Session Affinity:  None
Events:            <none>

#Endpoints: Pod的IP地址

无论Pod怎么增删,只要标Labels存在run=nginx-deploy的 就会被svc锁访问。

[[email protected] ~]# kubectl get pods --show-labels
NAME                            READY   STATUS    RESTARTS   AGE   LABELS
client                          1/1     Running   0          28m   run=client
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          51m   pod-template-hash=84cbfc56b6,run=nginx-deploy

run=nginx-deploy就是这个应用的标签,所以当pod的改变,并不会影响service的访问。

kubectl scale 动态伸缩应用副本

语法

Usage:
  kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

举例

#创建新的deployment
[[email protected] ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
kubectl 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.
deployment.apps/myapp created
[[email protected] ~]# kubectl get deployment
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
myapp          2/2     2            2           48s
nginx-deploy   1/1     1            1           3h58m
#查看pod
[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS      RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
client                          0/1     Completed   0          3h2m    10.244.2.5   node02   <none>           <none>
myapp-9b4987d5-98k45            1/1     Running     0          64s     10.244.1.4   node01   <none>           <none>
myapp-9b4987d5-ncpb7            1/1     Running     0          64s     10.244.2.6   node02   <none>           <none>
nginx-deploy-84cbfc56b6-tcssz   1/1     Running     0          3h26m   10.244.2.4   node02   <none>           <none>

此时使用客户端访问

/ # wget -O - -q 10.244.2.6/hostname.html
myapp-9b4987d5-ncpb7
/ # wget -O - -q 10.244.1.4/hostname.html
myapp-9b4987d5-98k45

为myapp创建service

[[email protected] ~]# kubectl expose deployment myapp --name=myapp --port=80
service/myapp exposed
[[email protected] ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   22h
myapp        ClusterIP   10.104.138.182   <none>        80/TCP    3s
nginx        ClusterIP   10.98.2.12       <none>        80/TCP    3h21m

所生成的myapp的地址为10.104.138.182,端口暴漏为80,协议默认为TCP
使用客户端访问myapp服务

Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # wget -O - -q myapp/hostname.html
myapp-9b4987d5-98k45
/ # wget -O - -q myapp/hostname.html
myapp-9b4987d5-98k45
/ # wget -O - -q myapp/hostname.html
myapp-9b4987d5-ncpb7
#hostname.html显示的是pod的名字,也是pod的hostname

扩展副本数量

[[email protected] ~]# kubectl scale --replicas=5 deployment myapp
deployment.extensions/myapp scaled
[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
client-f5cdb799f-pklmc          1/1     Running   0          5m46s   10.244.2.7   node02   <none>           <none>
myapp-9b4987d5-98k45            1/1     Running   0          8m44s   10.244.1.4   node01   <none>           <none>
myapp-9b4987d5-ck9bt            1/1     Running   0          9s      10.244.2.8   node02   <none>           <none>
myapp-9b4987d5-gfqjp            1/1     Running   0          9s      10.244.2.9   node02   <none>           <none>
myapp-9b4987d5-ncpb7            1/1     Running   0          8m44s   10.244.2.6   node02   <none>           <none>
myapp-9b4987d5-wrp7r            1/1     Running   0          9s      10.244.1.5   node01   <none>           <none>
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          3h33m   10.244.2.4   node02   <none>           <none>

此时使用客户端访问myapp服务

/ # for i in `seq 10000`;do wget -O - -q myapp/hostname.html;sleep 1;done
myapp-9b4987d5-wrp7r
myapp-9b4987d5-ncpb7
myapp-9b4987d5-wrp7r
myapp-9b4987d5-98k45
myapp-9b4987d5-wrp7r
myapp-9b4987d5-98k45
myapp-9b4987d5-gfqjp
myapp-9b4987d5-wrp7r
myapp-9b4987d5-gfqjp
myapp-9b4987d5-gfqjp
myapp-9b4987d5-ncpb7

再次修改副本数量为3

[[email protected] ~]# kubectl get pods -o wide
NAME                            READY   STATUS        RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
client-f5cdb799f-pklmc          1/1     Running       0          8m32s   10.244.2.7   node02   <none>           <none>
myapp-9b4987d5-98k45            1/1     Running       0          11m     10.244.1.4   node01   <none>           <none>
myapp-9b4987d5-ck9bt            0/1     Terminating   0          2m55s   10.244.2.8   node02   <none>           <none>
myapp-9b4987d5-gfqjp            0/1     Terminating   0          2m55s   10.244.2.9   node02   <none>           <none>
myapp-9b4987d5-ncpb7            1/1     Running       0          11m     10.244.2.6   node02   <none>           <none>
myapp-9b4987d5-wrp7r            1/1     Running       0          2m55s   10.244.1.5   node01   <none>           <none>
nginx-deploy-84cbfc56b6-tcssz   1/1     Running       0          3h36m   10.244.2.4   node02   <none>           <none>

#客户端查看
myapp-9b4987d5-98k45
myapp-9b4987d5-98k45
myapp-9b4987d5-wrp7r
myapp-9b4987d5-wrp7r
myapp-9b4987d5-wrp7r
myapp-9b4987d5-wrp7r
myapp-9b4987d5-ncpb7
myapp-9b4987d5-ncpb7
myapp-9b4987d5-98k45

此时服务就只会访问剩余的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]
举例

#升级myapp的版本为v2
[[email protected] ~]# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
deployment.extensions/myapp image updated

#查看更新过程
[[email protected] ~]# kubectl rollout status deployment myapp
Waiting for deployment "myapp" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "myapp" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
deployment "myapp" successfully rolled out

#此过程客户端过程
/ # for i in `seq 10000`;do wget -O - -q myapp;sleep 1;done
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

也可以使用kubectl describe 来查看Pod的详细信息

[[email protected] ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
client-f5cdb799f-pklmc          1/1     Running   0          21m
myapp-65899575cd-q9wt9          1/1     Running   0          4m56s
myapp-65899575cd-xhwmr          1/1     Running   0          4m58s
myapp-65899575cd-xnqd4          1/1     Running   0          4m58s
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          3h49m
[[email protected] ~]# kubectl describe pods myapp-65899575cd-xhwmr
Name:               myapp-65899575cd-xhwmr
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               node01/10.0.0.11
Start Time:         Thu, 28 Mar 2019 14:33:50 +0800
Labels:             pod-template-hash=65899575cd
                    run=myapp
Annotations:        <none>
Status:             Running
IP:                 10.244.1.10
Controlled By:      ReplicaSet/myapp-65899575cd
Containers:
  myapp:
    Container ID:   docker://5f9c63ce9f84fb6f863b44dd2eb9626f3eff2a599b48eb7000c84f5b70f6d2c9
    Image:          ikubernetes/myapp:v2
... ...

kubectl rollout 回滚

一种方法是直接修改image版本,另外一种是使用kubectl rollout

[[email protected] ~]# kubectl rollout -h
Manage the rollout of a resource.

Valid resource types include: 

  * deployments
  * daemonsets
  * statefulsets

Examples:
  # Rollback to the previous deployment
  kubectl rollout undo deployment/abc

  # Check the rollout status of a daemonset
  kubectl rollout status daemonset/foo

Available Commands:
  history     显示 rollout 历史
  pause       标记提供的 resource 为中止状态
  resume      继续一个停止的 resource
  status      显示 rollout 的状态
  undo        撤销上一次的 rollout

Usage:
  kubectl rollout SUBCOMMAND [options]

举例

[[email protected] ~]# kubectl rollout undo deployment myapp
deployment.extensions/myapp rolled back
[[email protected] ~]# kubectl get pods
NAME                            READY   STATUS              RESTARTS   AGE
client-f5cdb799f-pklmc          1/1     Running             0          24m
myapp-65899575cd-q9wt9          0/1     Terminating         0          8m15s
myapp-65899575cd-xhwmr          1/1     Terminating         0          8m17s
myapp-65899575cd-xnqd4          1/1     Running             0          8m17s
myapp-9b4987d5-47sjj            0/1     ContainerCreating   0          0s
myapp-9b4987d5-684q9            1/1     Running             0          2s
myapp-9b4987d5-djdr9            1/1     Running             0          3s
nginx-deploy-84cbfc56b6-tcssz   1/1     Running             0          3h52m

#客户端查看
/ # for i in `seq 10000`;do wget -O - -q myapp;sleep 1;done
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
#已经全部回退到上个版本

集群外部访问Service

[[email protected] ~]# kubectl edit svc myapp
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2019-03-28T06:20:00Z"
  labels:
    run: myapp
  name: myapp
  namespace: default
  resourceVersion: "36470"
  selfLink: /api/v1/namespaces/default/services/myapp
  uid: 8425bae4-5121-11e9-80a7-000c295ec349
spec:
  clusterIP: 10.104.138.182
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: myapp
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}                  

查看服务

[[email protected] ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        22h
myapp        NodePort    10.104.138.182   <none>        80:30298/TCP   38m
nginx        ClusterIP   10.98.2.12       <none>        80/TCP         4h

myapp服务80端口映射到节点的30298,且整个集群的30298节点都可以访问

另一节点访问

参考资料

https://www.cnblogs.com/linuxk
马永亮. Kubernetes进阶实战 (云计算与虚拟化技术丛书)

原文地址:https://www.cnblogs.com/wlbl/p/10652857.html

时间: 2024-11-09 00:29:08

Kubernetes之快速部署应用的相关文章

Shell脚本快速部署Kubernetes集群系统

本文紧跟上节所讲的手动部署Kubernetes管理Docker篇所写,本篇主要内容利用Shell脚本完成快速部署Kubernetes集群.上节博文看过的朋友也能感觉到部署过程相对比较简单,那么,出于简化工作流程,推进运维自动化角度来说,于是花了2/3天时间写这个部署Kubernetes脚本. 运维工作中,常常会遇到部署各种各样的服务,建议:常规部署都应该尽量使用脚本完成,一方面提高自身脚本编写能力,另一方面推进运维自动化. 详细部署说明文档:http://lizhenliang.blog.51c

使用kubeadm快速部署Kubernetes(v1.12.1)集群---来源:马哥教育马哥原创

使用kubeadm快速部署Kubernetes(v1.12.1)集群------来源:马哥教育马哥原创 Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 一.主机环境预设 1.测试环境说明 测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware.virtualbo

[转帖]centos7 使用kubeadm 快速部署 kubernetes 国内源

centos7 使用kubeadm 快速部署 kubernetes 国内源 https://www.cnblogs.com/qingfeng2010/p/10540832.html 前言 搭建kubernetes时看文档以及资料走了很多弯路,so 整理了最后成功安装的过程已做记录.网上的搭建文章总是少一些步骤,想本人这样的小白总是部署不成功(^_^). 准备两台或两台以上的虚拟机,系统centos7, 本文只准备了两个虚拟机(电脑风扇已转的飞起). 多注意红色加粗的 代码以及文字 ------q

《二》Kubernetes集群部署(master)-搭建单集群v1.0

搭建单集群平台的环境规划 多master环境规划 官方提供的三种部署方式 minikubeMinikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用.部署地址:https://kubernetes.io/docs/setup/minikube/ kubeadmKubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群.部署地址:https://kubernetes.

02:Kubernetes集群部署——平台环境规划

1.官方提供的三种部署方式: minikube: Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用. 部署地址:https://kubernetes.io/docs/setup/minikube/ kubeadm Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群. 部署地址:https://kubernetes.io/docs/reference

Kubernetes之kubeadm部署集群

目录 Kubernetes之kubeadm部署集群 1.部署前准备 2.集群初始化 Kubernetes之kubeadm部署集群 kubeadm是Kubernetes项目自带的集群构建工具,它负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,简单来讲,kubeadm是Kubernetes集群全生命周期的管理工具,可用于实现集群的部署.升级/降级及拆除. kubeadm集成了kubeadminit和kubeadmjoin等工具程序,其中kubeadminit用于集群的快速初始化,初始化

Kubernetes二进制线网部署(实例!!!)

本次类容 1.官方提供的三种部署方式2.Kubernetes 平台环境规划3.自签SSL证书4.Etcd数 据库集群部署5.Node安装Docker6.Flannel容 器集群网络部署7.部署Master组件8.部署Node组件9.部署一个测试示例10.部署Web UI (Dashboard )11.部署集群内部DNS解析服务(CoreDNS) 官方提供的三种部署方式 minikube Minikube是一个工具,可以在本地快速运行-一个单点的Kubernetes,仅用子尝试Kubemnetes

?搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机

本节所讲内容: 实战:搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机 LAMP架构:??? Linux+Apache+Mysql+PHP Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,共同组成了一个强大的Web应用程序平台. 一.安装需要的软件包 [[email protected] ~]# yum install httpd mysql-server mysql php php-mysql  -y ht

3分钟内快速部署MySQL5.6.35数据库实践

3分钟内快速部署MySQL5.6.35数据库实践 1.下载软件 wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz 2.解压移动 tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz  mkdir -p /application mv mysql-5.6.35-linux-glibc2.5-x86_64 /applicatio