污点Taints和Deployment

2024-08-22 17:04
文章标签 deployment 污点 taints

本文主要是介绍污点Taints和Deployment,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

POD和NODE的污点容忍度

在 Kubernetes 中,节点的污点(taints)和 Pod 的容忍度(tolerations)是控制 Pod 调度的重要机制。它们用于确保 Pod 在满足特定条件的节点上运行,或者避免在不适合的节点上运行。

1.节点的污点(Taints)

污点是附加到节点上的一组键值对,用于指示节点的一些特性或者状态。污点可以防止不符合条件的 Pod 被调度到该节点上。

语法

污点的格式为 key=value:effect,其中:

  • key:污点的键。
  • value:污点的值(可选)。
  • effect:污点的效果,可以是 NoSchedulePreferNoScheduleNoExecute

污点的类型

  1. NoSchedule:该节点不能调度新的 Pod,如果 Pod 不具有对应的容忍度。
  2. PreferNoSchedule:该节点尽量不调度新的 Pod,但如果没有其他合适的节点,也可以调度。
  3. NoExecute:该节点上已经运行的 Pod 将被驱逐,新的 Pod 不能调度到该节点上,除非 Pod 具有对应的容忍度。

示例

kubectl taint nodes node1 key=value:NoSchedule

这个命令为名为 node1 的节点添加了一个污点,表示如果 Pod 没有对应的容忍度,将不能被调度到该节点。

标记污点

kubectl taint node node1 disk-type=IDE:NoSchedule

查看污点

kubectl describe node node1 | grep Taints

删除污点

kubectl taint node node1 disk-type=IDE:NoSchedule-

在这里插入图片描述

2.Pod 的容忍度(Tolerations)

容忍度是附加到 Pod 上的一组规则,用于指示 Pod 可以容忍哪些污点。这允许 Pod 在特定污点的节点上运行。

语法

容忍度的格式如下:

tolerations:
- key: "<key>"operator: "<operator>"value: "<value>"effect: "<effect>"tolerationSeconds: <seconds>
  • key:与节点污点的键匹配。
  • operator:操作符,通常是 EqualExists
  • value:与节点污点的值匹配(可选)。
  • effect:污点的效果,可以是 NoSchedulePreferNoScheduleNoExecute
  • tolerationSeconds:适用于 NoExecute,指定 Pod 可以容忍污点的时间(秒),超时后将被驱逐(可选)。

示例

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:tolerations:- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"

在这个例子中,Pod my-pod 将容忍键为 key 且值为 value 的污点,且效果是 NoSchedule。这意味着即使节点上有这样的污点,Pod 仍然可以调度到该节点上。

3.总结

  • 节点污点(Taints):用于标记节点的特殊条件,防止不符合条件的 Pod 被调度到节点上。
  • Pod 容忍度(Tolerations):用于标记 Pod 可以容忍哪些污点,从而允许 Pod 在具有这些污点的节点上运行。

示例:

node节点污点

root@master:/opt/zxy# vim replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 2selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:nodeSelector:nodemaster: "yes"containers:- name: mycontainerimage: harbor.hiuiu.com/nginx/nginx:1.21.5imagePullPolicy: Neverports:- containerPort: 80tolerations:- key: "disk-type"operator: "Equal"value: "IDE"effect: "NoSchedule"kubectl taint node node1 disk-type=IDE:NoSchedule
kubectl taint node node2 disk-type=IDE:NoExecute
kubectl describe node node1 | grep Taints
kubectl describe node node2 | grep Taints
kubectl apply -f replicaset.yaml
kubectl get pod -o wide

在这里插入图片描述

在这里插入图片描述

Deployment

Kubernetes 的 Deployment 是一种高层次的 API 对象,用于声明式地管理 Pod 的副本、升级、回滚等操作。它为应用的部署和维护提供了强大的功能。下面是 Deployment 资源对象的详细介绍,包括其字段及其功能。

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

1.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-deploymentnamespace: defaultlabels: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-containerimage: my-image:latestports:- containerPort: 80
      
    • volumes: 定义 Pod 使用的卷(可选)。

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

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

      strategy:type: RollingUpdate
      
    • rollingUpdate: 如果 typeRollingUpdate,可以指定详细的滚动更新配置。

      • maxSurge: 更新期间可以创建的额外 Pod 数量或百分比。
      • maxUnavailable: 更新期间允许不可用的 Pod 数量或百分比。
      rollingUpdate:maxSurge: 1maxUnavailable: 1
      
  • minReadySeconds: Pod 在被认为可用之前必须在 Ready 状态下等待的最小秒数(可选)。

    minReadySeconds: 10
    
  • revisionHistoryLimit: 保留的历史版本数量,默认是 10 个(可选)。

    revisionHistoryLimit: 5
    

2.Deployment 的主要功能

  1. 滚动更新(Rolling Update):允许逐步替换旧版本的 Pod,以便在不停止服务的情况下部署新的版本。
  2. 回滚(Rollback):支持回滚到先前的版本,以便在新版本出现问题时快速恢复。
  3. 副本管理(Replica Management):自动创建、删除或更新 Pod 副本以保持所需的副本数量。
  4. 声明式配置:通过 YAML 文件定义 Pod 的期望状态,Kubernetes 会自动确保实际状态符合期望。

3.常用命令

创建 Deployment

