k8s 的 Deployment控制器

这篇具有很好参考价值的文章主要介绍了k8s 的 Deployment控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. RS与RC与Deployment关联

  • RC(Replication Controller)主要作用就是用来确保容器应用的副本数始终保持在用户定义的副本数。即如果有容器异常退出,会自动创建新的pod来替代;而如果异常多出来的容器也会自动回收。
  • K8S官方建议使用RS(ReplicaSet)替代RC(Replication Controller)进行部署,RS跟RC没有本质的不同,只是名字不一样,并且RS支持集合式的selector.

2. 实例:

  • 使用deployment来创建pod
vim  nginx-rs.yaml

apiVersion: apps/v1    #指定要使用的 Kubernetes API 版本,这里使用的是 apps/v1
kind: ReplicaSet   #指定要创建的对象类型,这里是 ReplicaSet
metadata:          #元数据信息,包括对象的名称、标签等信息
  name: my-nginx   #对象的名称,这里是 my-nginx
spec:              #指定 ReplicaSet 对象的配置信息
  replicas: 3      #指定需要运行的副本数,这里是 3
  selector:        #指定选择器,用于选择需要管理的 Pod
    matchLabels:   #匹配标签,这里是 app: nginx-www,表示选择具有 app=nginx-www 标签的Pod
      app: nginx-www
  template:        #指定 Pod 的模板,用于创建和管理 Pod
    metadata:      #Pod 元数据信息,包括标签等信息
      labels:      #Pod 标签,这里是 app: nginx-www
        app: nginx-www
    spec:         #Pod 配置信息
      containers: #容器列表,这里只有一个 Nginx 容器
      - name: my-nginx  #容器名称,这里是 my-nginx
        image: nginx:latest  #容器镜像名称,这里是 nginx:latest,表示使用最新版本的 Nginx 镜像
        imagePullPolicy: IfNotPresent  #本地不存在镜像时才尝试拉取新镜像
        ports:  #容器对外暴露的端口号,这里是 80,表示将容器的 80 端口映射到集群中的一个随机端口上。
        - containerPort: 80

2.1. 创建RS

kubectl apply -f nginx-rs.yaml
----过几分钟查看一下pod状态:
kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
my-nginx-5pbm6   1/1     Running   0          5m47s
my-nginx-9q8hh   1/1     Running   0          5m47s
my-nginx-cp6st   1/1     Running   0          5m47s
--查看RS my-nginx的状态:
[root@master1 ~]# kubectl get rs my-nginx
NAME       DESIRED   CURRENT   READY   AGE
my-nginx   3         3         3       8m19s

3. RS与Deployment的关联

k8s 的 Deployment控制器

3.1. Deployment

  • Deployment为pod和RS提供了一个声明式定义(declarative)方法,用来替代以前的RC来方便的管理应用。典型的应用场景包括:
    1. 定义Deployment来创建pod和RS
    2. 滚动升级和回滚应用
    3. 扩容和缩容
    4. 暂停和继续Deployment

  • 使用Deployment部署一个简单的Nginx应用:文章来源地址https://www.toymoban.com/news/detail-490284.html

 vim  nginx-deployment.yaml
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: my-nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

  • 创建deployment:
kubectl apply -f nginx-deployment.yaml --record
--record 参数可以记录命令,我们可以很方便的查看每次 revision的变化。
  • 查看状态:
