最新要闻
- 完胜iPhone 14 Pro Max!一加Ace 2连续滑动10万次:没有1次断触
- 天天快资讯丨河北90后小伙做叶雕月入过万 一张“树叶”售价120元
- 天天微头条丨米哈游起诉《原神》内鬼泄密 获赔15000元
- 世界观天下!小米汽车设计文件意外泄密被疯传!小米通报:供应商被罚100万
- 批判主义的观点是什么?批判主义的代表人物有哪些?
- 什么是平稳序列?平稳序列的三个条件是什么?
- imovie怎么添加音乐?imovie怎么调整视频画面大小?
- 怎么制作电子图章?图章制作软件有哪些?
- 罹难怎么读?罹难是什么意思?
- 全球快看:38999元 雷蛇灵刃18游戏本上架:13代i9+RTX 4090
- 世界球精选!《雷霆沙赞:众神之怒》国内定档3月17日:与北美同步上映
- 李书福是懂借壳上市的 吉利旗下跑车“路特斯”赴美上市
- 女子手机不慎落入西湖 “打捞神器”只用30秒捞出
- 可惜了!《泰坦陨落》还有未公布的单机版游戏 现已被EA砍掉
- 全球热讯:真爱粉!网友凌晨4点花1万多下单三星Galaxy S23 Ultra:直言“早买早享受”
- 【当前独家】比亚迪元PLUS夺得极寒续航达率成第一 城市高达74.2%
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球速看:kubernetes 污点(Taint)和容忍度(Toleration)研究
1.文档
官方文档https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/
2.知识点
2.1.什么污点和容忍度?
污点(Taint)是应用在节点之上的,从这个名字就可以看出来,是为了排斥pod 所存在的。
(资料图片仅供参考)
容忍度(Toleration)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上。
2.2.污点和容忍度的作用?
Taint(污点)和 Toleration(容忍)可以作用于node和 pod 上,其目的是优化pod在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有taint的node和pod是互斥关系,而具有节点亲和性关系的node和pod是相吸的。另外还有可以给node节点设置label,通过给pod设置nodeSelector将pod调度到具有匹配标签的节点上。
Taint 和 toleration 相互配合,可以用来避免pod被分配到不合适的节点上。每个节点上都可以应用一个或多个taint,这表示对于那些不能容忍这些taint的 pod,是不会被该节点接受的。如果将toleration应用于pod上,则表示这些pod可以(但不要求)被调度到具有相应taint的节点上。
2.3.给节点设置/移除污点
给节点node1增加一个污点,它的键名是key1,键值是value1,效果是NoSchedule。 这表示只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到node1这个节点。
kubectl taint nodes node1 key1=value1:NoSchedule
若要移除上述命令所添加的污点,你可以执行:
kubectl taint nodes node1 key1=value1:NoSchedule-
2.4.查看节点污点
sudo kubectl describe node master.cluster.k8s
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl describe node master.cluster.k8sName: master.cluster.k8sRoles: control-planeLabels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=master.cluster.k8s kubernetes.io/os=linux node-role.kubernetes.io/control-plane= node.kubernetes.io/exclude-from-external-load-balancers=Annotations: flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"3e:ff:5f:de:af:30"} flannel.alpha.coreos.com/backend-type: vxlan flannel.alpha.coreos.com/kube-subnet-manager: true flannel.alpha.coreos.com/public-ip: 10.0.22.121 kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock node.alpha.kubernetes.io/ttl: 0 volumes.kubernetes.io/controller-managed-attach-detach: trueCreationTimestamp: Fri, 08 Jul 2022 08:55:07 +0000Taints: key1=value1:NoSchedule node-role.kubernetes.io/master:NoSchedule
2.5.在pod 中定义容忍度
可以在 PodSpec 中定义 Pod 的容忍度。 下面两个容忍度均与上面例子中使用kubectl taint命令创建的污点相匹配, 因此如果一个 Pod 拥有其中的任何一个容忍度都能够被分配到node1:
tolerations:- key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" tolerations:- key: "key1" operator: "Exists" effect: "NoSchedule"
实例
apiVersion: v1kind: Podmetadata: name: nginx labels: env: testspec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "example-key" operator: "Exists" effect: "NoSchedule"
operator 的默认值是 Equal。
一个容忍度和一个污点相“匹配”是指它们有一样的键名和效果,并且:
如果 operator 是 Exists (此时容忍度不能指定 value)
如果 operator 是 Equal ,则它们的 value 应该相等
如果 operator 不指定,则默认为Equal
注意:
如果一个容忍度的 key 为空且 operator 为 Exists, 表示这个容忍度与任意的 key 、value 和 effect 都匹配,即这个容忍度能容忍任意 taint。
如果 effect 为空,则可以与所有键名 key1 的效果相匹配。
effect 的参数含义
NoSchedule 新的不能容忍的pod不能再调度过来,但是之前运行在node节点中的Pod不受影响
NoExecute 新的不能容忍的pod不能调度过来,老的pod也会被驱逐
PreferNoScheduler 表示尽量不调度到污点节点中去
2.6.多个污点的匹配原则
可以给一个节点添加多个污点,也可以给一个 Pod 添加多个容忍度设置。
Kubernetes 处理多个污点和容忍度的过程就像一个过滤器:从一个节点的所有污点开始遍历, 过滤掉那些Pod 中存在与之相匹配的容忍度的污点。余下未被过滤的污点的effect 值决定了 Pod 是否会被分配到该节点,特别是以下情况:
如果未被过滤的污点中存在至少一个 effect 值为 NoSchedule 的污点, 则 Kubernetes 不会将 Pod 分配到该节点。
如果未被过滤的污点中不存在 effect 值为 NoSchedule 的污点, 但是存在 effect 值为 PreferNoSchedule 的污点, 则 Kubernetes 会 尝试 不将 Pod 分配到该节点。
如果未被过滤的污点中存在至少一个 effect 值为 NoExecute 的污点, 则 Kubernetes 不会将 Pod 分配到该节点(如果 Pod 还未在节点上运行), 或者将 Pod 从该节点驱逐(如果 Pod 已经在节点上运行)。
例如,假设您给一个节点添加了如下污点
kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule
假定有一个 Pod,它有两个容忍度:
tolerations:- key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule"- key: "key1" operator: "Equal" value: "value1" effect: "NoExecute"
上述 Pod 不会被分配到 node1 节点,因为其没有容忍度和第三个污点相匹配。
但是如果在给节点添加上述污点之前,该 Pod 已经在上述节点运行, 那么它还可以继续运行在该节点上,因为第三个污点是三个污点中唯一不能被这个Pod 容忍的。
2.7.设置NoExcute 的驱逐时间
通常情况下,如果给一个节点添加了一个 effect 值为NoExecute的污点, 则任何不能忍受这个污点的 Pod 都会马上被驱逐, 任何可以忍受这个污点的 Pod 都不会被驱逐。
但是,如果 Pod 存在一个 effect 值为NoExecute的容忍度指定了可选属性tolerationSeconds的值,则表示在给节点添加了上述污点之后, Pod 还能继续在节点上运行的时间。
例如
tolerations:- key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" tolerationSeconds: 3600
这表示如果这个 Pod 正在运行,同时一个匹配的污点被添加到其所在的节点, 那么 Pod 还将继续在节点上运行 3600 秒,然后被驱逐。 如果在此之前上述污点被删除了,则 Pod 不会被驱逐。
2.8.基于污点的驱逐
这是在每个 Pod 中配置的在节点出现问题时的驱逐行为。
前文提到过污点的 effect 值 NoExecute会影响已经在节点上运行的 Pod
如果 Pod 不能忍受 effect 值为 NoExecute 的污点,那么 Pod 将马上被驱逐
如果 Pod 能够忍受 effect 值为 NoExecute 的污点,但是在容忍度定义中没有指定 tolerationSeconds,则 Pod 还会一直在这个节点上运行。
如果 Pod 能够忍受 effect 值为 NoExecute 的污点,而且指定了 tolerationSeconds, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。
当某种条件为真时,节点控制器会自动给节点添加一个污点。当前内置的污点包括:
node.kubernetes.io/not-ready:节点未准备好。这相当于节点状态 Ready 的值为 "False"。
node.kubernetes.io/unreachable:节点控制器访问不到节点. 这相当于节点状态 Ready 的值为 "Unknown"。
node.kubernetes.io/memory-pressure:节点存在内存压力。
node.kubernetes.io/disk-pressure:节点存在磁盘压力。
node.kubernetes.io/pid-pressure: 节点的 PID 压力。
node.kubernetes.io/network-unavailable:节点网络不可用。
node.kubernetes.io/unschedulable: 节点不可调度。
node.cloudprovider.kubernetes.io/uninitialized:如果 kubelet 启动时指定了一个 "外部" 云平台驱动, 它将给当前节点添加一个污点将其标志为不可用。在 cloud-controller-manager 的一个控制器初始化这个节点后,kubelet 将删除这个污点。
在节点被驱逐时,节点控制器或者 kubelet 会添加带有NoExecute效应的相关污点。 如果异常状态恢复正常,kubelet 或节点控制器能够移除相关的污点。
实例
一个使用了很多本地状态的应用程序在网络断开时,仍然希望停留在当前节点上运行一段较长的时间, 愿意等待网络恢复以避免被驱逐。在这种情况下,Pod 的容忍度可能是下面这样的:
tolerations:- key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000
说明:
Kubernetes 会自动给 Pod 添加一个 key 为 node.kubernetes.io/not-ready 的容忍度 并配置 tolerationSeconds=300,除非用户提供的 Pod 配置中已经已存在了 key 为 node.kubernetes.io/not-ready 的容忍度。
同样,Kubernetes 会给 Pod 添加一个 key 为 node.kubernetes.io/unreachable 的容忍度 并配置 tolerationSeconds=300,除非用户提供的 Pod 配置中已经已存在了 key 为 node.kubernetes.io/unreachable 的容忍度。
这种自动添加的容忍度意味着在其中一种问题被检测到时 Pod 默认能够继续停留在当前节点运行 5 分钟。
注意:DaemonSet 中的 Pod 被创建时, 针对以下污点自动添加的 NoExecute 的容忍度将不会指定 tolerationSeconds:
node.kubernetes.io/unreachable
node.kubernetes.io/not-ready
这保证了出现上述问题时 DaemonSet 中的 Pod 永远不会被驱逐。
3.实例
目前有2节点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster.cluster.k8s Ready control-plane 208d v1.24.2server Ready 204d v1.24.2
以zookeeper部署作为实例:https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/zookeeper/
3.1.节点master1个污点未被容忍
3.1.1.污点配置
master节点master.cluster.k8s设置key1=value1不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key1=value1:NoSchedulenode/master.cluster.k8s tainted
master节点污点:
server节点污点:
3.1.2.zookeeper配置
不设置容忍
apiVersion: v1kind: Servicemetadata: name: kafka-svc namespace: kafka labels: app: kafkaspec: ports: - port: 9092 name: server clusterIP: None selector: app: kafka---apiVersion: policy/v1beta1kind: PodDisruptionBudgetmetadata: name: kafka-pdb namespace: kafkaspec: selector: matchLabels: app: kafka minAvailable: 2---apiVersion: apps/v1kind: StatefulSetmetadata: name: kafka namespace: kafkaspec: selector: matchLabels: app: kafka serviceName: kafka-svc replicas: 3 template: metadata: labels: app: kafka spec: terminationGracePeriodSeconds: 300 securityContext: runAsUser: 1000 fsGroup: 1000 containers: - name: kafka imagePullPolicy: Always image: duruo850/kafka:v3.3.2 resources: requests: memory: "100Mi" cpu: 100m ports: - containerPort: 9092 name: server command: - sh - -c - "exec kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \ --override listeners=PLAINTEXT://:9092 \ --override zookeeper.connect=zk-0.zk-hs.kafka.svc.cluster.local:2181,zk-1.zk-hs.kafka.svc.cluster.local:2181,zk-2.zk-hs.kafka.svc.cluster.local:2181 \ --override log.dir=/var/lib/kafka \ --override auto.create.topics.enable=true \ --override auto.leader.rebalance.enable=true \ --override background.threads=10 \ --override compression.type=producer \ --override delete.topic.enable=false \ --override leader.imbalance.check.interval.seconds=300 \ --override leader.imbalance.per.broker.percentage=10 \ --override log.flush.interval.messages=9223372036854775807 \ --override log.flush.offset.checkpoint.interval.ms=60000 \ --override log.flush.scheduler.interval.ms=9223372036854775807 \ --override log.retention.bytes=-1 \ --override log.retention.hours=168 \ --override log.roll.hours=168 \ --override log.roll.jitter.hours=0 \ --override log.segment.bytes=1073741824 \ --override log.segment.delete.delay.ms=60000 \ --override message.max.bytes=1000012 \ --override min.insync.replicas=1 \ --override num.io.threads=8 \ --override num.network.threads=3 \ --override num.recovery.threads.per.data.dir=1 \ --override num.replica.fetchers=1 \ --override offset.metadata.max.bytes=4096 \ --override offsets.commit.required.acks=-1 \ --override offsets.commit.timeout.ms=5000 \ --override offsets.load.buffer.size=5242880 \ --override offsets.retention.check.interval.ms=600000 \ --override offsets.retention.minutes=1440 \ --override offsets.topic.compression.codec=0 \ --override offsets.topic.num.partitions=50 \ --override offsets.topic.replication.factor=3 \ --override offsets.topic.segment.bytes=104857600 \ --override queued.max.requests=500 \ --override quota.consumer.default=9223372036854775807 \ --override quota.producer.default=9223372036854775807 \ --override replica.fetch.min.bytes=1 \ --override replica.fetch.wait.max.ms=500 \ --override replica.high.watermark.checkpoint.interval.ms=5000 \ --override replica.lag.time.max.ms=10000 \ --override replica.socket.receive.buffer.bytes=65536 \ --override replica.socket.timeout.ms=30000 \ --override request.timeout.ms=30000 \ --override socket.receive.buffer.bytes=102400 \ --override socket.request.max.bytes=104857600 \ --override socket.send.buffer.bytes=102400 \ --override unclean.leader.election.enable=true \ --override zookeeper.session.timeout.ms=6000 \ --override zookeeper.set.acl=false \ --override broker.id.generation.enable=true \ --override connections.max.idle.ms=600000 \ --override controlled.shutdown.enable=true \ --override controlled.shutdown.max.retries=3 \ --override controlled.shutdown.retry.backoff.ms=5000 \ --override controller.socket.timeout.ms=30000 \ --override default.replication.factor=1 \ --override fetch.purgatory.purge.interval.requests=1000 \ --override group.max.session.timeout.ms=300000 \ --override group.min.session.timeout.ms=6000 \ #--override inter.broker.protocol.version=o.11.0.3 \ --override log.cleaner.backoff.ms=15000 \ --override log.cleaner.dedupe.buffer.size=134217728 \ --override log.cleaner.delete.retention.ms=86400000 \ --override log.cleaner.enable=true \ --override log.cleaner.io.buffer.load.factor=0.9 \ --override log.cleaner.io.buffer.size=524288 \ --override log.cleaner.io.max.bytes.per.second=1.7976931348623157E308 \ --override log.cleaner.min.cleanable.ratio=0.5 \ --override log.cleaner.min.compaction.lag.ms=0 \ --override log.cleaner.threads=1 \ --override log.cleanup.policy=delete \ --override log.index.interval.bytes=4096 \ --override log.index.size.max.bytes=10485760 \ --override log.message.timestamp.difference.max.ms=9223372036854775807 \ --override log.message.timestamp.type=CreateTime \ --override log.preallocate=false \ --override log.retention.check.interval.ms=300000 \ --override max.connections.per.ip=2147483647 \ --override num.partitions=4 \ --override producer.purgatory.purge.interval.requests=1000 \ --override replica.fetch.backoff.ms=1000 \ --override replica.fetch.max.bytes=1048576 \ --override replica.fetch.response.max.bytes=10485760 \ --override reserved.broker.max.id=1000 " env: - name: KAFKA_HEAP_OPTS value: "-Xmx512M -Xms512M" - name: KAFKA_OPTS value: "-Dlogging.level=INFO" volumeMounts: - name: datadir mountPath: /var/lib/kafka readinessProbe: tcpSocket: port: 9092 timeoutSeconds: 1 initialDelaySeconds: 5 volumeClaimTemplates: - metadata: name: datadir spec: accessModes: [ "ReadWriteMany" ] storageClassName: kafka resources: requests: storage: 300Mi
3.1.3.部署
sudo kubectl apply -f zookeeper_not_toleration.yaml
3.1.4.效果
master有1污点:
key1:value1:NoSchedule
被容忍了0个污点:
由于key1污点1在,所以master无法部署,只能在server节点部署
3.2.节点master1个污点被容忍
3.2.1.污点配置
master节点master.cluster.k8s设置key1=value1不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key1=value1:NoSchedulenode/master.cluster.k8s tainted
master节点污点:
server节点污点:
3.2.2.zookeeper配置
设置容忍key1value1
apiVersion: v1kind: Servicemetadata: name: zk-hs labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-cs labels: app: zkspec: ports: - port: 2181 name: client selector: app: zk---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: zk-pdbspec: selector: matchLabels: app: zk maxUnavailable: 1---apiVersion: apps/v1kind: StatefulSetmetadata: name: zkspec: selector: matchLabels: app: zk serviceName: zk-hs replicas: 3 updateStrategy: type: RollingUpdate podManagementPolicy: OrderedReady template: metadata: labels: app: zk spec: securityContext: runAsUser: 1000 fsGroup: 1000 tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" containers: - name: kubernetes-zookeeper imagePullPolicy: Always image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" resources: requests: memory: "200Mi" cpu: "0.1" ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election command: - sh - -c - "start-zookeeper \ --servers=3 \ --data_dir=/var/lib/zookeeper/data \ --data_log_dir=/var/lib/zookeeper/data/log \ --conf_dir=/opt/zookeeper/conf \ --client_port=2181 \ --election_port=3888 \ --server_port=2888 \ --tick_time=2000 \ --init_limit=10 \ --sync_limit=5 \ --heap=512M \ --max_client_cnxns=60 \ --snap_retain_count=3 \ --purge_interval=12 \ --max_session_timeout=40000 \ --min_session_timeout=4000 \ --log_level=INFO" readinessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 volumeMounts: - name: datadir mountPath: /var/lib/zookeeper volumeClaimTemplates: - metadata: name: datadir spec: accessModes: [ "ReadWriteOnce" ] storageClassName: zookeeper resources: requests: storage: 200Mi
3.2.3.部署
sudo kubectl apply -f zookeeper_toleration_key1valu1.yaml
3.2.4.效果
master有1污点:
key1:value1:NoSchedule
被容忍了1个污点:
key1:value1:NoSchedule
由于污点1被容忍,所以master可以部署
3.3. 节点master2个污点1个被容忍
3.3.1.污点配置
master节点master.cluster.k8s设置key1=value1不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key1=value1:NoSchedulenode/master.cluster.k8s tainted
master节点master.cluster.k8s设置key2=value2不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key2=value2:NoSchedulenode/master.cluster.k8s tainted
master节点污点:
server节点污点:
3.3.2. zookeeper配置
设置容忍key1value1
apiVersion: v1kind: Servicemetadata: name: zk-hs labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-cs labels: app: zkspec: ports: - port: 2181 name: client selector: app: zk---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: zk-pdbspec: selector: matchLabels: app: zk maxUnavailable: 1---apiVersion: apps/v1kind: StatefulSetmetadata: name: zkspec: selector: matchLabels: app: zk serviceName: zk-hs replicas: 3 updateStrategy: type: RollingUpdate podManagementPolicy: OrderedReady template: metadata: labels: app: zk spec: securityContext: runAsUser: 1000 fsGroup: 1000 tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" containers: - name: kubernetes-zookeeper imagePullPolicy: Always image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" resources: requests: memory: "200Mi" cpu: "0.1" ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election command: - sh - -c - "start-zookeeper \ --servers=3 \ --data_dir=/var/lib/zookeeper/data \ --data_log_dir=/var/lib/zookeeper/data/log \ --conf_dir=/opt/zookeeper/conf \ --client_port=2181 \ --election_port=3888 \ --server_port=2888 \ --tick_time=2000 \ --init_limit=10 \ --sync_limit=5 \ --heap=512M \ --max_client_cnxns=60 \ --snap_retain_count=3 \ --purge_interval=12 \ --max_session_timeout=40000 \ --min_session_timeout=4000 \ --log_level=INFO" readinessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 volumeMounts: - name: datadir mountPath: /var/lib/zookeeper volumeClaimTemplates: - metadata: name: datadir spec: accessModes: [ "ReadWriteOnce" ] storageClassName: zookeeper resources: requests: storage: 200Mi
3.3.3.部署
sudo kubectl apply -f zookeeper_toleration_key1valu1.yaml
3.3.4.效果
master有2污点:
key1:value1:NoSchedule
key2:value2:NoSchedule
被容忍了1个污点:
key1:value1:NoSchedule
由于key2污点还在,所以master无法部署,只能在server节点部署
3.4. 节点master2个污点2个被容忍
3.4.1.污点配置
master节点master.cluster.k8s设置key1=value1不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key1=value1:NoSchedulenode/master.cluster.k8s tainted
master节点master.cluster.k8s设置key2=value2不可执行的污点:
qiteck@server:~/program/docker_service/zookeeper$ sudo kubectl taint nodes master.cluster.k8s key2=value2:NoSchedulenode/master.cluster.k8s tainted
master节点污点:
server节点污点:
3.4.2. zookeeper配置
设置容忍key1value1key2value2
apiVersion: v1kind: Servicemetadata: name: zk-hs labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-cs labels: app: zkspec: ports: - port: 2181 name: client selector: app: zk---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: zk-pdbspec: selector: matchLabels: app: zk maxUnavailable: 1---apiVersion: apps/v1kind: StatefulSetmetadata: name: zkspec: selector: matchLabels: app: zk serviceName: zk-hs replicas: 3 updateStrategy: type: RollingUpdate podManagementPolicy: OrderedReady template: metadata: labels: app: zk spec: securityContext: runAsUser: 1000 fsGroup: 1000 tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" tolerations: - key: "key2" operator: "Equal" value: "value2" effect: "NoSchedule" containers: - name: kubernetes-zookeeper imagePullPolicy: Always image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" resources: requests: memory: "200Mi" cpu: "0.1" ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election command: - sh - -c - "start-zookeeper \ --servers=3 \ --data_dir=/var/lib/zookeeper/data \ --data_log_dir=/var/lib/zookeeper/data/log \ --conf_dir=/opt/zookeeper/conf \ --client_port=2181 \ --election_port=3888 \ --server_port=2888 \ --tick_time=2000 \ --init_limit=10 \ --sync_limit=5 \ --heap=512M \ --max_client_cnxns=60 \ --snap_retain_count=3 \ --purge_interval=12 \ --max_session_timeout=40000 \ --min_session_timeout=4000 \ --log_level=INFO" readinessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 volumeMounts: - name: datadir mountPath: /var/lib/zookeeper volumeClaimTemplates: - metadata: name: datadir spec: accessModes: [ "ReadWriteOnce" ] storageClassName: zookeeper resources: requests: storage: 200Mi
3.4.3.部署
sudo kubectl apply -f zookeeper_toleration_key1valu1key2value2.yaml
3.4.4.效果
master有2污点:
key1:value1:NoSchedule
key2:value2:NoSchedule
被容忍了2个污点:
key1:value1:NoSchedule
key2:value2:NoSchedule
由于master污点都被容忍了,所以master可以部署:
关键词: 不能容忍
-
全球速看:kubernetes 污点(Taint)和容忍度(Toleration)研究
1 文档官方文档https: kubernetes io zh-cn docs concepts scheduling-eviction taint-and-toleration 2 知识点2
来源: 全球速看:kubernetes 污点(Taint)和容忍度(Toleration)研究
完胜iPhone 14 Pro Max!一加Ace 2连续滑动10万次:没有1次断触
天天快资讯丨河北90后小伙做叶雕月入过万 一张“树叶”售价120元
天天微头条丨米哈游起诉《原神》内鬼泄密 获赔15000元
世界观天下!小米汽车设计文件意外泄密被疯传!小米通报:供应商被罚100万
批判主义的观点是什么?批判主义的代表人物有哪些?
什么是平稳序列?平稳序列的三个条件是什么?
imovie怎么添加音乐?imovie怎么调整视频画面大小?
怎么制作电子图章?图章制作软件有哪些?
罹难怎么读?罹难是什么意思?
平板电视和液晶电视有什么区别?平板电视哪个牌子质量好?
ctrl键无响应是什么原因?ctrl键无响应怎么办?
怎么用电脑打电话?电脑打电话没声音是怎么回事?
手机进水了怎么处理比较好?手机进水了放什么歌可以把水震出来?
csv文件用什么打开?csv文件打开乱码的解决方法
环球快消息!将Windows系统设置为NTP服务器
全球快看:38999元 雷蛇灵刃18游戏本上架:13代i9+RTX 4090
世界球精选!《雷霆沙赞:众神之怒》国内定档3月17日:与北美同步上映
李书福是懂借壳上市的 吉利旗下跑车“路特斯”赴美上市
女子手机不慎落入西湖 “打捞神器”只用30秒捞出
可惜了!《泰坦陨落》还有未公布的单机版游戏 现已被EA砍掉
vmware时间不同步问题
全球热讯:真爱粉!网友凌晨4点花1万多下单三星Galaxy S23 Ultra:直言“早买早享受”
【当前独家】比亚迪元PLUS夺得极寒续航达率成第一 城市高达74.2%
当前短讯!鱼跃血氧仪涨价131%被罚270万!消费者能退差价?客服回应
实时焦点:连点五次才能关:微软全屏通知强推Win11
3D模型 | 回旋火箭弹乐园教程之火箭 有手就会的火箭弹教程,超详细>>
环球快讯:读Java8函数式编程笔记08_测试、调试和重构
世界滚动:18英寸大屏+RTX 40系显卡!ROG枪神7 Plus超竞版图赏
车主注意!明天油价又要调整 加满一箱油可能多花11元
天天新消息丨万元机皇!三星Galaxy S23 Ultra真机图赏
一度濒临破产倒闭!李书福4亿救活的跑车公司:作价364亿上市
Meta搞元宇宙太烧钱 一年亏掉900多亿 CEO被炮轰搞垮公司
三星Galaxy S23/S23+/S23 Ultra有何区别?一文了解
韩国1500年历史的木简刻有生僻汉字引围观:画面让国内网友看尬
世界快资讯丨iPhone 15 Ultra/16 Ultra独占潜望长焦:Pro版本也不香了
环球微动态丨QPython实例02-调用其他app实例
精彩看点:[数据结构] 哈夫曼树
当前最新:路由react-router-dom的使用
ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)
Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite
天天资讯:卖爆了!特斯拉拟提高上海工厂产量:新一轮大降价要来?
【世界新视野】独占高频版骁龙8 Gen2!三星Galaxy S23/S23+发布:5699元起
世界今热点:顶配1.32万元!三星Galaxy S23 Ultra正式发布:2亿像素无敌
“九转大肠”原综艺:比吃答辩还要抽象10倍
144MB缓存秒所有!AMD锐龙7000X3D上市时间、价格公布
天天热资讯!关于STM32CubeIDE无法正常启动GDB服务端的解决办法
世界要闻:【算法训练营day36】LeetCode435. 无重叠区间 LeetCode763. 划分字母区间 LeetCode56. 合并区间
环球信息:小米年货节终极战报出炉:全渠道支付金额破178亿!
今日快讯:Intel Arc显卡驱动DX9游戏性能累计提升43%!性价比秒杀RTX 3060
每日看点!路虎在中国混不下去了
环球新消息丨【缓存】有关HTTP缓存的总结
如何使用单纯的`WebAssembly`
世界新消息丨国美电器董事长发文“反思”国美失势了:核心要务是活下去
1岁萌娃躺地耍赖父母转身离开 这招对90后不管用:网友点赞
天天速递!谁最靠谱?四大品牌23万块硬盘最新故障率报告公布:希捷让人看不懂
Blazor入门100天 : 身份验证和授权 (1)
2023牛客寒假算法基础集训营5
Spring:AOP
世界观察:试用ChatGPT
骁龙8+性能被榨干了!一加Ace 2散热拉满:极致流畅
【时快讯】《狂飙》大结局!高启强手机穿帮:提前两年用上iPhone 8 Plus
《狂飙》的艺术总监是张译:本人主演电影票房破200亿
环球关注:国内第一大加速器里程碑诞生!面积约合20余个足球场
环球视讯!《流浪地球2》导演郭帆:希望能为科幻电影蹚一条路
玩《原神》最爽的手机!一加Ace 2超10万人预约
环球今日报丨宏碁推出TravelMate B系列笔记本:Intel N系列超低功耗U
游客偷带食物喂兔子致大批死亡:还喂发烂叶子 遭网友疯狂谴责
全球速递!海尔发布博越G43系列笔记本:搭载国产X86 CPU
今日精选:尴尬一幕:近年来论文数量激增 但科技界没有创新 3大原因
环球微资讯!300人研发三年!腾讯自研开放世界生存手游《黎明觉醒:生机》定档
今日聚焦!女子价值近20万元的钻戒丢失在高铁站 后续来了
VS Winform程序制作安装包
【世界聚看点】FluentReader 高颜值的rss阅读器
全球热头条丨易基因|细菌全基因组甲基化纳米孔测序(ONT):技术推介
每日简讯:我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台
环球热推荐:再探前端低代码的“野路子”
美国一公司计划复活灭绝的渡渡鸟:还有猛犸象
PC最坏的日子快过去了 苏妈放言:AMD即将触底反弹
环球快讯:500块的产品只要10元 小米商城BUG价遭爆单 后续来了:退单返券
全球微动态丨256G不够了!博主买的小米12S Pro 512G已用掉300多G:光微信就70G
快讯:官方回应小爱下线山东话等方言识别 :无需专门设置也能听懂
记录--原生 canvas 如何实现大屏?
环球关注:鲁大师1月新机性能/流畅榜发布:一加11无悬念夺冠
全球资讯:剧毒可致死!澳大利亚失踪放射性胶囊被寻回:“大海捞针”式搜寻
【报资讯】女子宝娟嗓20年疑似癔症:16岁突然变哑、嗓子却没问题
《流浪地球3》粮食稳了?中科院合成淀粉蛋白新突破
环球今热点:动物园猴子打架输了逃到狮子园:结果好险
Java多线程:Future和FutureTask
【全球时快讯】MySQL-JDBC反序列化分析
快报:市监局回应12.4万保时捷遭抢购后下架:规模较大 正加紧调查
每日快讯!下饭神器:乌江榨菜30袋19.9元大促
快消息!魅族20就快来了!已有魅友抢先体验:称“感觉不错”
焦点快看:故障率惊人!三星昔日旗舰SSD 980 Pro严重翻车 用户投诉多到爆官方出手修复
世界快播:雷军对日本任天堂公司欣赏至极:推崇其为“世界的主宰”
全球新动态:如何将使用中的域名平滑迁移到京东云?(以原域名注册、域名解析都在万网为例)
环球简讯:最新最常用的Windows/office激活工具
世界今热点:HTTP学习笔记3-HTTP报文
关注:【深读】网络测控系统时钟同步PTP时间同步服务器
环球快报:Git 客户端基本使用及新手常见问题