有名的网站建设公司做网站的要多少钱

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

有名的网站建设公司,做网站的要多少钱,哪个建设网站好,深圳市工程交易服务主页概述 节点亲和性是pod的一种属性#xff08;优先选择或硬性要求#xff09;#xff0c;它使 pod 被优先分配到一类特定的节点上。而Taint则相反#xff0c;它使节点能够排斥一类特定的 pod。 Taints#xff08;污点#xff09;与tolerations#xff08;容忍度#xf…概述 节点亲和性是pod的一种属性优先选择或硬性要求它使 pod 被优先分配到一类特定的节点上。而Taint则相反它使节点能够排斥一类特定的 pod。 Taints污点与tolerations容忍度一起工作确保Pod不会被调度到不合适的节点上。Taints是node的属性单个节点可以添加多个taint污点node不接受无法容忍taint污点的pod的调度。Toleration容忍度是pod的属性允许非强制pod调度到taints污点相匹配的node上去。注意taints是node的属性tolerations是pod的属性。 操作 添加 #通过kubectl taint为node添加taint如 kubectl taint nodes k8s-node1 keyvalue:NoSchedule为node节点 k8s-node1增加一条taint污点。Taint污点的关键字为key值为valuetaint污点影响NoSchedule。意味着如果pod没有设置容忍该污点pod将不会被调度到k8s-node1上除非Pod它有设置匹配的toleration容忍度。 删除 #为k8s-node1删除刚才添加的taints如下 kubectl taint nodes k8s-node1 key:NoSchedule-可以为pod指定toleration容忍度。以下的两种toleration容忍度都与上文中创建的taint污点匹配因此这个pod有可能被调试到k8s-node1上。 tolerations:

  • key: keyoperator: Equalvalue: valueeffect: NoSchedule tolerations:
  • key: keyoperator: Existseffect: NoScheduleToleration容忍度与taint污点匹配的条件是key相同、effect相同并且 operator的值是Exists无需指定values的值operator的值是Equal并且values的值相等 而如果不指定operator默认是Equal。 注意两种特殊情况。 如果一个 toleration 的 key 为空且 operator 为 Exists 表示这个 toleration 与任意的 key 、 value 和 effect 都匹配即这个 toleration 能容忍任意 taint。 tolerations:
  • operator: Exists空effect表示匹配所有effect如 tolerations:
  • key: keyoperator: Exists即空则匹配所有 上例中用到了NoSchedule的effect。另外可以使用PreferNoSchedule的effect这是NoSchedule的“偏好”或者“软“版本。系统尽量避免非tolerate的pod调度到taint node上但非强制要求。effect 的值还可以设置为 NoExecute。 其中 [effect] 可取值:[ NoSchedule | PreferNoSchedule | NoExecute ] NoSchedule: 一定不能被调度 PreferNoSchedule: 尽量不要调度实在没有地方调度的情况下才考虑可以调度过来 NoExecute: 不仅不会调度, 还会立即驱逐Node上已有的Pod 添加多个tainit污点 可以为单个node指定多条taint污点也可以为单个pod指定多条toleration容忍度。系统采用过滤的方式处理这种情况首先从node的所有taint污点开始然后将与pod中的toleration容忍度相匹配的taint污点删除余下的taint污点对部署进来的pod产生影响。特别地 如果余下的taint污点中至少有一条的effect是NoSchedulekubernetes将不会高度这个pod到的node上。如果余下的taint污点中没有effect为NoSchedule的taint污点但至少有一条effect为PreferNoSchedule则系统尝试着不将pod部署在node上也就是有可能还是会部署到这个node上。如果余下的taint污点中至少有一条的effect是NoExecute那么不旦新的pod不会被调度到这个node上而且已经运行在这个node上的pod还会被驱逐出去。 例如假如像这样taint一个node kubectl taint nodes k8s-node1 key1value1:NoSchedule kubectl taint nodes k8s-node1 key1value1:NoExecute kubectl taint nodes k8s-node1 key2value2:NoSchedulepod有两个toleration tolerations:
  • key: key1operator: Equalvalue: value1effect: NoSchedule
  • key: key1operator: Equalvalue: value1effect: NoExecute这种情况下pod不能调度到该node上。因为pod没有toleration容忍度与node的第三条taint污点匹配。但是如果在给节点添加 上述 taint 之前该 pod 已经在上述节点运行那么它还可以继续运行在该节点上因为第三个 taint 是三个 taint 中唯一不能被这个 pod 容忍的。 一般情况下如果一个effect为NoExecute的taint污点应用于node运行在node上的所有不能容忍这条taint污点的pod都会被排挤出node能容忍这种taint污点的pod则不会被排挤。然而如果effect为NoExecute的toleration容忍度指定给pod同时添加可选的tolerationSeconds字段则表示pod被排挤出node之前以taint污点的添加时间为起点允许此pod在此node上的生存时间。 #例如 tolerations:
  • key: key1operator: Equalvalue: value1effect: NoExecutetolerationSeconds: 3600#表示可以多存活3600秒。 默认情况下kubernetes会自动添加一些基础的容忍度。如下是kubernetes1.19.16版本添加的不同版本可能有所区别请自行查看。 Tolerations: node.kubernetes.io/not-ready:NoExecute opExists for 300snode.kubernetes.io/unreachable:NoExecute opExists for 300s使用案例 Taints与tolerations可以灵活的控制pod远离node或者将不应该运行的pod从node上排挤出去。以下是几个使用案例 专用node如果打算指定特定node集合供特定用户专用那么可以给这些node添加一条taintkubectl taint nodes nodename dedicatedgroupName:NoSchedule然后在相应的pod上添加匹配的toleration容忍度。拥有toleration的pod被允许像使用集群中的其它node一样使用拥有taint的node。如果打算让pod只使用taint性质的node并且只能使用taint的node的话可以对这些taint的node再额外增加标签例如dedicatedgroupName然后再通过入口控制器为这些pod额外再增加亲和性要求它们只能部署到拥有dedicatedgroupName的node上。总结就是通过标签的亲和性控制pod部署到特定的node上通过为node增加taint并且为pod增加toleration抵制其它pod部署到这些node上从而实现node专用。拥有特殊硬件的node在集群中有少数node拥有特殊的硬件配置例如 GPUs希望那些不使用特殊的硬件的pod尽量不要部署到这些拥有特殊硬件的node上为后续到达的需要使用特殊硬件的pod预留出空间。通过如下方法达到这个目的。首先为node添加tainttaint表示node拥有特殊硬件例如 kubectl taint nodes nodename specialtrue:NoSchedule 或者 kubectl taint nodes nodename specialtrue:PreferNoSchedule然后为需要使用特殊硬件的pod添加相应的toleration。像专用node的例子一样通过入口控制器很容易为pod添加对应的toleration。例如推荐使用“扩展资源”代表特殊硬件使用“扩展资源”的名称为拥有特殊硬件的node添加taint当提交的pod被配置为需要使用特殊硬件时扩展资源入口控制器自动为其加上正确的toleration。基于taint的驱逐测试特性一种当node出现问题时per-pod-configurable的驱逐行为下节介绍。 基于taint的驱逐: 先前提到的effect为NoExecute的taint它对已经运行在node上的pod的影响如下 如果pod没有toleration这个taint的话pod立即被驱逐。 如果toleration了这个taint并且没有指定tolerationSeconds的值则一直不会驱逐 如果toleration了这个taint但是指定tolerationSeconds限定了容忍的时间则到期后驱逐 此外Kubernetes用taint代表node出了问题1.13beta版。换句话说当Node某些条件为True时节点控制器自动为Node节点添加污点而在状态为Ready的Node上之前设置过的普通的驱逐逻辑将会被禁用。内置以下污点 node.kubernetes.io/not-ready节点尚未就绪。这对应于NodeCondition Ready为“ False”。 node.kubernetes.io/unreachableNode controlloer无法访问节点。这对应于NodeCondition Ready为“ Unknown”。 node.kubernetes.io/out-of-disk节点变得磁盘不足。 node.kubernetes.io/memory-pressure节点有内存压力。 node.kubernetes.io/disk-pressure节点有磁盘压力。 node.kubernetes.io/network-unavailable节点的网络不可用。 node.kubernetes.io/unschedulable节点是不可调度的。 node.cloudprovider.kubernetes.io/uninitialized当使用“外部”云提供程序启动kubelet时会在节点上设置此污点以将其标记为不可用。在cloud-controller-manager的控制器初始化此节点后kubelet将删除此污点。 注意在节点故障的情况下为了保持现存的Pod驱逐的限速设置系统将会以限速的模式逐步给Node设置Taint这就能避免在一些特定情况下比如Master暂时失联大量的Pod被驱逐。这一功能兼容于tolerationSeconds允许Pod定义节点故障时持续多久才被逐出。 例如一个包含很多本地状态的应用可能需要在网络发生故障时还能持续在节点上运行期望网络能够快速恢复从而避免被从这个节点上驱逐。Pod的toleration可以这样定义 tolerations:
  • key: node.kubernetes.io/unreachableoperator: Existseffect: NoExecutetolerationSeconds: 6000对于Node未就绪状态可以把Key设置为node.kubernetes.io/not-ready如果没有为Pod指定node.kubernetes.io/not-ready 的Tolerations那么Kubernetes会自动为Pod加入tolerationSeconds 300的node.kubernetes.io/not-ready 类型的Tolerations 同样如果Pod没有定义node.kubernetes.io/unreachable的Tolerations那么系统会自动为其加入tolerationSeconds300的node.kubernetes.io/unreachable类型的Tolerations 这些系统自动设置的Tolerations在Node发现问题时能够为Pod确保驱逐前再运行5min。这两个默认 toleration 是由 DefaultTolerationSeconds admission controller添加的。 DaemonSet 中的 pod 被创建时针对以下 taint 自动添加的 NoExecute 的 toleration 将不会指定 tolerationSeconds node.alpha.kubernetes.io/unreachablenode.kubernetes.io/not-ready 这保证了出现上述问题时 DaemonSet 中的 pod 永远不会被驱逐这和 TaintBasedEvictions 这个特性被禁用后的行为是一样的。 驱逐阈值设定 其阈值由kubelet如下参数控制 –eviction-hard驱逐阈值(例如memory.available1Gi)如果满足这些阈值就会触发pod驱逐。(默认imagefs.available 15%, memory.available 100 mi, nodefs.available 10%, nodefs.inodesFree 5%) –eviction-soft驱逐阈值(例如memory.available1.5Gi)如果在相应的宽限期内达到该阈值就会触发pod驱逐。 –eviction-minimum-reclaim最小回收(例如imagef .available2Gi)描述kubelet在执行pod回收(如果该资源处于压力之下)时回收的最小资源量。 –eviction-pressure-transition-periodkubelet必须等待一段时间才能从驱逐压力状态过渡出来。(默认5m0) 优化方案 二进制部署方式 编辑kubelet-conf.yml文件修改默认阈值来调整驱逐条件
  • pods eventBurst: 10 eventRecordQPS: 5 evictionHard:imagefs.available: 15%memory.available: 100Minodefs.available: 10%nodefs.inodesFree: 5% evictionPressureTransitionPeriod: 5m0skubeadm部署方式 mkdir -p /sys/fs/cgroup/cpu,cpuacct/kubelet.slice mkdir -p /sys/fs/cgroup/memory/kubelet.slice mkdir -p /sys/fs/cgroup/systemd/kubelet.slice mkdir -p /sys/fs/cgroup/pids/kubelet.slice mkdir -p /sys/fs/cgroup/cpu,cpuacct/kubelet.slice mkdir -p /sys/fs/cgroup/cpuset/kubelet.slice mkdir -p /sys/fs/cgroup/hugetlb/kubelet.slicecat /var/lib/kubelet/config.yamlEOF enforce-node-allocatable: pods,kube-reserved,system-reserved kube-reserved-cgroup: /system.slice/kubelet.service system-reserved-cgroup: /system.slice kube-reserved: cpu1,memory1500Mi system-reservedcpu: 500m,memory1Gi eviction-hard: memory.available5%,nodefs.available10%,imagefs.available10% eviction-soft: memory.available10%,nodefs.available15%,imagefs.available15% eviction-soft-grace-period: memory.available2m,nodefs.available2m,imagefs.available2m eviction-max-pod-grace-period: 30 eviction-minimum-reclaim: memory.available0Mi,nodefs.available500Mi,imagefs.available500Mi EOF然后重启kubelet服务 更多关于kubernetes的知识分享请前往博客主页。编写过程中难免出现差错敬请指出