草庐IT

kubernetes之deployment

水悦深 2023-05-25 原文

用于部署无状态的服务,这个最常用的控制器。可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。

虽然ReplicaSet可以确保在任何给定时间运行的Pod副本达到指定的数量,但是Deployment(部署)是一个更高级的概念,它管理ReplicaSet并为Pod和ReplicaSet提供声明性更新以及许多其他有用的功能,所以建议在实际使用中,使用Deployment代替ReplicaSet。

1、创建一个deployment 实例

cat deployment.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
       app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        ports:
        - containerPort: 80
        image: nginx:1.20

在该例中:

  • 创建名为 nginx-deployment(由 .metadata.name 字段标明)的 Deployment。
  • selector 字段定义 Deployment 如何查找要管理的 Pods。 在这里,你选择在 Pod 模板中定义的标签(app: nginx)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可

运行下面命令创建deployment

kubectl apply -f deployment.yml --record

注:--record标志可以将执行的命令写入资源注解,每个 Deployment 修订版本所执行过的命令。

2、运行 kubectl get deployments 检查deployment是否创建

kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
deployment-nginx   3/3     3            3           47m

3、要查看deployment 上线状态,运行 kubectl rollout status deployment/deployment-nginx

 kubectl rollout status deployment/deployment-nginx
deployment "deployment-nginx" successfully rolled out

4、要查看 Deployment 创建的 ReplicaSet(rs) ,运行 kubectl get rs

kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
deployment-nginx-7cf55fb7bb   3         3         3       31m

5、更新 deployment

  • 比如需要更改镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record

也可以使用 kubectl edit 的方法实现

kubectl edit deployment/deployment-nginx

6、回滚deployment

首先检查deployment 的历史版本

kubectl rollout history deployment/deployment-nginx
deployments "nginx-deployment"
REVISION    CHANGE-CAUSE
1           kubectl apply deployment.yaml --record=true
2           kubectl set image deployment/deployment-nginx nginx=nginx:1.16.1 --record=true

查看历史版本的详细信息

kubectl rollout history deployment/deployment-nginx --revision=2

回滚到之前的版本

kubectl rollout undo deployment/deployment-nginx --to-revision=2

7、缩放deployment

使用一下指令进行缩放副本数量

kubectl scale deployment/deployment-nginx --replicas=5 --recoed
#将名称为deployment-nginx这个副本数量扩充为5个副本,并且记录修订版本

比例缩放

         RollingUpdate 的 Deployment 支持同时运行应用程序的多个版本。 当自动缩放器缩放处于上线进程(仍在进行中或暂停)中的 RollingUpdate Deployment 时, Deployment 控制器会平衡现有的活跃状态的 ReplicaSets(含 Pods 的 ReplicaSets)中的额外副本, 以降低风险。这称为 比例缩放。

maxSurge(最大增量):除当前数量外还要添加多少个实例。

maxUnavailable(最大不可用量):滚动更新过程中的不可用实例数。

可以运行一下命令根据自身需要更改maxsurge 和maxunavaliable

kubectl edit deployment/deployment-nginx

编辑文件,找到maxsurge和maxunavailable,更改大小

8、暂停、恢复deployment

你可以在触发一个或多个更新之前暂停 Deployment,然后再恢复其执行。 这样做使得你能够在暂停和恢复执行之间应用多个修补程序,而不会触发不必要的上线操作。

kubectl rollout pause deployment.v1.apps/nginx-deployment  #暂停
kubectl rollout resume deployment.v1.apps/nginx-deployment  #恢复

有关kubernetes之deployment的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Capistrano:deploy.rb 文件重构 - 2

    我的deploy.rb中有以下代码namespace:appdodesc"copiestheconfigurationfrilefrom~/shared/config/*.ymlto~/config"task:copy_config_files,:roles=>:appdorun"cp-fv#{deploy_to}/shared/config/hoptoad.rb#{release_path}/config/initializers"run"cp-fv#{deploy_to}/shared/config/app_config.yml#{release_path}/config/app_

  3. ruby-on-rails - rails : is Passenger Standalone suitable for production deployment? - 2

    问题标题几乎概括了它...我一直无法找到任何好的资源来概述使用PhusionPassengerStandalone进行Rails应用程序部署的优缺点。它与运行PassengerNginx或PassengerApache相比如何?.htaccess之类的东西是否继续按预期工作?任何见解将不胜感激!谢谢! 最佳答案 Standalone建立在Nginx之上。你可以直接将它连接到端口80,它的行为很像PhusionPassenger+Nginx:它可以非常快速地提供静态文件,它会根据流量自动启动和停止进程,它会在它们运行时自动重启进程崩溃

  4. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  5. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  6. ruby-on-rails - Capistrano:不知道如何构建任务 'deploy:new_release_path' - 2

    我是第一次部署到DigitalOceanUbuntudroplet。我已经配置了所有内容并执行了所有步骤,现在我正在执行命令:capproductiondeploy:initial。对于此命令,我收到此错误消息:capaborted!Don'tknowhowtobuildtask'deploy:new_release_path'(see--tasks)/Users/Christopher/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:58:in`[]'/Users/

  7. ruby - 如何从不同于 :deploy? 的命名空间触发 Capistrano 任务 - 2

    在我的Capistrano配方中,我有一个具有不同任务的命名空间:namespace:mystuffdotask:mysetupdo;...end;task:mytask1do;...end;task:mytask2do;...end;task:mycleanupdo;...end;endThesecustomisedtasksaretriggeredvialineslikethisatthetopofmyrecipe:after"deploy","mystuff:mycleanup"我想从我的命名空间中执行一个普通的capistrano任务。例如,如果已经建立了一定数量的发布文件夹,

  8. idea连接远程k8s集群使用kubernetes-client - 2

    文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,

  9. 【云原生 • Kubernetes】kubernetes 核心技术 - Ingress - 2

    本文导读一、前言二、Ingress和pod有什么关系三、使用Ingress对外暴露应用1.创建应用并使用NodePort暴露端口2.应用Ingress(1)部署IngressController(2)创建Ingress规则(3)在Windows系统的hosts文件添加域名访问规则一、前言在以往的操作过程中,我们都是将某端口号对外暴露,然后再使用IP+端口号进行访问服务,这是通过Service中的NodePort实现的。但是NodePort有着明显的缺陷:NodePort会在每一个node节点都启用一个端口,也就是说在集群中的任何一个node节点中,使用节点IP+端口号都能访问到该服务;每个端口

  10. ruby-on-rails - 如何使用 capistrano deploy 定位特定的提交 SHA - 2

    我想知道如何使用Capistrano在Git中针对特定的提交SHA进行部署?应该是这样的capdeploy--version=经过大量搜索似乎无法找到这个问题的答案。 最佳答案 对于Capistrano2.9到3.0:cap-Srevision=80655da8d80aaaf92ce5357e7828dc09adb00993deploy对于旧版本的Capistrano,您可以通过执行以下操作来部署特定的gitcommit/tree/branch/tag:cap-sbranch=80655da8d80aaaf92ce5357e7828

随机推荐