[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           3m52s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   3         3         3       3m59s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          4m4s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          4m4s
nginx-deployment-86c547cdd4-n8t9g   1/1     Running   0          4m4s

3.2. 扩容

[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled

[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           6m14s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   5         5         5       6m23s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-flzxw   1/1     Running   0          20s
nginx-deployment-86c547cdd4-n8t9g   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-t5hzg   1/1     Running   0          20s

3.2.1. 如果集群支持HPA的话,还可以为Deployment设置自动扩展

kubectl  autoscale  deployment nginx-deployment --min=5  --max=10  --cpu-percent=80

3.3. 缩容

[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled

[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           7m32s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   2         2         2       7m37s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          7m40s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          7m40s

3.4. 更新镜像

kubectl set image deployment/nginx-deployment my-nginx=nginx:1.9.1

--查看是否更新成功
[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6867c57f58-hdhqc   1/1     Running   0          9m29s
nginx-deployment-6867c57f58-z2smx   1/1     Running   0          8m8s
[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-hdhqc  -- nginx -v
nginx version: nginx/1.9.1

3.5. 回滚

回滚到上一个版本
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.apps/nginx-deployment rolled back

查看回滚状态
[root@master1 ~]# kubectl rollout status deployment nginx-deployment
deployment "nginx-deployment" successfully rolled out

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-52llc   1/1     Running   0          15s
nginx-deployment-86c547cdd4-jv25d   1/1     Running   0          9s
[root@master1 ~]# kubectl exec nginx-deployment-86c547cdd4-52llc -- nginx -v
nginx version: nginx/1.25.1


3.6. 回退

查看回滚历史版本
[root@master1 ~]# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=nginx-deployment.yaml --record=true
3         kubectl apply --filename=nginx-deployment.yaml --record=true

回退到版本2
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment  --to-revision=2
deployment.apps/nginx-deployment rolled back

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6867c57f58-g8bw2   1/1     Running   0          19s
nginx-deployment-6867c57f58-hbwng   1/1     Running   0          16s

[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-g8bw2 -- nginx -v
nginx version: nginx/1.9.1

到了这里,关于k8s 的 Deployment控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

    基本了解: Deployment是最常用的K8s工作负载控制器(Workload Controllers),实际项目部署调试中必用资源之一,所以必须要熟练掌握deploy资源的使用。 它是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。 其他控制器还有DaemonSet、StatefulSet等,不同控制器针对不同的需

    2024年02月03日
    浏览(56)
  • K8s(Kubernetes)学习(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    什么是 Controller 以及作用 常见的 Controller 控制器 Controller 如何管理 Pod Deployment 基本操作与应用 通过控制器实现 Pod 升级回滚和弹性伸缩 StatefulSet 基本操作与应用 Daemonset 基本操作与应用 Job 基本操作与应用 Controller 无法解决问题 1 Controller 控制器 官网: http://kubernetes.p2hp.com/

    2024年02月09日
    浏览(56)
  • 18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(72)
  • K8s控制器

    kubectl create tabtab 下面的所有都可以创建模板文件 --dry-run=client -o yaml 查询资源对象的帮助信息         kubectl explain pod.spec.restartPolicy            #这里对上下层级关系需要清楚 获取Pod模板         kubectl run mypod --image=xxxx --dry-run=client -o yaml 获取Deployment         ku

    2024年02月03日
    浏览(69)
  • k8s 控制器

    Kubernetes(K8S)是一种开源的容器编排平台,它可以自动化地管理容器化应用程序的部署、扩展和运行。K8S中的控制器是一种重要的组件,它可以确保应用程序的状态与期望的状态一致。在K8S中,有五种常见的控制器,它们分别是: 1. ReplicaSet控制器 ReplicaSet控制器用于确保P

    2024年02月13日
    浏览(56)
  • 14-k8s控制器资源-rs控制器replicasets

            replicaset副本控制器,简称:rs控制器;         用法:与rc控制器“几乎”相同;         能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式         注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样

    2024年02月21日
    浏览(61)
  • k8s---pod控制器

    工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。 预期状态: 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 1、replicaset:指定pod副本的数量 三个组件:                 1、pod的副本                 2、标签选择器,判断

    2024年01月18日
    浏览(52)
  • 13-k8s的控制器资源-rc控制器replicationcontrollers

            replicationcontrollers控制器资源,简称:rc控制器;         简单理解,rc控制器就是控制相同的pod副本数量;         使用rc控制器资源创建pod,就可以设定创建pod的数量; [root@k8s231 rc]# vim rc.yaml apiVersion: v1 kind: ReplicationController metadata:   name: rc01 spec:   #控制pod的副本

    2024年02月20日
    浏览(64)
  • 17-k8s控制器资源-job控制

    job控制器:就是一次性任务的pod控制器,pod完成作业后不会重启,其重启策略是:Never         启动一个pod,执行完成一个事件,然后pod关闭;         事件:计算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata:   name: job-pi spec:   #定义pod模板  

    2024年02月20日
    浏览(50)
  • 带你深入学习k8s--(四) 控制器(k8s核心)

    目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚  3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言: 上一章我们说到,pod有两种,分别为自主式 Pod,Pod 退出后不会被创建;

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包