Kubernetes(4)deployment管理pod

Kubernetes(4)deployment管理pod

kubernetes cluster由master和node组成

master节点是kubernetes cluster的大脑,它同时也是一个node
1.API Server(k8s.gcr.io/kube-apiserver):是kubernetes cluster的前端接口,各种客户端工具以及kubernetes其他组件可以通过它管理cluster的各种资源
2.k8s.gcr.io/kube-scheduler:负责决定将pod放在哪个node上运行
3.k8s.gcr.io/kube-controller-manager:负责管理cluster各种资源,保证资源处于预期状态
4.k8s.gcr.io/etcd:负责保存集群的配置信息和各种资源的状态信息,当数据发生变化的时候,etcd会快速通知kubernetes相关组件
5.pod网络:pod要能够相互通信,kubernetes cluster必须部署pod网络,flannel是其中一个可选的方案

node节点
1.kubelet
2.kube-proxy
3.pod网络

几乎所有的kubernetes组建本身也运行在pod里面
[k8s@server1 ~]$ kubectl get pod --all-namespaces -o wide
我们将通过实践深入学习kubernetes的各种特性,
作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用

kubernetes通过各种controller来管理pod的生命周期,
为了满足不同的业务场景,kubernetes开发了多种,
我们首先学习最常用的deployment

deployment管理pod

1.1运行deployment
# 部署两个副本的 nginx-deployment 容器的image为nginx:1.7.9
[k8s@server1 ~]$ kubectl run nginx-deployment --image=nginx:1.7.9 --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/nginx-deployment created
# 通过kubectl get deployment命令查看nginx-deployment的状态,显示输出的两个副本正常运行
[k8s@server1 ~]$ kubectl get deployment nginx-deployment 
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           2m31s

# 获取更详细的信息
[k8s@server1 ~]$ kubectl describe deployment nginx-deployment
...
# 重点看这里
# 这里告诉我们创建了一个 replicaset(容器副本) nginx-deployment-748ff87d9d
# Events是 deployment的日志,记录了replicaset的启动过程

Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  3m24s  deployment-controller  Scaled up replica set nginx-deployment-748ff87d9d to 2

...
[k8s@server1 ~]$ kubectl get replicaset
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-748ff87d9d   2         2         2       16m

[k8s@server1 ~]$ kubectl describe replicaset nginx-deployment-748ff87d9d
Name:           nginx-deployment-748ff87d9d
Namespace:      default
Selector:       pod-template-hash=748ff87d9d,run=nginx-deployment
Labels:         pod-template-hash=748ff87d9d
                run=nginx-deployment
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
# 指明replicaset是由Deployment/nginx-deployment创建的
Controlled By:  Deployment/nginx-deployment
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  pod-template-hash=748ff87d9d
           run=nginx-deployment
  Containers:                     
   nginx-deployment:
    Image:        nginx:1.7.9
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  16m   replicaset-controller  Created pod: nginx-deployment-748ff87d9d-bxc8r
  Normal  SuccessfulCreate  16m   replicaset-controller  Created pod: nginx-deployment-748ff87d9d-25k5w

# 两个副本处于running状态
[k8s@server1 ~]$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-748ff87d9d-25k5w   1/1     Running   0          17m
nginx-deployment-748ff87d9d-bxc8r   1/1     Running   0          17m

# 获取更详细的信息
[k8s@server1 ~]$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
httpd-app-5bc589d9f7-pns4q          1/1     Running   0          31m
httpd-app-5bc589d9f7-qdq4z          1/1     Running   0          31m
nginx-deployment-748ff87d9d-25k5w   1/1     Running   0          17m
nginx-deployment-748ff87d9d-bxc8r   1/1     Running   0          17m

[k8s@server1 ~]$ kubectl describe pod nginx-deployment-748ff87d9d-25k5w
Name:           nginx-deployment-748ff87d9d-25k5w
Namespace:      default
Priority:       0
Node:           server3/172.25.0.3
Start Time:     Sat, 24 Aug 2019 14:52:14 +0800
Labels:         pod-template-hash=748ff87d9d
                run=nginx-deployment
