网站建设中数据安全研究,海淀网站设计公司,手机制作网站app,手机连接wordpress一、pod
Evicted状态#xff1a; 在Kubernetes中#xff0c;当节点资源紧张时#xff0c;Kubelet可能会驱逐节点上的一些Pods以释放资源。当这种情况发生时#xff0c;Pod的状态会被设置为Evicted。
1.pod的探针
1.就绪性探针#xff1a; 一般用于探测容器…一、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.com2.nodeSelector
nodeSelector是另一种控制Pod调度到特定节点的方式它使用标签选择器来选择符合条件的节点。这个方法更灵活因为它基于节点的标签来进行选择而不是硬编码节点名称。需要给node节点打上对应标签 例
spec:nodeSelector:nodeNum: node23.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.requiredDuringSchedulingIgnoredDuringExecutionPod必须调度到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-typeproduction:NoSchedule
kubectl taint node 32.hiuiu.com disk-typessd:NoSchedule
# 删除污点
kubectl taint node 32.hiuiu.com disk-typessd: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: 80apiVersion指定Deployment的API版本。 kind资源类型设置为Deployment。 metadata包含Deployment的名称和标签。 spec定义Deployment的规格。 replicas指定Pod副本的数量。Deployment会确保有这个数量的Pod副本运行。 selector定义如何选择Pod。matchLabels用于匹配Pod的标签以便Deployment管理这些Pod。 templatePod模板定义了Pod的规范包括Pod的标签和容器配置。 metadata定义Pod的标签。 spec定义Pod中的容器规范包括容器名称、镜像、端口等。
常见操作
1.创建Deployment
使用以下命令创建Deployment
kubectl apply -f deployment.yaml2.查看Deployment状态
使用以下命令查看Deployment的状态和Pod副本
kubectl get deployments
kubectl describe deployment my-app3.更新Deployment
更新Deployment的配置或镜像版本
kubectl set image deployment/my-app my-containernew-image:tagkubectl edit deployment/nginx-deployment
#直接在 Kubernetes 集群中编辑资源的配置方法2vim 修改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