当前位置: 首页 > news >正文

污点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,可以轻松地进行应用程序的升级、扩展和维护,确保系统的高可用性和可靠性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL键分区分区表
  • 【自动驾驶】控制算法(一)绪论与前期准备
  • 线性数据结构的基本概念(数组,链表,栈,队列)
  • React Hooks 的高级用法
  • 多商户多套部署需修改注意事项
  • 便携式气象监测设备的定义与特点
  • python锁 (lock) 机制+多线程处理共享变量
  • 希尔排序,详细解析(附图解)
  • yolov8旋转框+关键点检测
  • XSS GAME
  • 记录一个变量溢出的bug
  • Hive3:常用查询语句整理
  • gitlab
  • 知识竞赛答题设备及答题方式有哪些
  • 什么是应用交付控制器(ADC)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • 77. Combinations
  • Java比较器对数组,集合排序
  • npx命令介绍
  • Python语法速览与机器学习开发环境搭建
  • Spring Boot MyBatis配置多种数据库
  • vagrant 添加本地 box 安装 laravel homestead
  • Web Storage相关
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端_面试
  • 巧用 TypeScript (一)
  • 使用 @font-face
  • 我建了一个叫Hello World的项目
  • 学习JavaScript数据结构与算法 — 树
  • 一些关于Rust在2019年的思考
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #前后端分离# 头条发布系统
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Forward) Music Player: From UI Proposal to Code
  • (void) (_x == _y)的作用
  • (vue)页面文件上传获取:action地址
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (六)Hibernate的二级缓存
  • (三)Honghu Cloud云架构一定时调度平台
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十一)手动添加用户和文件的特殊权限
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • ***测试-HTTP方法
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Framework杂记
  • .NET MVC 验证码
  • .net mvc部分视图
  • .net Stream篇(六)
  • .NET 给NuGet包添加Readme