首页 > 其他分享 >Deployment

Deployment

时间:2024-08-23 11:18:41浏览次数:9  
标签:kubectl app Deployment nginx deployment Pod

一、Deployment介绍

Kubernetes 的 Deployment 是一种高层次的 API 对象,用于声明式地管理 Pod 的副本、升级、回滚等操作。它为应用的部署和维护提供了强大的功能。

Deployment是Replicat的一个升级版本,具备动态升级和回滚功能。 Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法,在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,通过定义一个Deployment控制器会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源。

二、Deployment资源对象结构

Deployment 资源对象通常包括以下几个主要部分:

  1. apiVersion

  2. kind

  3. metadata

  4. spec

apiVersion

指定 API 的版本。对于 Deployment,通常使用 apps/v1

apiVersion: apps/v1

kind

指定资源的类型。对于 Deployment,这个字段的值为 Deployment

kind: Deployment

metadata

包含 Deployment 对象的元数据,如名称、命名空间、标签和注释等。

  • name: Deployment 的名称(必须唯一)。

  • namespace: Deployment 所在的命名空间(默认为 default)。

  • labels: 用于标记 Deployment 的键值对,方便后续的选择器和过滤。

  • annotations: 用于存储附加的信息和注释。

metadata:
  name: my-deployment
  namespace: default
  labels:
    app: my-app

spec

定义了 Deployment 的详细规格,包括副本数量、Pod 模板、选择器和更新策略等。

  • replicas: 指定 Pod 的副本数量。这决定了有多少个 Pod 应该同时运行。

replicas: 3
  • selector: 定义一个标签选择器,用于选择和管理 Pod。

matchLabels: 定义要匹配的标签键值对,用于选择与 Deployment 相关的 Pod。

selector:
  matchLabels:
    app: my-app
  • template: 定义 Pod 的模板。所有根据 Deployment 创建的 Pod 都会基于这个模板。

metadata: Pod 的标签,通常与 selector 中的标签匹配。

metadata:
  labels:
    app: my-app

spec: Pod 的规格,包括容器配置、卷、环境变量等。

containers: 容器列表,定义 Pod 中的容器。

      • name: 容器的名称。

      • image: 容器的镜像。

      • ports: 容器暴露的端口。

      • env: 环境变量配置。

      • resources: 资源请求和限制。

spec:
  containers:
  - name: my-container
    image: my-image:latest
    ports:
    - containerPort: 80

volumes: 定义 Pod 使用的卷(可选)

volumes:
- name: my-volume
  emptyDir: {}
  • strategy: 定义滚动更新的策略。

type: 更新策略类型。常用的有 RollingUpdateRecreate

strategy:
  type: RollingUpdate

rollingUpdate: 这是一个 RollingUpdateDeployment 类型的字段,仅在 type 设置为 RollingUpdate 时出现。它定义了滚动更新的配置参数。

      • maxSurge: 更新期间可以创建的额外 Pod 数量或百分比。

      • maxUnavailable: 更新期间允许不可用的 Pod 数量或百分比。

默认值:

      • 如果没有指定 type,默认使用 "RollingUpdate" 策略。

rollingUpdate:
  maxSurge: 1
  maxUnavailable: 1
  • minReadySeconds: Pod 在被认为可用之前必须在 Ready 状态下等待的最小秒数(可选)。
minReadySeconds: 10
  • revisionHistoryLimit: 保留的历史版本数量,默认是 10 个(可选)。

功能说明:

    • 回滚: 当你更新 Deployment 的配置时,Kubernetes 会创建一个新的 ReplicaSet 并逐步替换掉旧的 ReplicaSetrevisionHistoryLimit 用于控制保留多少个历史的 ReplicaSet,这样你可以在需要时将应用程序回滚到之前的版本。

    • 默认值: 如果没有显式设置这个字段,Kubernetes 默认会保留 10 个历史 ReplicaSet

    • 指针: 这个字段是一个指针,意味着可以将其设置为 0(表示不保留任何历史 ReplicaSet),或者将其留空以使用默认值 10

revisionHistoryLimit: 5

二、Deployment 的主要功能

  1. 滚动更新(Rolling Update):允许逐步替换旧版本的 Pod,以便在不停止服务的情况下部署新的版本。

  2. 回滚(Rollback):支持回滚到先前的版本,以便在新版本出现问题时快速恢复。

  3. 副本管理(Replica Management):自动创建、删除或更新 Pod 副本以保持所需的副本数量。

  4. 声明式配置:通过 YAML 文件定义 Pod 的期望状态,Kubernetes 会自动确保实际状态符合期望。

三、常用命令

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx-dep
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: harbor.hiuiu.com/nginx/nginx:1.21.5
        ports:
        - containerPort: 80

创建或更新 Deployment

kubectl apply -f deployment.yaml

查看 Deployment 状态

kubectl get deployments
kubectl describe deployment <deployment-name>

删除 Deployment

kubectl delete deployment <deployment-name>

升级版本管理

查看升级历史

kubectl rollout history deployment/nginx-deployment

回滚到指定版本

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

动态缩放

kubectl scale deployment/nginx-deployment --replicas=10

锁定当前版本

kubectl rollout pause deployment/nginx-deployment

解除锁定

kubectl rollout resume deployment/nginx-deployment

查看配置

kubectl explain deployment
kubectl describe deployments.apps nginx-deployment

使用deployment升级pod

#修改配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx-dep
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: harbor.hiuiu.com/nginx/nginx:1.22a
        ports:
        - containerPort: 80

kubectl apply -f deployment.yaml
#查看升级过程
watch kubectl get pod -o wide

 升级回滚

方法一:

命令形式升级

kubectl set image deployment.v1.apps/nginx-deployment nginx=harbor.hiuiu.com/nginx/nginx:1.21.5

方法二:

修改配置文件

kubectl edit deployment/nginx-deployment

 

标签:kubectl,app,Deployment,nginx,deployment,Pod
From: https://www.cnblogs.com/hxqwe/p/18374427

相关文章

  • 在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
    在Kubernetes(K8S)中,Deployment支持扩容,并且是用于管理应用的推荐方式之一。Deployment提供了一种声明式的方式来更新应用实例,并支持滚动更新、回滚等功能。下面详细介绍Deployment的扩容功能及其与HorizontalPodAutoscaler(HPA)的区别。1.Deployment的扩容功能在......
  • deployment.yaml 文件解读
     apiVersion:apps/v1kind:DeploymentapiVersion:资源的版本,这里使用的是apps/v1,表示这是一个Deployment的最新版本。kind:资源类型,这里是Deployment,表示这是一个Deployment资源。metadata:name:project_name-project_envnamespace:dtmtask-project_en......
  • 在K8S中,Deployment的升级过程是什么?
    在Kubernetes中,Deployment提供了一种非常强大的方式来更新应用,同时保持应用的可用性。以下是使用Deployment进行应用升级的过程,包括滚动更新、回滚、暂停和恢复更新等操作。1.升级过程准备工作:确保你有一个现有的Deployment。准备新的容器镜像或者其他需要更改的配置......
  • 在K8S中,deployment的创建过程包括什么?
    在Kubernetes(K8S)中,Deployment的创建过程是一个涉及多个组件和步骤的复杂流程。以下是一个详细的步骤说明,包括从创建Deployment配置文件到Pod在集群中实际运行的整个过程:1.创建Deployment配置文件首先,需要准备一个YAML格式的配置文件,用于定义Deployment的属性。这个配置文件包含......
  • 在K8S中,Deployment和Statefulset有何区别?
    在Kubernetes中,Deployment和StatefulSet都是用来管理应用的资源对象,但是它们的设计目的和服务场景有所不同。下面详细解释这两种资源的区别:1.Deployment用途:Deployment主要用于管理无状态应用,即那些不需要持久化数据或者不需要唯一网络标识符的应用。它提供了一种简......
  • k8s工作负载控制器--Deployment
    目录一、引入背景二、主要功能三、资源清单四、实例1、流程2、创建Deployment资源清单3、创建Deployment4、检查Deployment是否创建成功(正在创建)5、查看Deployment的上线状态6、再次查看Deployment状态(创建完成)7、查看Deployment创建的ReplicaSet(rs)8、查看被创建的Pod的标签9、......
  • k8s Deployment与StatefulSet:深入理解两种控制器的区别
    Kubernetes(k8s)是一个强大的容器编排平台,它提供了多种资源对象来管理容器化应用。在这些资源对象中,Deployment和StatefulSet是两种常见的控制器,它们用于不同场景下的容器应用管理。本文将深入探讨这两种控制器的区别,帮助你更好地理解它们在Kubernetes中的应用和选择。一、Kuber......
  • k8s配置文件之deployment配置
    deployment使用并管理rs,算是更高一层的概念,这是现在比较常用的部署app的方式。deployment为pod和rs提供声明式更新(而非命令式)。支持滚动更新(rollingUpdate),支持回滚操作资源配置主要分五类来定义内容 一:apiVersion【string】 APIVersion定义对象表示的版本,此处为:apps/......
  • k8s-deployment:应用生命周期管理流程
    deployment:应用生命周期管理流程 应用程序->部署->升级->回滚->删除1部署deployment###kubectlapply-fweb1-deployp.yaml kubectlcreatedeploymentweb--image=nginx:1.16--replicas=3#web1-deploy.yaml ......
  • dfsvc.exe 是 Windows 操作系统中的一个系统进程,它的全称是 "ClickOnce Deployment Se
    dfsvc.exe是Windows操作系统中的一个系统进程,它的全称是"ClickOnceDeploymentService"。这个进程主要用于支持ClickOnce技术,它是一种用于在Windows平台上发布和部署应用程序的技术。具体来说,ClickOnce是一种轻量级的、易于部署的应用程序部署技术,通常用于分发和更新.NE......