kubectl apply -f deployment.yaml

查看 Deployment 状态

kubectl get deployments
kubectl describe deployment <deployment-name>

更新 Deployment

kubectl apply -f deployment.yaml

删除 Deployment

kubectl delete deployment <deployment-name>

升级版本管理
查看升级历史

kubectl rollout history deployment/nginx-deployment

请添加图片描述

回滚到指定版本

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

动态缩放

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

锁定当前版本

kubectl rollout pause deployment/nginx-deployment

接触锁定

kubectl rollout resume deployment/nginx-deployment

示例 Deployment YAML 文件

以下是一个 Deployment 示例 YAML 文件:

查看配置

kubectl explain deployment
kubectl describe deployments.apps nginx-deployment

在这里插入图片描述
在这里插入图片描述

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx-dep
spec:replicas: 10selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: harbor.hiuiu.com/nginx/nginx:1.21.5ports:- containerPort: 80
kubectl apply -f Deployment.yaml
kubectl get pod -o wide
#查看当前命名空间下的deployment对象资源
kubectl get deployment.app
kubectl get rs        
kubectl get pod
# 查看deployment状态
kubectl rollout status deployment/nginx-deployment                

在这里插入图片描述
在这里插入图片描述

使用deployment升级pod

修改配置文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx-dep
spec:replicas: 10selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: harbor.hiuiu.com/nginx/nginx:1.22aports:- containerPort: 80kubectl apply -f Deployment.yaml 

在这里插入图片描述
在这里插入图片描述

升级回滚

方法一:

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

在这里插入图片描述
在这里插入图片描述

方法二:

修改配置文件

kubectl edit deployment/nginx-deployment	

在这里插入图片描述

在这里插入图片描述
定义滚动更新的策略

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx-dep
spec:replicas: 10revisionHistoryLimit: 20selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: harbor.hiuiu.com/nginx/nginx:1.21.5ports:- containerPort: 80strategy:rollingUpdate:maxSurge: 50%maxUnavailable: 50%

4.总结

Deployment 资源对象通过声明式的方法管理 Pod 的副本和生命周期,支持滚动更新、回滚以及副本管理等功能,帮助你有效地维护应用程序的稳定性和可用性。通过 Deployment,可以轻松地进行应用程序的升级、扩展和维护,确保系统的高可用性和可靠性。

这篇关于污点Taints和Deployment的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096867

相关文章

k8s调度(pod亲和、反亲和、污点、容忍度)

pod亲和性 针对对象为Pod,目的是实现,新建Pod和目标Pod调度到一起,在同一个Node上。 示例: apiVersion: v1kind: Podmetadata:name: testpod01labels:app: myapp01env: test1spec:containers:- name: testpod01image: nginx:1.23.2---apiVersio

K8s高可用集群部署----超详细(Detailed Deployment of k8s High Availability Cluster)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。 常用运维工具系列:

k8s调度、污点、容忍、不可调度、排水、数据卷挂载

一、Kubernetes的list-watch机制 1、List-watch K8S集群中,通过List-watch机制进行每个组件的协作,保持数据同步。这种设计可以实现每个组件之间的解耦 kubectl配置文件,统一向集群内部apiserver发送命令——通过apiserver把命令发送到各个组件 创建成功之后,kubectl get pod,kubectl describe pod n

污点、容忍、不可调度、排水、数据卷

目录 污点taint 污点的格式 1. key:effect    键名:污点类型 2. key=value:effect   键名=数值:污点类型 污点的类型 1.  NoSchedule 2.  PreferNoSchedule 3. NoExecute(驱逐) 设置污点(主节点操作) 查看污点 删除污点 修改污点 容忍tolerations Equal类型 No

kubernetes Deployment介绍

一、deployment Deployment在继承Pod和Replicaset的所有特性的同时, 它可以实现对template模板进行实时滚动更新并具备我们线上的Application life circle的特性. 二、操作命令 1. 创建deployment vi deployment.yaml apiVersion: apps/v1kind: Deploymentm

【kubernetes】Deployment介绍和应用

一,Deployment介绍 概述 Deployment是k8s中最常用的资源对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法。 在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态。 通过定义一个Deployment控制器,会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,

pycharm ssh连接远程服务器报错:can’t get remote credentials for deployment server

将下图中visible only for this preject  前 选中状态 的勾去掉即可。

Kubernetes中的守护者与管家:ReplicaSet与Deployment的协同工作

引言 在Kubernetes集群中,ReplicaSet和Deployment是两种至关重要的资源对象,它们共同维护着应用程序的稳定性和可用性。虽然它们各自承担着不同的职责,但它们之间的关系密切,相互协作以确保应用程序的平滑运行和弹性伸缩。本文将详细探讨ReplicaSet和Deployment之间的关系,以及它们如何在Kubernetes生态系统中协同工作。 Kubernetes中的Repl

深入解析:Kubernetes StatefulSet与Deployment的比较与应用场景

引言 在Kubernetes生态系统中,StatefulSet和Deployment是两种常用的工作负载抽象,它们都用于管理一组容器化应用程序的生命周期。然而,它们在设计哲学和使用场景上存在明显差异。本文将深入探讨StatefulSet和Deployment的区别,并通过实际代码示例,展示它们在不同场景下的应用。 StatefulSet与Deployment概述 StatefulSet 是K