溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kubernetes的實(shí)用技巧有哪些

發(fā)布時(shí)間:2021-10-21 13:45:54 來(lái)源:億速云 閱讀:144 作者:iii 欄目:web開(kāi)發(fā)

本篇內(nèi)容主要講解“Kubernetes的實(shí)用技巧有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Kubernetes的實(shí)用技巧有哪些”吧!

 一、kubectl 命令參數(shù)自動(dòng)補(bǔ)全

使用 Kubernetes,就一定會(huì)使用 Kubectl 命令,默認(rèn)安裝好 Kubectl  命令不支持自動(dòng)補(bǔ)全參數(shù)。下面配置 Kubectl 命令參數(shù)自動(dòng)補(bǔ)全方法:

Linux 上,比如 Centos

$ yum install -y bash-completion $ source /usr/share/bash-completion/bash_completion $ source <(kubectl completion bash) $ echo "source <(kubectl completion bash)" >> ~/.bashrc

MAC 上

$ brew install bash-completion $ source $(brew --prefix)/etc/bash_completion $ source <(kubectl completion zsh) $ echo 'source <(kubectl completion zsh)' >> ~/.zshrc

Kubectl 常用操作 [1]

1、如何查找非 running 狀態(tài)的 Pod 呢?

$ kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete

2、如何查找 running 狀態(tài)的 Pod 呢?

$ kubectl get pods -A --field-selector=status.phase=Running | grep -v Complete

3、獲取節(jié)點(diǎn)列表,其中包含運(yùn)行在每個(gè)節(jié)點(diǎn)上的 Pod 數(shù)量?

$ kubectl get po -o json --all-namespaces |    jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'  [   {     "nodeName": "service1",     "count": 6   },   {     "nodeName": "service3",     "count": 13   } ]

4、使用 kubectl top 獲取 Pod 列表并根據(jù)其消耗的 CPU 或 內(nèi)存進(jìn)行排序

# 獲取 cpu $ kubectl top pods -A | sort --reverse --key 3 --numeric  # 獲取 memory $ kubectl top pods -A | sort --reverse --key 4 --numeric

二、添加Namespace默認(rèn)CPU和內(nèi)存限制

有時(shí)候 Pod 沒(méi)有做資源限制,會(huì)因?yàn)閭€(gè)別 Pod  使用量超出,影響整個(gè)宿主機(jī)應(yīng)用。下面給出一個(gè)具體例子,可以根據(jù)實(shí)際情況來(lái)調(diào)整相關(guān)參數(shù)。

apiVersion: "v1" kind: "LimitRange" metadata:   name: "resource-limits"   namespace: default spec:   limits:     - type: "Pod"       max:         cpu: "4"         memory: "4Gi"       min:         cpu: "100m"         memory: "100Mi"     - type: "Container"       max:         cpu: "4"         memory: "4Gi"       min:         cpu: "100m"         memory: "100Mi"       default:         cpu: "500m"         memory: "500Mi"       defaultRequest:         cpu: "100m"         memory: "100Mi"       maxLimitRequestRatio:         cpu: "60"

三、利用 Kubelet 給 Node 預(yù)留資源

evictionHard:   imagefs.available: 15%   memory.available: 1G   nodefs.available: 10%   nodefs.inodesFree: 5%

四、利用 Kubernetes RBAC  劃分好權(quán)限

多個(gè)團(tuán)隊(duì)部署應(yīng)用到一個(gè)kubernetes集群時(shí),情況就可能變得很復(fù)雜。切記不要把管理員權(quán)限開(kāi)放給每個(gè)人。個(gè)人建議是,根據(jù)命名空間來(lái)區(qū)分隔離每個(gè)團(tuán)隊(duì),然后使用RBAC策略只允許各自團(tuán)隊(duì)訪問(wèn)各自的命名空間。

如果我們把管理員權(quán)限開(kāi)放給每個(gè)人,那么在pod級(jí)上進(jìn)行讀取、創(chuàng)建和刪除訪問(wèn)時(shí),可能讓人抓狂,因?yàn)檎`操作的情況會(huì)經(jīng)常發(fā)生。為此,應(yīng)該只允許管理員有權(quán)訪問(wèn),從而將管理集群和部署集群的人員權(quán)限區(qū)分開(kāi)。

五、充分利用 PodDisruptionBudget 控制器

如何保證在 kubernetes 集群中的應(yīng)用程序總能正常運(yùn)行?

答案:是使用 PodDisruptionBudget 控制器。

在進(jìn)行 kubectl drain 操作時(shí),kubernetes 會(huì)根據(jù) PodDisruptionBudget  控制器判斷應(yīng)用Pod集群數(shù)量,進(jìn)而保證在業(yè)務(wù)不中斷或業(yè)務(wù)SLA不降級(jí)的情況下進(jìn)行應(yīng)用Pod銷毀。PDB(PodDisruptionBudget)應(yīng)該放在每個(gè)擁有一個(gè)以上實(shí)例的deployment上。我們可以使用簡(jiǎn)單yaml為集群創(chuàng)建PDB,并使用標(biāo)簽選擇器確定PDB應(yīng)該作用在哪些帶有標(biāo)簽的資源上。

  • 注意:PDB只考慮主動(dòng)中斷,硬件故障之類的情況不在PDB考慮范圍內(nèi)。

例子:

apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata:   name: zk-pdb spec:   minAvailable: 2   selector:     matchLabels:       app: zookeeper

六、使用探針來(lái)檢測(cè)應(yīng)用的狀態(tài)

Kubernetes 支持配置探針。kubelet 使用探針來(lái)確定Pod中應(yīng)用程序是否健康。K8S  提供了兩種類型來(lái)實(shí)現(xiàn)這一功能,Readiness 探針和 Liveiness 探針。

  • Readiness:探針用于確定容器何時(shí)準(zhǔn)備好接收流量。

  • Liveiness:探針用于確定容器是否健康,如果不健康根據(jù)策略判斷是否重新部署一個(gè)新的容器來(lái)替換。

例子:

readinessProbe:   tcpSocket:     port: 8080   initialDelaySeconds: 5   periodSeconds: 10 livenessProbe:   tcpSocket:     port: 8080   initialDelaySeconds: 15   periodSeconds: 20

到此,相信大家對(duì)“Kubernetes的實(shí)用技巧有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI