• kubernetes-deployment运用部署


    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>
  • 相关阅读:
    cocos2d JS-(JavaScript) 冒泡排序
    JavaScript实现字符串逆置的几种方法
    JavaScript 常用数组函数方法专题
    Cocos Creator 资源加载(笔记)
    cocos中FPS数值的含义
    Cocos Creator cc.Event点击触摸事件详解
    Cocos Creator 鼠标事件
    Cocos Creator 触摸点击事件
    Cocos Creator 键盘监听事件
    JavaScript 基础数组循环和迭代的几种方法
  • 原文地址:https://www.cnblogs.com/cy888888/p/13299980.html
Copyright © 2020-2023  润新知