|NO.Z.00133|——————————|CloudNative|——|KuberNetes&资源调度.V03|——|deployment.v01|创建|

一、Deployment:
### --- Deployment概念:

~~~     用于部署无状态的服务,这个最常用的控制器。
~~~     一般用于管理维护企业内部无状态的微服务,
~~~     比如configserver、zuul、springboot。
~~~     他可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。
二、手动创建一个deployment
### --- 创建一个Deployment:手动创建
~~~     # 手动通过命令的方式创建一个deployment

[root@k8s-master01 ~]# kubectl create deployment nginx --image=nginx:1.15.2
deployment.apps/nginx created
~~~     # 查看创建的deployment

[root@k8s-master01 ~]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           39s 
~~~     # 导出deployment的配置文件

[root@k8s-master01 ~]# kubectl get deployment nginx -o yaml > nginx-deploy.yaml     //到处这个yaml文件
[root@k8s-master01 ~]# ls
k8s  nginx-deploy.yaml  README
三、使用配置文件创建一个deployment
### --- 创建deployment的配置文件
~~~     # 通过文件去创建一个deployment

[root@k8s-master01 ~]# vim nginx-deploy.yaml 
spec:
  progressDeadlineSeconds: 600
  replicas: 2                                                                       //副本数改为2
  revisionHistoryLimit: 10
### --- 创建deployment并查看创建的pod

~~~     # 重新触发容器
[root@k8s-master01 ~]# kubectl replace -f nginx-deploy.yaml                         //通过文件去管理deployment
deployment.apps/nginx replaced
~~~     # 查看创建的pod

[root@k8s-master01 ~]# kubectl get po                                               //因为我们没有去指定它的namespace,所以在default命名空间下创建的deployment
NAME                     READY   STATUS    RESTARTS   AGE
nginx-66bbc9fdc5-7lgnx   1/1     Running   0          6m44s
nginx-66bbc9fdc5-l9dkp   1/1     Running   0          67s
### --- 使用edit管理创建的deployment

~~~     # 可以使用edit去管理它
[root@k8s-master01 ~]# kubectl edit deploy nginx                    // edit退出操作,按住shift键不放,按两下ZZ即可。
spec:
  progressDeadlineSeconds: 600
  replicas: 1                                                       // 把它的副本改为1,会删除掉一个容器
~~~     # 查看副本数量是否更新为1

[root@k8s-master01 ~]# kubectl get po
NAME                     READY   STATUS        RESTARTS   AGE
nginx-66bbc9fdc5-7lgnx   1/1     Running       0          8m21s
nginx-66bbc9fdc5-l9dkp   0/1     Terminating   0          2m44s                     //可以查看到有一个容器在执行Terminating
[root@k8s-master01 ~]# kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-66bbc9fdc5-7lgnx   1/1     Running   0          9m7s                          //消失说明删除完成 

四、deployment参数解析

### --- deployment参数解析
~~~     NAME: Deployment名称;这个deployment也是有namespace隔离的,同一个namespace下不能使用相同的deployment名称的。
~~~     READY:Pod的状态,已经Ready的个数;
~~~     UP-TO-DATE:已经达到期望状态的被更新的副本数
~~~     AVAILABLE:已经可以用的副本数
~~~     AGE:显示应用程序运行的时间
~~~     CONTAINERS:容器名称
~~~     IMAGES:容器的镜像
~~~     SELECTOR:管理的Pod的标签

[root@k8s-master01 ~]#  kubectl get deploy -owide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   2/2     2            2           10m   nginx        nginx:1.15.2   app=nginx

五、deployment.yaml文件说明:

### --- 查看创建的deployment配置文件
~~~     deployment配置文件说明

[root@k8s-master01 ~]# cat nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2020-09-19T02:41:11Z"
  generation: 1
  labels:                                                                           //annotations的labels是deployment本身的labels,这个是匹配RS的
    app: nginx
  name: nginx
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 2                                                                       #副本数
  revisionHistoryLimit: 10                                                          # 历史记录保留的个数
  selector:
    matchLabels:                                                                    //selector的labels,和上面annotations的labels的一定要写成一样的,不然就不能管理你的Pod;这个是匹配RS的这个Pod的,而且这两个参数在新版本的k8s中,一旦创建时不允许改的。
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
### --- pod对应label及参数说明
~~~     # 查看创建的nginx所在的label

[root@k8s-master01 ~]# kubectl get deploy --show-labels
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   LABELS
nginx   1/1     1            1           16m   app=nginx 
~~~     # 以下是pod的spec,是兼容上面podspec的, 

    spec:
      containers:
      - image: nginx:1.15.2
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
### --- deployment部署说明
~~~     # 部署完之后它会把这个Pod部署在哪个节点呢?
~~~     可以看到是master01,并不是我们在这个master01创建了这个deployment,
~~~     而是把这个pod创建在master01节点上

[root@k8s-master01 ~]# kubectl get po -owide
NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
nginx-66bbc9fdc5-7lgnx   1/1     Running   0          142m   172.25.244.206   k8s-master01   <none>           <none>
~~~     # deployment副本数量设置为2

spec:
  progressDeadlineSeconds: 600
  replicas: 2 
~~~     # 查看pod创连接过
~~~     可以看到他在master02节点创建了,这个创建是无所谓你是在哪个节点上面的,只要你有这个文件,
~~~     只要有这个文件,你的kubectl在哪个位置都是可以的,只要和vip的端口地址是通的,
~~~     他就可以去操作我们的集群,
~~~     它创建完之后呢?会根据特定的算法最优的去选择部署在哪个节点上面。

[root@k8s-master01 ~]# kubectl get po -owide
NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
nginx-66bbc9fdc5-7lgnx   1/1     Running   0          145m   172.25.244.206   k8s-master01   <none>           <none>
nginx-66bbc9fdc5-v6687   1/1     Running   0          23s    172.25.92.71     k8s-master02   <none> 
[root@k8s-master01 ~]# ls ~/.kube/config 
/root/.kube/config

 

 

 

 

 

 

 

 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
< 2025年2月 >
26 27 28 29 30 31 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 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示