在開始 kiali 親和性排程之前,先演示乙個簡單的例子介紹 pod 選擇排程到指定 node:
使用命令檢視當前所有 k8s 節點:
[root@k8s-master ~]# kubectl get nodesname 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 的資料探勘,寫隨筆一方面為了加深印象,一方面為了以後方便看。通常 為了增大需求,常常把顧客願意一起買的東西放在一起。這樣顧客買的機率較大,能夠刺激消費。最簡單的例子就是,你買了羊肉卷,那你肯定也想買墨魚丸,買了墨魚丸,想到了火鍋底料,如果你沒有想到的化,那麼...