Kubernetes之Pod的調(diào)度實(shí)現(xiàn)方式
在默認(rèn)情況下,一個(gè)pod在哪個(gè)Node節(jié)點(diǎn)上運(yùn)行,是由Scheduler組件采用相應(yīng)的算法計(jì)算出來的,這個(gè)過程是不受人工控制的。
但是在實(shí)際的使用過程當(dāng)中,這并不能滿足需求,因?yàn)樵诤芏嗲闆r下,我們想控制某些Pod到某些節(jié)點(diǎn)上,那么應(yīng)該怎么做呢?
這就要求了解Kubernetes對于Pod的調(diào)度規(guī)則,Kubernetes提供了四大類的調(diào)度方式
- 自動(dòng)調(diào)度:運(yùn)行在哪個(gè)節(jié)點(diǎn)上完全由Scheduler經(jīng)過一系列的計(jì)算得出
- 定向調(diào)度:NodeName,NodeSelector
- 親和性調(diào)度:NodeAffinity、PodAffinity、PodAntiAffinity
- 污點(diǎn)(容忍)調(diào)度:Taints、Toleration
1、定向調(diào)度
定向調(diào)度,指的是利用在pod上聲明NodeName或者nodeSelector,以此將Pod調(diào)度到期望的node節(jié)點(diǎn)上,注意,這里的調(diào)度是強(qiáng)制的,這就意味著即使要調(diào)度的目標(biāo)Node不存在,也會(huì)向上面進(jìn)行調(diào)度,只不過pod運(yùn)行失敗而已。
1.1 NodeName
NodeName用于強(qiáng)制約束將Pod調(diào)度到指定的Name的Node節(jié)點(diǎn)上。這種方式,其實(shí)就是直接跳過Scheduler的調(diào)度邏輯,直接寫入PodList列表。
接下來,就這個(gè)定向調(diào)度創(chuàng)建一個(gè)pod-nodename,yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodename
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
nodeName: k8s-node1 # 指定調(diào)度到node1節(jié)點(diǎn)上去
# 創(chuàng)建Pod
[root@master ~]# vi pod-nodename.yaml
[root@master ~]# kubectl create -f pod-nodename.yaml
pod/pod-nodename created
#修改上面的文件再創(chuàng)建一個(gè)pod改到node2節(jié)點(diǎn)上去,看看效果
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-nodename 1/1 Running 0 2m25s 10.244.36.91 k8s-node1 <none> <none>
pod-nodename2 1/1 Running 0 5s 10.244.169.163 k8s-node2 <none> 對了,這里插一句,關(guān)于Node節(jié)點(diǎn)的名稱,你要查看可以使用命令:
[root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-node1 Ready <none> 12d v1.23.5 k8s-node2 Ready <none> 12d v1.23.5 master Ready control-plane,master 12d v1.23.5
如果我在yaml文件中將nodeName改成了k8s-node3,會(huì)不會(huì)創(chuàng)建成功呢?來試試看:
[root@master ~]# kubectl create -f pod-nodename.yaml pod/pod-nodename2 created [root@master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-nodename2 0/1 Pending 0 14s
1.2 NodeSelector
NodeSelector用于將pod調(diào)度到添加了指定標(biāo)簽的node節(jié)點(diǎn)上,他是通過Kubernetes的label-selector機(jī)制實(shí)現(xiàn)的,也就是說在pod創(chuàng)建之前會(huì)由scheduler使用MatchNodeSelector調(diào)整策略進(jìn)行l(wèi)abel匹配,找出目標(biāo)node,然后將pod調(diào)度到目標(biāo)節(jié)點(diǎn),該匹配規(guī)則是強(qiáng)制約束。
通過一個(gè)小案例,熟悉一下操作:
① 首先分別為node節(jié)點(diǎn)添加標(biāo)簽
[root@master ~]# kubectl label nodes k8s-node1 nodeenv=first node/k8s-node1 labeled [root@master ~]# kubectl label nodes k8s-node2 nodeenv=second node/k8s-node2 labeled
② 創(chuàng)建一個(gè)pod-nodeselector.yaml文件,使用它來創(chuàng)建pod
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeselector
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
nodeSelector:
nodeenv: first # 將pod調(diào)度到nodeenv=first的node上去
# 創(chuàng)建容器并查看是否被放在了指定的node節(jié)點(diǎn)上
[root@master ~]# vi pod-nodeselector.yaml
[root@master ~]# kubectl create -f pod-nodeselector.yaml
pod/pod-nodeselector created
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-nodeselector 1/1 Running 0 19s 10.244.36.92 k8s-node1 <none> <none>
2、親和性調(diào)度
定向調(diào)度雖然使用起來非常方便但是也有一定的問題,那就是如果沒有滿足條件的node,那么pod就不會(huì)運(yùn)行,即使在集群中還有可用的node列表也不行,這也就限制了這種調(diào)度方式的可用場景。
基于這個(gè)問題,Kubernetes還提供了一種親和性調(diào)度(Affinity),他在nodeSelector的基礎(chǔ)上進(jìn)行了擴(kuò)展,可以通過配置的形式,實(shí)現(xiàn)優(yōu)先選擇滿足條件的node進(jìn)行調(diào)度,如果沒有,也可以調(diào)度到不滿足條件的節(jié)點(diǎn)上去,使得調(diào)度更加靈活:
Affinity主要分為三類:
- NodeAffinity(Node親和性):以node為目標(biāo),解決pod可以調(diào)度到哪些node的問題
- podAffinity(pod親和性):以pod為目標(biāo),解決pod可以和哪些已存在的pod部署在同一個(gè)拓?fù)溆蛑?/li>
- podAntiAffinity(pod反親和性):以pod為目標(biāo),解決pod不能和哪些已存在的pod部署在同一個(gè)拓?fù)溆蛑械膯栴}
關(guān)于親和性(反親和性)使用場景的說明:
- 親和性:如果兩個(gè)應(yīng)用頻繁交互,那就有必要利用親和性讓兩個(gè)應(yīng)用盡可能的靠近,這樣可以減少因網(wǎng)絡(luò)通信帶來的性能損耗
- 反親和性:當(dāng)應(yīng)用采用多副本部署時(shí),有必要采用反親和性讓各個(gè)應(yīng)用實(shí)例打散分布在各個(gè)node節(jié)點(diǎn)上,這樣可以提高服務(wù)的高可用性
2.1 NodeAffinity的可選配置項(xiàng)
[root@master ~]# kubectl explain pod.spec.affinity.nodeAffinity
KIND: Pod
VERSION: v1
# 優(yōu)先調(diào)度到滿足指定規(guī)則的node,相當(dāng)于軟限制(傾向)
preferredDuringSchedulingIgnoredDuringExecution <[]Object>
preference #一個(gè)節(jié)點(diǎn)選擇器項(xiàng),與相應(yīng)的權(quán)重相關(guān)聯(lián)
matchFields #按節(jié)點(diǎn)字段列出的節(jié)點(diǎn)選擇器要求列表
matchExpression #按節(jié)點(diǎn)標(biāo)簽列出的節(jié)點(diǎn)選擇器要求列表(推薦)
key #鍵
value #值
operator #關(guān)系符
weight #傾向權(quán)重,0~100之間
#Node節(jié)點(diǎn)必須滿足指定的所有規(guī)則才可以,相當(dāng)于硬限制
requiredDuringSchedulingIgnoredDuringExecution <Object>
nodeSelectorTerms #節(jié)點(diǎn)選擇列表
matchFields #按節(jié)點(diǎn)字段列出的節(jié)點(diǎn)選擇器要求列表
matchExpression #按節(jié)點(diǎn)標(biāo)簽列出的節(jié)點(diǎn)選擇器要求列表(推薦)
key #鍵
value #值
operator #關(guān)系符關(guān)系符的使用說明:
-matchExpression:
-key: nodeenv #匹配存在標(biāo)簽的key為nodeenv的節(jié)點(diǎn)
operator: Exists
-key: nodeenv #匹配標(biāo)簽的key為nodeenv,且value是"xxx"或"yyy"的節(jié)點(diǎn)
operator: In
values:["xxx","yyy"]
-key:nodeenv #匹配標(biāo)簽的key為nodeenv且value大于"xxx"的節(jié)點(diǎn)
operator: Gt
values: "xxx"
先來演示一下 requiredDuringSchedulingIgnoredDuringExecution,創(chuàng)建pod-nodeaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeaffinity-required
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
affinity: # 親和性設(shè)置
nodeAffinity: # 設(shè)置node親和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
nodeSelectorTerms:
- matchExpressions: # 匹配env的值在["xxx","yyy"]中的標(biāo)簽
- key: nodeenv
operator: In
values: ["xxx","yyy"]
# 創(chuàng)建容器
[root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml
pod/pod-affinity-required created
# 先看看node的標(biāo)簽
[root@master ~]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-node1 Ready <none> 12d v1.23.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,nodeenv=first
k8s-node2 Ready <none> 12d v1.23.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,nodeenv=second
master Ready control-plane,master 12d v1.23.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
現(xiàn)在的節(jié)點(diǎn)中,node1和node2的nodeenv標(biāo)簽不存在xxx或者yyy,那么也就意味著這個(gè)pod應(yīng)該是無法運(yùn)行成功的
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-affinity-required 0/1 Pending 0 5m4s
# 使用describe看看調(diào)度失敗的原因
[root@master ~]# kubectl describe pod pod-nodeaffinity-required -n dev
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 22s (x10 over 10m) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't match Pod's node affinity/selector.
現(xiàn)在顯示是失敗,試試xxx改成first重新創(chuàng)建看看
[root@master ~]# vi pod-nodeaffinity-required.yaml [root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml pod/pod-nodeaffinity-required created [root@master ~]# kubectl get pod -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-nodeaffinity-required 1/1 Running 0 12s 10.244.36.93 k8s-node1 <none> <none>
下面再來看看軟限制(requiredDuringSchedulingIgnoredDuringExecution)
創(chuàng)建pod-nodeaffinity-preferred.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeaffinity-preferred
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
affinity: # 親和性設(shè)置
nodeAffinity: # 設(shè)置node親和性
preferredDuringSchedulingIgnoredDuringExecution: # 軟限制
- weight: 1
preference: # 匹配env的值在["xxx","yyy"]中的標(biāo)簽(當(dāng)前環(huán)境中沒有)
matchExpressions:
- key: nodeenv
operator: In
values: ["xxx","yyy"]
~
# 創(chuàng)建pod并查看
[root@master ~]# kubectl create -f pod-nodeaffinity-preferred.yaml
pod/pod-nodeaffinity-preferred created
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-nodeaffinity-preferred 1/1 Running 0 119s 10.244.169.164 k8s-node2 <none> <none> 調(diào)度親和性只在調(diào)度過程中生效,調(diào)度完成后即使node的標(biāo)簽發(fā)生了改變,也不理你了。
2.2 PodAffinity的可選配置項(xiàng)
[root@master ~]# kubectl explain pod.spec.affinity.podAffinity
FIELDS:
# 軟限制
requiredDuringSchedulingIgnoredDuringExecution <[]Object>
namespace # 指定參照pod的namespace
topologyKey # 指定調(diào)度作用域
labelSelector # 標(biāo)簽選擇器
matchExpressions:
key # 鍵
values # 值
operator # 關(guān)系符
matchlabels # 指多個(gè)matchExpressions映射的內(nèi)容
# 軟限制
preferredDuringSchedulingIgnoredDuringExecution <[]Object>
namespace # 指定參照pod的namespace
topologyKey # 指定調(diào)度作用域
labelSelector # 標(biāo)簽選擇器
matchExpressions:
key # 鍵
values # 值
operator # 關(guān)系符
matchlabels # 指多個(gè)matchExpressions映射的內(nèi)容
weight # 權(quán)重topologyKey用于指定調(diào)度時(shí)作用域,例如:
- 如果指定為Kubernetes.io/hostname,那就是以node節(jié)點(diǎn)為區(qū)分范圍
- 如果指定為beta.kubernetes.io/os,則以node節(jié)點(diǎn)的操作系統(tǒng)類型來區(qū)分
1)先創(chuàng)建一個(gè)參照的pod,pod-podaffinity-target.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-podaffinity-target
namespace: dev
labels: # 設(shè)置標(biāo)簽
podenv: target
spec:
containers:
- name: nginx
image: nginx:1.17.1
nodeName: k8s-node1 # 部署到node1上面
#創(chuàng)建并查看pod
[root@master ~]# vi pod-podaffinity-target.yaml
[root@master ~]# kubectl create -f pod-podaffinity-target.yaml
pod/pod-podaffinity-target created
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-podaffinity-target 1/1 Running 0 9s2)創(chuàng)建pod-podaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeaffinity-preferred
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
affinity: # 親和性設(shè)置
podAffinity: # 設(shè)置pod親和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
- labelSelector:
matchExpressions: # 匹配env的值在["xxx","yyy"]中的標(biāo)簽
- key: nodeenv
operator: In
values: ["xxx","yyy"]
topologyKey: kubernetes.io/hostname # 如果找不到,調(diào)度到目標(biāo)pod同一個(gè)節(jié)點(diǎn)上
# 創(chuàng)建并查看
[root@master ~]# kubectl create -f pod-podaffinity-required.yaml
pod/pod-podaffinity-required created
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-podaffinity-required 0/1 Pending 0 8s <none> <none> <none> <none>
pod-podaffinity-target 1/1 Running 0 14m 10.244.36.94 k8s-node1 <none> <none>
[root@master ~]# kubectl describe pod pod-podaffinity-required -n dev
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 13s (x2 over 101s) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't match pod affinity rules.
有一個(gè)節(jié)點(diǎn)上有污點(diǎn)(taint)---主節(jié)點(diǎn)
2.3 podAntiAffinity 反親和性案例
還是將剛才設(shè)置的target作為參照,反親和這個(gè)pod那應(yīng)該被調(diào)度到node2上
apiVersion: v1
kind: Pod
metadata:
name: pod-podantiaffinity-required
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
affinity: # 親和性設(shè)置
podAntiAffinity: # 設(shè)置pod反親和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
- labelSelector:
matchExpressions: # 匹配podenv的值在["target"]中的標(biāo)簽
- key: podenv
operator: In
values: ["target"]
topologyKey: kubernetes.io/hostname # 如果找不到,調(diào)度到目標(biāo)pod同一個(gè)節(jié)點(diǎn)上
# 創(chuàng)建并查看pod
[root@master ~]# kubectl create -f pod-podantiaffinity-required.yaml
pod/pod-podantiaffinity-required created
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-podaffinity-required 1/1 Running 0 10m 10.244.36.95 k8s-node1 <none> <none>
pod-podaffinity-target 1/1 Running 0 28m 10.244.36.94 k8s-node1 <none> <none>
pod-podantiaffinity-required 1/1 Running 0 43s 10.244.169.165 k8s-node2 <none> <none>
3、 污點(diǎn)調(diào)度--站在Node的角度
3.1 污點(diǎn)(Taints)
前面的調(diào)度方式都是站在pod的角度上,通過在Pod上添加屬性,來確定Pod是否需要調(diào)度到指定的Node上,其實(shí)我們也可以站在Node的角度上面,通過在Node上添加污點(diǎn)屬性,來決定是否允許Pod調(diào)度過來。
Node被設(shè)置上污點(diǎn)之后就和Pod之間存在了一種相斥的關(guān)系,進(jìn)而拒絕Pod調(diào)度進(jìn)來,設(shè)置可以將已經(jīng)調(diào)度進(jìn)來的Pod驅(qū)逐出去。
污點(diǎn)的格式為:key=value:effect,key和value是污點(diǎn)的標(biāo)簽,effect描述污點(diǎn)的作用,支持如下的三個(gè)選項(xiàng):
- PreferNoScheduler:Kubernetes盡量避免把Pod調(diào)度到具有該污點(diǎn)的Node上,除非沒有其他節(jié)點(diǎn)可調(diào)度
- NoScheduler:Kubernetes將不會(huì)把Pod調(diào)度到具有該污點(diǎn)的Node上,但不影響當(dāng)前node上已經(jīng)存在的pod
- NoExecute:Kubernetes將不會(huì)把Pod調(diào)度到具有該污點(diǎn)的Node上,同時(shí)也會(huì)講Node上已存在的pod驅(qū)離
# 設(shè)置污點(diǎn) kubectl taint nodes k8s-node1 key=value:effect # 去除污點(diǎn) kubectl taint nodes k8s-node1 key:effect- # 去除所有污點(diǎn) kubectl taint nodes k8s-node1 key-
接下來,演示一下污點(diǎn)的效果:
- 1、準(zhǔn)備節(jié)點(diǎn)node1(暫時(shí)停止node2節(jié)點(diǎn))
- 2、為node1設(shè)置一個(gè)污點(diǎn):tag=qty:PreferNoSchedule;然后創(chuàng)建pod1(可以)
- 3、修改為node1節(jié)點(diǎn)設(shè)置一個(gè)污點(diǎn):tag=qty:NoSchedule;然后創(chuàng)建pod2(pod1正常 pod2失?。?/li>
- 4、修改為node1節(jié)點(diǎn)設(shè)置一個(gè)污點(diǎn):tag=qty:noExecute;創(chuàng)建pod3,全失敗
[root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-node1 Ready <none> 13d v1.23.5 k8s-node2 NotReady <none> 13d v1.23.5 master Ready control-plane,master 13d v1.23.5 # 為node1設(shè)置污點(diǎn) [root@master ~]# kubectl taint nodes k8s-node1 tag=qty:PreferNoSchedule node/k8s-node1 tainted # 創(chuàng)建pod1 [root@master ~]# kubectl run taint1 --image=naginx:1.17.1 -n dev pod/taint1 created [root@master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE taint1 1/1 Running 0 53s # 為node1設(shè)置污點(diǎn),改為NoScheduler [root@master ~]# kubectl taint nodes k8s-node1 tag:PreferNoSchedule- node/k8s-node1 untainted [root@master ~]# kubectl taint nodes k8s-node1 tag=qty:NoSchedule node/k8s-node1 tainted # 創(chuàng)建pod2 [root@master ~]# kubectl run taint2 --image=nginx -n dev pod/taint2 created [root@master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE taint1 1/1 Running 0 7m14s taint2 0/1 Pending 0 11s # 為node1設(shè)置污點(diǎn) [root@master ~]# kubectl taint nodes k8s-node1 tag:NoSchedule- node/k8s-node1 untainted [root@master ~]# kubectl taint nodes k8s-node1 tag=qty:NoExecute node/k8s-node1 tainted # 創(chuàng)建pod3 [root@master ~]# kubectl run taint3 --image=nginx -n dev pod/taint3 created [root@master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE taint3 0/1 Pending 0 4s # 刪除所有污點(diǎn) [root@master ~]# kubectl taint nodes k8s-node1 tag- node/k8s-node1 untainted
3.2 容忍(Toleration)
污點(diǎn)就是拒絕,容忍就是忽略,Node通過污點(diǎn)拒絕pod調(diào)度上去,pod通過容忍忽略拒絕
創(chuàng)建pod-toleration.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-toleration
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
tolerations: # 添加容忍
- key: "tag" # 要容忍的污點(diǎn)的key
operator: "Equal" # 操作符
value: "qty" # 容忍的污點(diǎn)的value
effect: "NoExecute" # 添加容忍的規(guī)則,要和污點(diǎn)的規(guī)則相同
#創(chuàng)建pod查看
[root@master ~]# kubectl create -f pod-toleration.yaml
pod/pod-toleration created
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-toleration 1/1 Running 0 39s
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Kubernetes中Pod容器的資源限制和探針配置方式
- Kubernetes Informer數(shù)據(jù)存儲(chǔ)Index與Pod分配流程解析
- Kubernetes Visitor設(shè)計(jì)模式及發(fā)送pod創(chuàng)建請求解析
- Kubernetes kubectl中Pod創(chuàng)建流程源碼解析
- kubernetes中的namespace、node、pod介紹
- kubernetes?k8s入門定義一個(gè)Pod
- 如何在kubernetes中創(chuàng)建Pod
- 詳解kubernetes pod的編排和生命周期
- 云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解
相關(guān)文章
云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解
這篇文章主要介紹了云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用K8S,感興趣的朋友可以了解下2021-03-03
在K8S中實(shí)現(xiàn)會(huì)話保持的兩種方案
這篇文章主要介紹了在K8S中實(shí)現(xiàn)會(huì)話保持的兩種方案,每種方案結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說明
這篇文章主要為大家介紹了詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)
這篇文章主要給大家介紹了關(guān)于阿里云kubernetes查找鏡像中jar包的方法,也就是在docker查看鏡像中的jar,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
Kubernetes控制器中DaemonSet與Job的使用教程
這篇文章主要介紹了Kubernetes控制器中DaemonSet與Job的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
基于openEuler的Ceph分布式存儲(chǔ)集群部署指南
本文詳細(xì)介紹了如何在openEuler22.03LTS操作系統(tǒng)上部署Ceph分布式存儲(chǔ)集群,包括環(huán)境準(zhǔn)備、軟件倉庫配置、集群初始化、存儲(chǔ)節(jié)點(diǎn)部署、存儲(chǔ)池創(chuàng)建、監(jiān)控集成和性能優(yōu)化等步驟,感興趣的朋友一起看看吧2025-03-03

