istio kiali 親和性排程

2022-05-17 04:25:07 字數 4057 閱讀 3487

在開始 kiali 親和性排程之前,先演示乙個簡單的例子介紹 pod 選擇排程到指定 node:

使用命令檢視當前所有 k8s 節點:

[root@k8s-master ~]# kubectl get nodes

name status roles age version

k8s-master ready master 5h11m v1.18.1

k8s-node01 ready 5h8m v1.18.1

kubectl label node k8s-node01 name=xiao

kind: deployment

metadata:

spec:

selector:

matchlabels:

replicas:

1template:

metadata:

labels:

spec:

containers:

ports:

- containerport: 5000

nodeselector:

name: xiao

[root@k8s-master ~]# kubectl get pods -

o wide

name ready status restarts age ip node nominated node readiness gates

上面舉例 pod 使用 nodeselector 選擇 node,這就是最簡單的 k8s 排程方式。

節點親和性排程策略示例:

apiversion: v1

kind: pod

metadata:

name: with-node-affinity

spec:

affinity:

nodeaffinity:

requiredduringschedulingignoredduringexecution:

nodeselectorterms:

-matchexpressions:

- key: kubernetes.io/e2e-az-name

operator: in

values:

- e2e-az1

- e2e-az2

preferredduringschedulingignoredduringexecution:

- weight: 1

preference:

matchexpressions:

- key: another-node-label-key

operator: in

values:

- another-node-label-value

containers:

- name: with-node-affinity

image: k8s.gcr.io/pause:2.0

舉乙個生活的例子,以前去醫院看病,病人(pod)不能挑醫生(node),排隊叫到誰就是誰,冷冰冰完全沒有親和性而言;如今可以網上**了,病人也可以挑選中意的醫生,這樣就有了親和性,說明社會進步了。

當然病人在挑選醫生的過程中也會有兩種情況:一種是硬性(required),比如非要某醫生,即使他忙,也願意一直等下去;還有一種是軟性(prefered),比如優先選擇某醫生,但是如果真不行,其他醫生也未嘗不可。

下面的理論可以對照上面的例子。

節點親和性,也就是 nodeaffinity,用來控制 pod 部署或者不能部署在哪台機器上。

節點親和性排程策略分為硬策略分為軟策略和硬策略兩種方式。硬策略是如果沒有滿足條件的節點,就會不斷重試直到條件滿足了為止;軟策略是如果沒有滿足條件的節點,pod 就會忽略這條規則,繼續完成排程過程。

節點親和性軟硬策略的語法分別介紹如下。

requiredduringschedulingignoredduringexecution:

pod 必須部署到滿足條件的節點上,如果節點不滿足條件,就不停重試。

preferredduringschedulingignoredduringexecution:

pod 優先部署到滿足條件的節點,如果節點不滿足條件,就忽略這些條件,排程到其他節點。

kind: deployment

metadata:

name: redis-cache

spec:

selector:

matchlabels:

replicas:

3template:

metadata:

labels:

spec:

affinity:

podantiaffinity:

requiredduringschedulingignoredduringexecution:

-labelselector:

matchexpressions:

operator: in

values:

-store

topologykey:

"kubernetes.io/hostname

"containers:

- name: redis-server

image: redis:

3.2-alpine

kind: deployment

metadata:

name: redis-cache

spec:

selector:

matchlabels:

replicas:

3template:

metadata:

labels:

spec:

affinity:

podantiaffinity:

requiredduringschedulingignoredduringexecution:

-labelselector:

matchexpressions:

operator: in

values:

- web-store

topologykey:

"kubernetes.io/hostname

"podaffinity:

requiredduringschedulingignoredduringexecution:

-labelselector:

matchexpressions:

operator: in

values:

-store

topologykey:

"kubernetes.io/hostname

"containers:

image: nginx:

1.12-alpine

舉例3kind: deployment

metadata:

name: web-server

spec:

selector:

matchlabels:

replicas:

3template:

metadata:

labels:

spec:

affinity:

podaffinity:

requiredduringschedulingignoredduringexecution:

-labelselector:

matchexpressions:

operator: in

values:

- web-store

topologykey:

"kubernetes.io/hostname

"containers:

image: hub.easystack.io/library/nginx:1.9.0

在一些應用中,pod副本之間需要共享cache,需要將pod執行在乙個節點之上

親和性 反親和性 汙點 容忍

在預設的k8s排程中,一般經過預選和優選即可完成排程,但是生產的實際使用中,考慮到部分業務的特殊性,一般會手動進行一些 指定 k8s 把這些 指定 分為nodeaffinity 節點親和性 podaffinity pod 親和性 以及 podantiaffinity pod 反親和性 這在排程過程中...

pod 的親和性,反親和性 實驗

pod 的親和性,反親和性 實驗 目錄 設定node01和node02節點,擁有標籤 test a root master demo kubectl label nodes node test a overwrite node node01 labeled node node02 labeled 檢...

親和性分析

小編最近在看 robert layton 的資料探勘,寫隨筆一方面為了加深印象,一方面為了以後方便看。通常 為了增大需求,常常把顧客願意一起買的東西放在一起。這樣顧客買的機率較大,能夠刺激消費。最簡單的例子就是,你買了羊肉卷,那你肯定也想買墨魚丸,買了墨魚丸,想到了火鍋底料,如果你沒有想到的化,那麼...