kubernetes-deployment运用部署

deployment

         Deployment是新一代用于Pod管理的对象,与Replication Controller相比,它提供了更加完善的功能,使用起来更加简单方便。

      kubernetes开发了deployment,replicaset、daemonset、statefuleset、job等多种controller。

查看状态

[root@master ~]# kubectl describe deployments.apps nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Tue, 14 Jul 2020 14:56:39 +0800
Labels:                 run=nginx-deployment
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx-deployment
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx-deployment
  Containers:
   nginx-deployment:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-6c94df7599 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m15s  deployment-controller  Scaled up replica set nginx-deployment-6c94df7599 to 2

查看详细信息

[root@master ~]# kubectl describe replicasets.apps nginx-deployment-6c94df7599
Name:           nginx-deployment-6c94df7599
Namespace:      default
Selector:       pod-template-hash=6c94df7599,run=nginx-deployment
Labels:         pod-template-hash=6c94df7599
                run=nginx-deployment
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
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=6c94df7599
           run=nginx-deployment
  Containers:
   nginx-deployment:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  5m1s  replicaset-controller  Created pod: nginx-deployment-6c94df7599-bm8pd
  Normal  SuccessfulCreate  5m1s  replicaset-controller  Created pod: nginx-deployment-6c94df7599-pwpph

查看更加详细的信息

[root@master ~]# kubectl describe pod nginx-deployment-6c94df7599-bm8pd
Name:         nginx-deployment-6c94df7599-bm8pd
Namespace:    default
Priority:     0
Node:         node2/192.168.172.136
Start Time:   Tue, 14 Jul 2020 14:57:00 +0800
Labels:       pod-template-hash=6c94df7599
              run=nginx-deployment
Annotations:  <none>
Status:       Running
IP:           10.244.2.7
IPs:
  IP:           10.244.2.7
Controlled By:  ReplicaSet/nginx-deployment-6c94df7599
Containers:
  nginx-deployment:
    Container ID:   docker://eb72829dc2fcf1631469f33248c9fc861e0c9093c4142cb2c8e340b3612d7887
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 14 Jul 2020 14:57:17 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ptz8b (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-ptz8b:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-ptz8b
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  7m20s  default-scheduler  Successfully assigned default/nginx-deployment-6c94df7599-bm8pd to node2
  Normal  Pulling    7m19s  kubelet, node2     Pulling image "nginx"
  Normal  Pulled     7m2s   kubelet, node2     Successfully pulled image "nginx"
  Normal  Created    7m2s   kubelet, node2     Created container nginx-deployment
  Normal  Started    7m2s   kubelet, node2     Started container nginx-deployment

events记录了pod的启动过程,如果操作失败,也能在这里查看到原因;

过程:

 1.用户通过kubectl创建deployment。

 2.deployment创建replicaset。

 3.replicaset创建pod。

k8s创建资源的两种方式:

1.直接用命令创建。

2.通过配置文件和kubectl apply创建,要完成前面同样的工作,可以执行命令。

两种方式的区别

基于命令的方式:

1.简单直观快捷,上手快。

2.适合临时测试和实验

基于配置文件方式:

1.配置文件描述了what,即应用最终要达到的状态。

2.配置文件提供了创建资源的模板,能够重复部署。

3.可以像管理代码一样管理部署。

4.适合正式的、跨环境的、规模化部署。

5.这种方式要求熟悉配置文件的语法、有一定难度。
以下为两种方式:

1.命令

[root@master ~]# kubectl create deployment test --image=nginx --dry-run -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: test
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
kubectl   create   deployment test --image=nginx  --dry-run  -o  yaml  > nginx1.yml            ##配置文件内容较多 语句也比较多 也可以用这个方式获得模板
创键一个deployment 名字叫dis 镜像是nginx 现在不执行 保存的格式为yaml
保存到nginx.yml这个文件里

2.配置文件:

[root@master ~]# cat nginx1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test
  name: test
spec:
  replicas: 2        ##收缩副本的话,调整这里就可以了,然后重新执行kubectl apply -f nginx1.yml
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx

[root@master ~]# kubectl apply -f nginx1.yml
deployment.apps/test created


查看

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-jz2mw               1/1     Running   1          45h    10.244.1.7    node1   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          45h    10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          60m    10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-pwpph   1/1     Running   0          60m    10.244.1.9    node1   <none>           <none>
test-57d9864f4f-k62hd               1/1     Running   0          5m8s   10.244.1.10   node1   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running   0          5m8s   10.244.2.8    node2   <none>           <none>

 

 出于安全考虑,默认配置下kubernetes不会pod调度到master节点,如果希望master也当做node节点使用、

执行

kubectl taint node master  node-role.kubernetes.io/master-

恢复master不充作节点,执行如下命令:

kubectl taint node master  node-role.kubernetes.io/master="":NoSchedule

K8s的故障转移:

关掉node1

查看
[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-jz2mw               1/1     Terminating   1          46h   10.244.1.7    node1   <none>           <none>
caoyi-c6c994756-q4r44               1/1     Running       0          12m   10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running       1          46h   10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running       0          89m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-pwpph   1/1     Terminating   0          89m   10.244.1.9    node1   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running       0          12m   10.244.2.9    node2   <none>           <none>
test-57d9864f4f-c8nxl               1/1     Running       0          12m   10.244.2.11   node2   <none>           <none>
test-57d9864f4f-k62hd               1/1     Terminating   0          34m   10.244.1.10   node1   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running       0          34m   10.244.2.8    node2   <none>           <none>

再开启node1

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          18m   10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h   10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          95m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          18m   10.244.2.9    node2   <none>           <none>
test-57d9864f4f-c8nxl               1/1     Running   0          18m   10.244.2.11   node2   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running   0          40m   10.244.2.8    node2   <none>           <none>

可以看到node1的节点的pod已经停止了
当node1再次上线后停掉的pod会被删除,不会再次回到node1上了

用标签控制pod所在的节点:

添加标签:

[root@master ~]# kubectl label nodes  node1   test=caoyi
node/node1 labeled

查看:

[root@master ~]# kubectl get   nodes  --show-labels 
NAME     STATUS   ROLES    AGE     VERSION   LABELS
master   Ready    master   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1    Ready    <none>   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,test=caoyi
node2    Ready    <none>   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux

将标签添加到nginx1.yml文件里控制pod所在节点:

[root@master ~]# cat nginx1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test
  name: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx
      nodeSelector:
        test: caoyi
[root@master ~]# kubectl  apply -f  nginx1.yml
deployment.apps/test configured

查看pod所在节点 是否所有pod在node1上:

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          26m    10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h    10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          104m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          26m    10.244.2.9    node2   <none>           <none>
test-6f9575d5ff-c2bp7               1/1     Running   0          21s    10.244.1.12   node1   <none>           <none>
test-6f9575d5ff-gplfk               1/1     Running   0          41s    10.244.1.11   node1   <none>           <none>

把nginx1.yml里指定标签的语句去掉pod就会在node1和node2上了

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          34m     10.244.2.12   node2    <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h     10.244.2.6    node2    <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          112m    10.244.2.7    node2    <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          34m     10.244.2.9    node2    <none>           <none>
test-57d9864f4f-776c5               1/1     Running   0          17s     10.244.2.13   node2    <none>           <none>
test-57d9864f4f-gf97m               1/1     Running   0          5m35s   10.244.0.5    master   <none>           <none>
test-57d9864f4f-l2jzm               1/1     Running   0          5m52s   10.244.1.13   node1    <none>           <none>