Annotations:    <none>
Status:         Running
IP:             10.244.2.3
Controlled By:  ReplicaSet/nginx-deployment-748ff87d9d
Containers:
  nginx-deployment:
    Container ID:   docker://1c3dcd7cabea668eb5e947a1fbf9bf5b8837220c52b32e75eced9e198b4c3149
    Image:          nginx:1.7.9
    Image ID:       docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 24 Aug 2019 14:54:44 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-zt8dv (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-zt8dv:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-zt8dv
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
# 记录了pod的启动过程,如果操作失败(eg:image不存在),也可以在这里查到原因
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  20m   default-scheduler  Successfully assigned default/nginx-deployment-748ff87d9d-25k5w to server3
  Normal  Pulling    20m   kubelet, server3   Pulling image "nginx:1.7.9"
  Normal  Pulled     18m   kubelet, server3   Successfully pulled image "nginx:1.7.9"
  Normal  Created    18m   kubelet, server3   Created container nginx-deployment
  Normal  Started    18m   kubelet, server3   Started container nginx-deployment

"""
总结一下这个过程
1.用户通过kubectl创建deployment
2.deployment创建replicaset
3.replicaset创建pod
"""


命令vs配置文件

# 删除之前的资源
kubectl delete deployment nginx-deployment
[k8s@server1 ~]$ kubectl get pod
No resources found in default namespace.
[k8s@server1 ~]$ kubectl get pod -o wide
No resources found.

1.1.2命令vs配置文件
Kubernetes支持两种创建资源的方式:
(1)用kubectl命令直接创建,比如“kubectl run nginx-deployment
--image=nginx:1.7.9--replicas=2”,在命令行中通过参数指定资源的属性

(2)通过配置文件和kubectl apply创建。要完成前面同样的工作,
可执行命令“kubectl apply -f nginx.yml”

# 注意不要加减空格!!!(如正确的话:vim 打开文件 关键字是蓝色的)
# 最近由于k8s 摒弃了apiVersion:extensions/v1beta1导致现在很多以前可以成功的操作而现在无法成功
[k8s@server1 ~]$ cat nginx.yml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 2
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9

修改排错
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 2
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9


[k8s@server1 ~]$ kubectl apply -f nginx.yml
error: error validating "nginx.yml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false
[k8s@server1 ~]$ kubectl apply -f nginx.yml --validate=false
The Deployment "nginx-deployment" is invalid: 
* spec.selector: Required value
* spec.template.metadata.labels: Invalid value: map[string]string{"app":"web_server"}: `selector` does not match template `labels`


[k8s@server1 ~]$ cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 2
 selector:
  matchLabels:
   app: web_server
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9


"""
apiVersion是当前配置格式的版本

kind是要创建的资源类型,这里是Deployment

metadata是该资源的元数据,name是必需的元数据项

spec部分是该Deployment的规格说明

replicas指明副本数量,默认为1

template定义Pod的模板,这是配置文件的重要部分

metadata定义Pod的元数据,至少要定义一个label。label的key和value可以任意指定

spec描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必需的

此nginx.yml是一个最简单的Deployment配置文件,后面我们学习Kubernetes各项功能时会逐步丰富这个文件
"""

[k8s@server1 ~]$ kubectl apply -f nginx.yml 
deployment.extensions/nginx-deployment created

[k8s@server1 ~]$ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           2m8s
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-cwvj5   1/1     Running   0          2m24s   10.244.2.4   server3   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Running   0          2m24s   10.244.1.4   server2   <none>           <none>

# 要删除资源:执行kubectl delete deployment nginx-deployment(命令行方式 )或者kubectl delete -f nginx.yml

伸缩

伸缩是指在线增加或减少Pod的副本数

Deployment nginx-deployment初始是两个副本
[k8s@server1 ~]$ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           2m8s
[k8s@server1 ~]$ kubectl get pod -o wide #查看pods所在的运行节点
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-cwvj5   1/1     Running   0          2m24s   10.244.2.4   server3   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Running   0          2m24s   10.244.1.4   server2   <none>           <none>

server2和server2上各自跑了一个副本,现在修改nginx.yml文件,将副本改成5个
"""
Replication Controller(RC)是Kubernetes中的另一个核心概念,应用托管在Kubernetes之后,Kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间Kubernetes中都有指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚动升级、升级回滚等
"""
[k8s@server1 ~]$ cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 5
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9

再次执行kubectl apply


[k8s@server1 ~]$ kubectl apply -f nginx.yml 
deployment.extensions/nginx-deployment configured
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-ckj64   1/1     Running   0          11s    10.244.2.5   server3   <none>           <none>
nginx-deployment-5d76d6897d-cwvj5   1/1     Running   0          6m5s   10.244.2.4   server3   <none>           <none>
nginx-deployment-5d76d6897d-d8fx2   1/1     Running   0          11s    10.244.1.5   server2   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Running   0          6m5s   10.244.1.4   server2   <none>           <none>
nginx-deployment-5d76d6897d-rnb9s   1/1     Running   0          11s    10.244.1.6   server2   <none>           <none>

# 三个新副本被创建并调度到server2和server3上


"""
出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使用,可以执行如下命令
kubectl taint node k8s-master node-role.kubernetes.io/master-
如果要恢复Master Only状态,执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master="":NoSchedul
"""

接下来修改配置文件,将副本数减少为3个,重新执行kubectl apply
# 注意的是:关闭和启动是需要时间的
[k8s@server1 ~]$ cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 3
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9
[k8s@server1 ~]$ kubectl apply -f nginx.yml 
deployment.extensions/nginx-deployment configured
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-ckj64   1/1     Running       0          2m39s   10.244.2.5   server3   <none>           <none>
nginx-deployment-5d76d6897d-cwvj5   1/1     Running       0          8m33s   10.244.2.4   server3   <none>           <none>
nginx-deployment-5d76d6897d-d8fx2   0/1     Terminating   0          2m39s   10.244.1.5   server2   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Running       0          8m33s   10.244.1.4   server2   <none>           <none>
nginx-deployment-5d76d6897d-rnb9s   0/1     Terminating   0          2m39s   10.244.1.6   server2   <none>           <none>
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-ckj64   1/1     Running   0          2m56s   10.244.2.5   server3   <none>           <none>
nginx-deployment-5d76d6897d-cwvj5   1/1     Running   0          8m50s   10.244.2.4   server3   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Running   0          8m50s   10.244.1.4   server2   <none>           <none>




Failover情况

pod 和 deployment 的关系是什么 ?
1.创建pod的时候一定会创建 deployment 么 ?
2.创建deployment的时候一定会创建 pod么?
pod是可以单独创建并进行生命周期管理的
单独创建pod的时候就不会有deployment出现,但是创建deployment的时候一定会创建pod,因为pod是一个基础的单位。
任何的控制器单位的具体实现必须落到pod去实现

下面我们模拟k8s-node2(server2)故障,关闭该节点
[root@server2 ~]# halt -h
Connection to 172.25.0.2 closed by remote host.
等待一段时间,Kubernetes会检查到k8s-node2不可用,
将k8s-node2上的Pod标记为Unknown状态,并在k8s-node1上
新创建两个Pod,维持总副本数为3

[k8s@server1 ~]$ kubectl get node
NAME      STATUS     ROLES    AGE     VERSION
server1   Ready      master   5h7m    v1.15.3
server2   NotReady   <none>   4h38m   v1.15.3
server3   Ready      <none>   4h37m   v1.15.3


# 下面的过程会漫长一些 #一定要等待一定的时间的
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-4mwqw   1/1     Running       0          2m57s   10.244.2.10   server3   <none>           <none>
nginx-deployment-5d76d6897d-ckj64   1/1     Running       1          22m     10.244.2.6    server3   <none>           <none>
nginx-deployment-5d76d6897d-cwvj5   1/1     Running       1          28m     10.244.2.7    server3   <none>           <none>
nginx-deployment-5d76d6897d-md8x5   1/1     Terminating   1          28m     10.244.1.7    server2   <none>           <none>
nginx-deployment-5d76d6897d-n6t9x   1/1     Running       0          2m57s   10.244.2.8    server3   <none>           <none>
nginx-deployment-5d76d6897d-ps4xb   1/1     Terminating   0          8m58s   10.244.1.9    server2   <none>           <none>
nginx-deployment-5d76d6897d-qhj85   1/1     Running       0          2m57s   10.244.2.9    server3   <none>           <none>
nginx-deployment-5d76d6897d-tm4wr   1/1     Terminating   0          8m58s   10.244.1.8    server2   <none>           <none>

"""
Pod的生命周期过程包括:通过模板进行定义,然后分配到一个Node上运行,就不会离开这个Node,直到被删除。当某个Pod失败,首先会被Kubernetes清理掉,之后ReplicationController将会在其它机器上(或本机)重建Pod,重建之后Pod的ID发生了变化,那将会是一个新的Pod。所以,Kubernetes中Pod的迁移,实际指的是在新Node上重建Pod
"""

#当k8s-node2恢复后,Unknown的Pod会被删除,不过已经运行的Pod不会重新调度回k8s-node2
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-4mwqw   1/1     Running   0          3m58s   10.244.2.10   server3   <none>           <none>
nginx-deployment-5d76d6897d-ckj64   1/1     Running   1          23m     10.244.2.6    server3   <none>           <none>
nginx-deployment-5d76d6897d-cwvj5   1/1     Running   1          29m     10.244.2.7    server3   <none>           <none>
nginx-deployment-5d76d6897d-n6t9x   1/1     Running   0          3m58s   10.244.2.8    server3   <none>           <none>
nginx-deployment-5d76d6897d-qhj85   1/1     Running   0          3m58s   10.244.2.9    server3   <none>           <none>


# 再次注意:删除和创建是需要时间的!!!
# 一执行完就立马去看 可能结果不会很快展现的
# 删除nginx-deployment
[k8s@server1 ~]$ kubectl delete deployment nginx-deployment 
deployment.extensions "nginx-deployment" deleted
[k8s@server1 ~]$ kubectl get pod -o wide
No resources found.


用label控制Pod的位置

RC与Pod的关联是通过Label来实现的。Label机制是Kubernetes中的一个重要设计,通过Label进行对象的弱关联,可以灵活地进行分类和选择

默认配置下,Scheduler会将Pod调度到所有可用的Node。不过有些情况我们希望将Pod部署到指定的Node,比如将有大量磁盘I/O的Pod部署到配置了SSD的Node;或者Pod需要GPU,需要运行在配置了GPU的节点上
Kubernetes是通过label来实现这个功能的
label是key-value对,各种资源都可以设置label,灵活添加各种自定义属性

比如执行如下命令标注k8s-node1是配置了SSD的节点

[k8s@server1 ~]$ kubectl get node
NAME      STATUS   ROLES    AGE     VERSION
server1   Ready    master   5h32m   v1.15.3
server2   Ready    <none>   5h2m    v1.15.3
server3   Ready    <none>   5h1m    v1.15.3
[k8s@server1 ~]$ kubectl label node server2 disktype=ssd
node/server2 labeled
# 然后通过kubectl get node --show-labels查看节点的label
[k8s@server1 ~]$ kubectl get node --show-labels
NAME      STATUS   ROLES    AGE     VERSION   LABELS
server1   Ready    master   5h32m   v1.15.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
server2   Ready    <none>   5h2m    v1.15.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=server2,kubernetes.io/os=linux
server3   Ready    <none>   5h1m    v1.15.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server3,kubernetes.io/os=linux

# disktype=ssd已经成功添加到k8s-node1,除了disktype,Node还有几个Kubernetes自己维护的labe

有了disktype这个自定义label,接下来就可以指定将Pod部署到k8s-node1(server2)。编辑nginx.yml
# 在Pod模板的spec里通过nodeSelector指定将此Pod部署到具有label disktype=ssd的Node上

[k8s@server1 ~]$ cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 6
 selector:
  matchLabels:
   app: web_server
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9
   nodeSelector:
     disktype: ssd

# 部署Deployment并查看Pod的运行节点
[k8s@server1 ~]$ kubectl apply -f nginx.yml 
deployment.extensions/nginx-deployment created
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-56bf7c59b8-4nvdm   1/1     Running   0          8s    10.244.1.12   server2   <none>           <none>
nginx-deployment-56bf7c59b8-5gxr4   1/1     Running   0          8s    10.244.1.15   server2   <none>           <none>
nginx-deployment-56bf7c59b8-d2sp6   1/1     Running   0          8s    10.244.1.10   server2   <none>           <none>
nginx-deployment-56bf7c59b8-hct8s   1/1     Running   0          8s    10.244.1.14   server2   <none>           <none>
nginx-deployment-56bf7c59b8-nmlmx   1/1     Running   0          8s    10.244.1.11   server2   <none>           <none>
nginx-deployment-56bf7c59b8-t4b2m   1/1     Running   0          8s    10.244.1.13   server2   <none>           <none>
# 全部6个副本都运行在server2上,符合我们的预期

# 要删除 label disktype,执行如下命令
# 不过此时Pod并不会重新部署
[k8s@server1 ~]$ kubectl label node server2 disktype-
node/server2 labeled
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-56bf7c59b8-4nvdm   1/1     Running   0          15m   10.244.1.12   server2   <none>           <none>
nginx-deployment-56bf7c59b8-5gxr4   1/1     Running   0          15m   10.244.1.15   server2   <none>           <none>
nginx-deployment-56bf7c59b8-d2sp6   1/1     Running   0          15m   10.244.1.10   server2   <none>           <none>
nginx-deployment-56bf7c59b8-hct8s   1/1     Running   0          15m   10.244.1.14   server2   <none>           <none>
nginx-deployment-56bf7c59b8-nmlmx   1/1     Running   0          15m   10.244.1.11   server2   <none>           <none>
nginx-deployment-56bf7c59b8-t4b2m   1/1     Running   0          15m   10.244.1.13   server2   <none>           <none>

# 除非在nginx.yml中删除nodeSelector设置,然后通过kubectl apply重新部署
[k8s@server1 ~]$ cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 6
 selector:
  matchLabels:
   app: web_server
 template:
  metadata:
   labels:
    app: web_server
  spec:
   containers:
   - name: nginx
     image: nginx:1.7.9

#删除是需要一定的时间的

[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS              RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5b5dfcc76-66gpx    1/1     Running             0          3s    10.244.1.10   server3   <none>           <none>
nginx-deployment-5b5dfcc76-6jl6j    1/1     Running             0          2s    10.244.1.12   server3   <none>           <none>
nginx-deployment-5b5dfcc76-98j5b    1/1     Running             0          3s    10.244.1.11   server3   <none>           <none>
nginx-deployment-5b5dfcc76-9j8x5    0/1     ContainerCreating   0          1s    <none>        server2   <none>           <none>
nginx-deployment-5b5dfcc76-rbssj    0/1     ContainerCreating   0          1s    <none>        server2   <none>           <none>
nginx-deployment-5b5dfcc76-wwd6w    1/1     Running             0          3s    10.244.2.13   server2   <none>           <none>
nginx-deployment-7bb8d48dd6-2l4ms   0/1     Terminating         0          70s   10.244.2.9    server2   <none>           <none>
nginx-deployment-7bb8d48dd6-d77l7   1/1     Running             0          70s   10.244.2.7    server2   <none>           <none>
nginx-deployment-7bb8d48dd6-fnm4t   1/1     Terminating         0          70s   10.244.2.12   server2   <none>           <none>
nginx-deployment-7bb8d48dd6-gdcq8   0/1     Terminating         0          70s   10.244.2.10   server2   <none>           <none>
nginx-deployment-7bb8d48dd6-jbpwv   1/1     Terminating         0          70s   10.244.2.8    server2   <none>           <none>
nginx-deployment-7bb8d48dd6-tm5tc   1/1     Terminating         0          70s   10.244.2.11   server2   <none>           <none>

[k8s@server1 ~]$ kubectl apply -f nginx.yml 
deployment.extensions/nginx-deployment configured
[k8s@server1 ~]$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5d76d6897d-7xxxh   1/1     Running   0          9s    10.244.1.16   server2   <none>           <none>
nginx-deployment-5d76d6897d-mwp6d   1/1     Running   0          7s    10.244.2.14   server3   <none>           <none>
nginx-deployment-5d76d6897d-sfkbt   1/1     Running   0          8s    10.244.2.12   server3   <none>           <none>
nginx-deployment-5d76d6897d-tbmtt   1/1     Running   0          9s    10.244.2.11   server3   <none>           <none>
nginx-deployment-5d76d6897d-vmn28   1/1     Running   0          8s    10.244.2.13   server3   <none>           <none>
nginx-deployment-5d76d6897d-whdbv   1/1     Running   0          6s    10.244.1.17   server2   <none>           <none>
# Kubernetes会删除之前的Pod并调度和运行新的Pod



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值