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

Pod和Deployment

一、pod

Evicted状态:
在Kubernetes中,当节点资源紧张时,Kubelet可能会驱逐节点上的一些Pods以释放资源。当这种情况发生时,Pod的状态会被设置为"Evicted"。

1.pod的探针

1.就绪性探针: 一般用于探测容器内的程序是否健康,容器是否准备好服务请求。
2.存活性探针: 用于探测容器是否运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影响决定是否重启。如果容器不提供存活探针,则默认状态为 Success。
3.启动探针: 探测容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其 他探测,直到它成功为止。

2.pod节点选择器

1.nodename

nodeName属性是Pod的调度到具体节点的直接方法。它指定Pod应当运行在一个名为nodeName的特定节点上。
例:

spec:nodeName: 31.hiuiu.com

2.nodeSelector

nodeSelector是另一种控制Pod调度到特定节点的方式,它使用标签选择器来选择符合条件的节点。这个方法更灵活,因为它基于节点的标签来进行选择,而不是硬编码节点名称。(需要给node节点打上对应标签)
例:

spec:nodeSelector:nodeNum: node2

3.node亲和性

Node 亲和性(Node Affinity)是一种调度机制,允许你控制Pod调度到满足特定条件的节点上。Node 亲和性用于定义Pod对节点的需求,从而实现更灵活的资源管理和调度策略。

亲和性类型

RequiredDuringSchedulingIgnoredDuringExecution(必需的调度期间,运行期间忽略):这表示Pod必须被调度到满足指定条件的节点上。如果没有符合条件的节点,Pod将无法调度。这个设置对调度有强制要求。
PreferredDuringSchedulingIgnoredDuringExecution(优选的调度期间,运行期间忽略):这表示Pod优先被调度到符合指定条件的节点上,但不是强制要求。如果没有符合条件的节点,Pod仍然可以调度到其他节点。这种设置是优选的,不是强制的。

亲和性规则

键/值对:Node 亲和性使用节点的标签(key/value pairs)来匹配。你可以根据节点的标签定义Pod的亲和性规则。
操作符:

In:值必须在指定的集合中。
NotIn:值不能在指定的集合中。
Exists:键存在即可(不关心值)。
DoesNotExist:键不存在。
Gt 和 Lt:值大于或小于指定值(用于数值比较)。
实例
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues:- ssd- hddpreferredDuringSchedulingIgnoredDuringExecution:- preference:matchExpressions:- key: environmentoperator: Invalues:- productionweight: 1containers:- name: example-containerimage: nginx

在这个示例中:
1.requiredDuringSchedulingIgnoredDuringExecution:Pod必须调度到disktype标签的值为ssd或hdd的节点上。
2.preferredDuringSchedulingIgnoredDuringExecution:优先调度到environment标签的值为production的节点上,权重为1。即使没有符合条件的节点,Pod也可以调度到其他节点。

4.污点和容忍度

给了节点选则的主动权,我们给节点打一个污点,不容忍的pod就运行不上来,污点就是定义在节点上的键值属性数据,可以定决定拒绝那些pod

  • taints 是键值数据,用在节点上,定义污点;
  • tolerations 是键值数据,用在pod上,定义容忍度,能容忍哪些污点
  • pod亲和性是pod属性;但是污点是节点的属性,污点定义在nodeSelector
# 标记污点:
kubectl taint node 31.hiuiu.com node-type=production:NoSchedule
kubectl taint node 32.hiuiu.com disk-type=ssd:NoSchedule
# 删除污点
kubectl taint node 32.hiuiu.com disk-type=ssd:NoSchedule-
# 查看污点
kubectl describe node 32.hiuiu.com | grep Taints
# 配置容忍度:
tolerations:
- key: "node-type"
operator: "Equal"
value: "production1"
effect: "NoSchedule"

二、Deployment

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

示例

apiVersion: apps/v1
kind: Deployment
metadata:name: my-applabels:app: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

apiVersion:指定Deployment的API版本。
kind:资源类型,设置为Deployment。
metadata:包含Deployment的名称和标签。
spec:定义Deployment的规格。
replicas:指定Pod副本的数量。Deployment会确保有这个数量的Pod副本运行。
selector:定义如何选择Pod。matchLabels用于匹配Pod的标签,以便Deployment管理这些Pod。
template:Pod模板,定义了Pod的规范,包括Pod的标签和容器配置。
metadata:定义Pod的标签。
spec:定义Pod中的容器规范,包括容器名称、镜像、端口等。

常见操作

1.创建Deployment

使用以下命令创建Deployment:

kubectl apply -f deployment.yaml
2.查看Deployment状态

使用以下命令查看Deployment的状态和Pod副本:

kubectl get deployments
kubectl describe deployment my-app
3.更新Deployment

更新Deployment的配置或镜像版本:

kubectl set image deployment/my-app my-container=new-image:tagkubectl edit deployment/nginx-deployment
#直接在 Kubernetes 集群中编辑资源的配置

方法2:vim 修改yaml文件后重新kubectl apply

4.回滚Deployment

回滚到之前的版本:

kubectl rollout undo deployment/my-appkubectl rollout history deployment/nginx-deployment
#查看当前 Deployment 的所有可用修订版本kubectl rollout pause deployment/nginx-deployment
#暂停 Kubernetes Deployment 的滚动更新过程
kubectl rollout resume deployment/nginx-deployment
#恢复之前暂停的滚动更新过程
5.删除Deployment

删除Deployment及其管理的Pod:

kubectl delete deployment my-app
http://www.lryc.cn/news/430473.html

相关文章:

  • 7. 数据结构—二叉树(链式存储)
  • AScript 的UI asui模板的导入
  • Linux shell编程学习笔记75:sed命令——沧海横流任我行(下)
  • 探索Scratch中的物理世界:碰撞与重力的编程之旅
  • 大模型重塑就医体验:医联MedGPT助力健康中国建设
  • TOMCAT全解
  • UDP+TCP
  • 分页查询面试记录和面试详情
  • Oracle 同义词SYNONYM 的实战使用
  • 实验11-1-8 查找子串
  • Git存储库添加空目录-添加占位文件
  • 基于x86 平台opencv的图像采集和seetaface6的人脸识别功能
  • Git 的基本使用
  • 如何解决 Cloudflare | 使用 Puppeteer 和 Node.JS
  • 笔记redis
  • Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
  • RAID 方案比较
  • 零成本搭建个人 APP 和小程序后台
  • LCP 633 平方数之和 [leetcode - 8]
  • c语言试题及答案
  • python实现链表
  • Linux Shell 编程基础入门(一)
  • 大白话讲微服务的灾难性雪崩效应
  • 配置 K3s 访问私有镜像仓库
  • 数学建模之数据分析【七】:对Pandas DataFrame 进行切片
  • 删除 Docker 容器的日志文件
  • DevOps入门(上)
  • 基于Python的网易民谣歌词数据分析的设计与实现
  • 趋动科技联合云轴科技推出GPU云原生超融合解决方案
  • Dooring智图,一款开箱即用的图片海报编辑器