亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創(chuang)

k8s之連接異常(集群故障)

2024-07-26 09:57:30
45
0

1.k8s集群的能力供應(ying)站(pod)的詳解

Podk8s中的最小(xiao)調度單元(yuan),當(dang)指(zhi)派容(rong)器時(shi),容器(qi)實際上并不會指派到物(wu)理(li)硬件上,容器(qi)會被分配到一個pod里(li),pod代表集群上正在運行的(de)一(yi)(yi)個(ge)進程,一(yi)(yi)個(ge)pod封裝(zhuang)一個容器(qi)(qi)(也可以封裝(zhuang)多個容器(qi)(qi)),pod里的容器共享存儲、網絡等。也就是說,應(ying)該把整個(ge)pod看作虛(xu)擬機,然后每個容器相當于運行(xing)在(zai)虛(xu)擬機的(de)進(jin)程。

2.k8s集群中的pod的用途(tu)

運行(xing)單(dan)個容(rong)器的(de)pod:

Pod里(li)封(feng)裝單個容(rong)器(qi),k8s直(zhi)接管理podpod調度到(dao)哪個物理節(jie)點,pod里的容(rong)器就跟隨(sui)pod調度(du)到哪個節點。

運行多個協同工作的容(rong)器的pod:

Pod里可以運行多(duo)個(ge)容(rong)(rong)器(qi),如初始化容(rong)(rong)器(qi)、業(ye)務容(rong)(rong)器(qi),這些容(rong)(rong)器(qi)之間的互相作用,共享資源。

3.k8s集群中pod一般哪些方面容易出現(xian)問(wen)題

1).k8s資源(yuan)配置錯誤

例如部署deploymentstatefuset,資源清單(dan)書寫有問題(ti),導致pod無法正常創建。

2).代碼問(wen)題

應用程序代碼在容(rong)器(qi)啟動后失敗,那就需要(yao)通過檢查(cha)代碼找錯誤。

3).網絡問題(ti)

網絡插件部(bu)署(shu)有問題,導致pod啟動(dong)之后無法相互通(tong)信。

4).存(cun)儲問題

Pod掛載存(cun)儲,但是需要共享的(de)存(cun)儲連接不上(shang)導致pod啟動異常。

4.pod的(de)狀態為(wei)ContainerCreating狀態的(de)故(gu)障

一般原因(yin)是:后(hou)面node節點(dian)故(gu)障不能工作或網絡ip已被注冊(ce)、也可能是(shi)沒有掛載到(dao)pv的存儲(chu)卷(juan)。

診(zhen)斷方法流程(cheng):

#kubectl get pod -o wide |grep pod#查看pod在哪個節點(dian)

#kubectl describe pod pod#查(cha)看pod的(de)詳細事件(jian)信息

#kubectl logs pod pod[-c 容器名(ming)] #查看pod的日志或某(mou)個容器日志

#systemctl status kubelet #查看pod所在節點(dian)的kubelet服(fu)務狀態

#tailf //kubelet.xx.log #查看pod所在節(jie)點的kubelet服(fu)務日志

1).后面(mian)node節點故障不能工作的處理:

創建(jian)一(yi)個別(bie)的新的pod,看能否(fou)運行(xing)在該node1節點上,如果其他pod能創建在node1節(jie)點,說明可能只是(shi)無法創建的pod本身有(you)問題,如果(guo)所有(you)其他pod都無法在node1節點(dian)創(chuang)建(所有在node節點(dian)創建的pod狀態都是:ContainerCreating),說明(ming)node1節點有問題。

如果已經確定(ding)某個(ge)node節(jie)點有問題(ti)不能(neng)使(shi)用時,需要將node節(jie)點重置(zhi)后(hou)重新加(jia)入集(ji)群:

步驟(zou)如下:

(1).先將該node節(jie)點(dian)上正在運行的pod驅逐(zhu)到其他node節點

(2).#kubeadm reset 在故障node節點(dian)上重(zhong)置k8s集群,執行完(wan)相當于這個節點所有東西都清空(kong)了(操作需要慎重,pod全部驅逐后(hou)再操作)

(3).#systemctl stop kueblet

(4).#systemctl stop docker

(5).#rm -rf /var/lib/kubelet/*

(6).#rm -rf /etc/cni/

(7).#ifconfig cni0 down

(8).#ifconfig flannel.1 down (如(ru)果安裝的是(shi)flannel網絡(luo))

(9).#ip link delete cni0

(10).#ip link delete flannel.1

(11).#systemctl start docker

(12).#systemctl start kubelet

(13)#kubeadmin join … 把node節點重新加入加入k8s集群

2).也可能(neng)是沒有掛載到pv的存儲(chu)卷的處(chu)理:

查(cha)看pv綁定的情況和需求。

步(bu)驟如下:

#kubectl get pod -o wide |grep pod#查看pod所在node節點(dian)

#kubectl describe pod pod#查(cha)看(kan)pod的詳細(xi)信息

若后(hou)臺存(cun)儲(chu)是ceph相關報錯,可能是沒有(you)安(an)裝(zhuang)相(xiang)關程序

#yum -y install ceph-common #再(zai)相應節點(dian)安(an)裝ceph相關程(cheng)序

安裝(zhuang)ceph-common程(cheng)序后,刪除pod: test-ceph后重新運(yun)行(xing)pod,再(zai)查看狀態。

如后臺(tai)存儲是nfs或其他,則查(cha)看相(xiang)關(guan)服務(wu)是否(fou)正常,是否能手動正常掛載。

安(an)裝ceph-common程(cheng)序后(hou),刪除pod: test-ceph后(hou)重新運(yun)行pod,再查(cha)看狀態。

處理思路(lu)總(zong)結:

查看日志時候也(ye)可 -c 容(rong)器名

5.pod的狀態(tai)為pending狀態的故(gu)障(zhang)

Pending狀態:是掛起狀態。表示創建的(de)pod找不(bu)到可以運行(xing)它的物理節點(dian),不(bu)能調度到相應(ying)的節點(dian)上運行(xing)。

1).從兩個層(ceng)面分(fen)析問(wen)題:

(1).物理節點層面分(fen)析:

查看(kan)節點資源(yuan)使用(yong)情況(kuang):

free -m查看內存、top查看cpu使用率、df -h查看(kan)磁盤使用(yong)情(qing)(qing)況(kuang),這樣可以定位節點資源情(qing)(qing)況(kuang),判斷是(shi)不是(shi)節點有(you)問題。也可直接通過監控(kong)查詢(xun)資源使用(yong)情(qing)況(kuang)。

查看節點(dian)污點(dian):

#kubectl describe node node節點名字 ,如(ru)果節點定義了污點,那么(me)pod不(bu)能容(rong)忍污點,就會調度失(shi)敗,可以在yaml文件(jian)里定義容(rong)忍度,則可以試下調度。

(2).pod本身分析:

在定義pod時,如果指(zhi)定了nodeNamenodeSelector選擇(ze)器是不存(cun)在的,那么也會調度失敗(bai)。

在定義(yi)pod時,如果定義(yi)的資源請求比較大,導致物理(li)節點資源不夠也是不會(hui)調度的。

2).查看(kan)node節點是(shi)否有污點的方法:

#kubectl describe node node名(ming)稱 |grep Taints

Taints xxx (看有沒(mei)有,沒(mei)有就是空(kong))

6.pod的狀(zhuang)態為ImagePullBackOff狀態(tai)的故障

1).ImagePullBackOff狀(zhuang)態的原因:

(1).拉取鏡像時間長導致超時.

(2).配(pei)置(zhi)的鏡(jing)像有錯誤:如(ru)鏡(jing)像名字不存在等.

(3).配置的鏡(jing)像(xiang)無法訪(fang)問(wen):如(ru)網絡(luo)限制無法訪問hub上的鏡像(xiang).

(4).配置的私有鏡像(xiang)倉庫參(can)數錯誤:如imagePullSecret沒有配置或(huo)者配置錯誤(wu).

(5).dockerfile打包的鏡像(xiang)不(bu)可用.

2).ImagePullBackOff狀態的(de)排(pai)查思路:

#kubectl get pod -o wide 查看pod在哪個節點

#kubectl describe pod pod名 查看pod的(de)詳細信息

查看到(dao)時(shi)鏡(jing)像拉不下來問題時(shi),可以手動拉(la)一下看看

7.pod的狀態為CrashLoopBackOff狀態的故障

1).CrashLoopBackOff狀態的原因(yin):

pod里(li)面的(de)容器(qi)退出(chu)、多次重啟或準備刪除(chu)。

k8s中的pod正常運行,但是里面的容器可能退(tui)出或者(zhe)(zhe)多次重啟(qi)或者(zhe)(zhe)準備刪除,導(dao)致出現(xian)這個狀態,這(zhe)個狀態具有偶發性,可能(neng)上(shang)一步(bu)還是running狀態,但是突然就變成CrashLoopBackOff狀態(tai)了。

2).CrashLoopBackOff狀態的排查(cha)思路:

#kubectl logs pod[-c 容器名] 查(cha)看pod日志,代碼或環境變量

查看日(ri)志(zhi),查看(kan)構建鏡像用(yong)的代碼是否有問題,如果代碼沒問題,再(zai)看環境變(bian)量是否有(you)問題。

#kubectl describe pod pod名(ming) 查看pod的詳細(xi)信息,limit資源限(xian)制

查看yaml文件(jian)里的limit資(zi)源限(xian)(xian)制,是(shi)否跟資(zi)源限(xian)(xian)制有關。

8.pod的狀態為Error狀態的故障

原因分析:

(1).依賴的configmapsecretpvstorageClass等不存在.

(2).請(qing)求的(de)(de)資源(yuan)超過了管理員設置的(de)(de)限(xian)制,比如超過了limits.

(3).無(wu)法操作集(ji)群內(nei)的資源,比如:開啟rbac,需要為serviceAccount配置權限.

排(pai)查思(si)路:

#kubectl describe pod pod#查看pod詳細信息

#kubectl logs pod pod[-c 容器名] #查看(kan)pod或容器日(ri)志

#kubectl -f -u kubelet #查看kubelet服(fu)務日志

#tail -f /var/log/messages #查看主機日志

9.pod的狀態為TerminatingUnknown狀態的故(gu)障

原因分(fen)析:

Terminating故障是(shi)因為容器里的應用掛了或node節點失聯。

k8s1.5開始,k8s不(bu)會因為node失聯而刪(shan)除(chu)其上正在運行的pod,而是(shi)將(jiang)其標記為TerminatingUnknown狀態。

相應刪除這些狀態的pod4種方法:

1).手動刪除node節點(確定節(jie)點不能(neng)用再刪) # kubectl delete node node節點名稱

2).恢復(fu)正(zheng)常可(ke)選(xuan)擇性刪(shan)除(chu)

node節(jie)點恢復(fu)正常(chang),kubelet會重新跟kube-apiserver通信確認這(zhe)些pod的期待狀(zhuang)態,進而(er)再決定刪(shan)除或者繼續運行這些pod,如果刪除可以通過

# kubectl delete pod pod名(ming) –grace-period=0 --force強制(zhi)刪除(chu)

3).使(shi)用參數重建容(rong)器

4).自動重建pod

注意:節點確實不能(neng)用(yong)了再刪node節(jie)點(dian)。刪除node節(jie)點前,先將部署的pod服務驅逐到其他node節點。

如果node節點已經刪(shan)除了(le),但是使用命令kubectl get pod查看時(shi)該node節點(dian)上還顯示有pod,呈(cheng)現terminating狀態,可以用命令:

# kubectl delete pod pod名(ming) –grace-period --force 強制刪除(chu)該pod

解決思路:

1).# kubectl get node #查看節(jie)點(dian)狀態(tai)和節(jie)點(dian)資(zi)源是否(fou)還充足,df -h free -m

2).# kubectl get pod -n kube-system |grep apiserver #查(cha)看apiserver是否異常

3).查看kubelet日志,查看相(xiang)應node節點的kubelet錯誤(wu)日志(zhi)

10.pod的健康(kang)檢查(存活性(xing)探(tan)測和就緒性(xing)探(tan)測)

1).為什么需要(yao)探針?

如(ru)果沒(mei)有(you)探針,k8s無(wu)法知道應用是否還活著,只(zhi)要pod還(huan)在運行,k8s則認為(wei)容器(qi)時健康的。但實際上,pod雖然運行(xing)了(le),但里面容器中的應用可能(neng)還沒(mei)提供服務,那就需要(yao)做健(jian)康檢(jian)查,健(jian)康檢(jian)查就需要(yao)探針。

2).常(chang)見的(de)探針有以下幾種:

(1).httpGet

對容器的(de)ip地址(指定(ding)的端口(kou)和路(lu)徑)執(zhi)行http get請(qing)求,如果(guo)探測器收到(dao)響應,并且(qie)響應碼是2xx,則認為探測成(cheng)功。如果服務器沒有響(xiang)應或(huo)者返回錯誤(wu)響(xiang)應碼則說明探測失敗,容(rong)器將重啟(qi)。

(2).tcpSocket

探針(zhen)與(yu)容器(qi)指定端口(kou)建立tcp連接(jie),如(ru)果連接(jie)建立則探測成功,否(fou)則探測失(shi)敗容器重(zhong)啟。

(3).exec

在容(rong)器內執行任(ren)意(yi)命令,并檢查命令退出(chu)狀態碼,如果狀態碼為0,則探(tan)(tan)測成功,否則探(tan)(tan)測失敗容器重啟。

3).健康檢查的兩(liang)種(zhong)方式: (livenessProbeReadinessProbe)

(1).LivenessProbe(存(cun)活探測):

探(tan)測pod里的容器是否啟(qi)動成功,如果pod里的容器啟(qi)動成功那pod的狀態就是Running.

(2).ReadinessProbe(就(jiu)緒(xu)探測):

PodRunning的前提下,看pod里容器部署(shu)的(de)應(ying)用(yong)是否就緒,是否可(ke)以對外提供服(fu)務(wu),如果應(ying)用(yong)正(zheng)常(chang),可(ke)以接(jie)受客戶端的(de)請求,則ready是就緒(xu)的。

4).LivenessProbeReadinessProbe區別:

LivenessProbe決定是否重啟(qi)容(rong)器、ReadinessProbe主要來確定容器(qi)是(shi)否已經就緒,只有當pod里的容器部署的應(ying)用都處于(yu)就緒狀態(tai),才會(hui)將請求轉發給容器。

11.token驗證(zheng)問題(ti):(添加節點token過期(qi))

默認kubeadm在安裝集群后,會打(da)印(yin)出join新(xin)節點的(de)命(ming)令(ling)。不過只有24小時(shi)的有效期

kubeadm init --kubernetes-version=1.18.5 --apiserver-advertise-address=${ip} --pod-network-cidr=10.244.0.0/16 --image-repository=dockerhub.example.com

若期望(wang)新增節點,則需要(yao)重新生(sheng)成token,默認是24小(xiao)時(shi)有效期,這(zhe)里(li)可以通(tong)過設置ttl=0為(wei)永久有效(xiao)

kubeadm token create --print-join-command --ttl=0

輸出:

kubeadm join 172.16.10.10:6443 --token q4ge2n.rnwke6l5wmtaglrj    --discovery-token-ca-cert-hash sha256:b64218fa30ae1ca5f8f7e336f935fc7bf84d561a7e29521800b12d5fe34c6819

查(cha)看token列表

kubeadm token list

查看--discovery-token-ca-cert-hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

12.kubectl執(zhi)行異常(chang),無權限連(lian)接到k8s問(wen)題(ti)定位(wei)

kubectl執行異(yi)常的排查:

1) .安(an)裝k8s之后默認是沒有(you)權限操作k8s資源的,可用如下方式(shi)解(jie)決(jue):

mkdir -p $HOME/.kube

sudo cp -rf /etc/kubernetes/admin.conf $HOME/.kube/config

2).也可能是kube-apiserver異常導致。

0條評論
0 / 1000
Liqingsen
7文章數
0粉絲數
Liqingsen
7 文章 | 0 粉絲
原創

k8s之連接異常(集群故障)

2024-07-26 09:57:30
45
0

1.k8s集群的能(neng)力供應(ying)站(pod)的詳解

Podk8s中的最小調度單元,當指派容(rong)器時,容(rong)(rong)器實際(ji)上并不會(hui)指派到(dao)物理硬件上,容(rong)(rong)器會(hui)被分配到(dao)一(yi)個pod里,pod代表集群上正在運行的一個進程,一個pod封裝一個容(rong)器(也可(ke)以封裝多個容(rong)器),pod里的容器(qi)共(gong)享存儲(chu)、網絡(luo)等。也就是說,應該把整個pod看作(zuo)虛擬機(ji),然后每個容器相(xiang)當于運行在虛擬機(ji)的(de)進程。

2.k8s集群中(zhong)的pod的用途

運(yun)行單個容器的pod:

Pod里(li)封(feng)裝單個容器,k8s直接管理podpod調度到(dao)哪個物理(li)節點,pod里(li)的容器就跟隨pod調度到哪個節點。

運行(xing)多個協(xie)同工(gong)作(zuo)的容器的pod:

Pod里可以運行多個容器(qi),如初始化容器(qi)、業(ye)務容器(qi),這(zhe)些容器(qi)之間的互(hu)相作(zuo)用,共享資源。

3.k8s集群中pod一般哪些方面容易出現問題(ti)

1).k8s資源配置(zhi)錯(cuo)誤

例如部署deploymentstatefuset,資(zi)源(yuan)清單書寫有(you)問題,導(dao)致pod無法正常創建。

2).代碼問(wen)題

應(ying)用程序代碼(ma)在容(rong)器啟動后(hou)失(shi)敗(bai),那就需要(yao)通過檢查(cha)代碼(ma)找錯誤。

3).網絡問題

網絡插件(jian)部(bu)署有問題,導(dao)致pod啟(qi)動之后無法相互通信。

4).存儲問(wen)題(ti)

Pod掛載存儲(chu),但是(shi)需要共享的存儲(chu)連接不上(shang)導致pod啟動異(yi)常(chang)。

4.pod的狀態為(wei)ContainerCreating狀態的故障

一般(ban)原因是:后面node節點故(gu)障不能工作(zuo)或網絡ip已被注冊、也(ye)可能是沒有掛載到(dao)pv的存儲卷。

診斷方法(fa)流程:

#kubectl get pod -o wide |grep pod#查看pod在(zai)哪個節點

#kubectl describe pod pod#查看pod的詳細(xi)事件信息

#kubectl logs pod pod[-c 容(rong)器名] #查看pod的(de)日志或某個容器日志

#systemctl status kubelet #查看pod所在節點的kubelet服務狀態

#tailf //kubelet.xx.log #查看pod所在節點的kubelet服務日志

1).后面node節點故障不能工作的處(chu)理:

創建一個別的新的pod,看能否運行(xing)在該(gai)node1節點上,如果(guo)其他pod能創建在node1節點,說(shuo)明可能只是(shi)無(wu)法創(chuang)建的pod本身(shen)有(you)問題,如(ru)果所(suo)有(you)其他pod都無法在(zai)node1節點創建(所(suo)有在node節點創建的pod狀態都是:ContainerCreating),說明(ming)node1節點有問題。

如果已經(jing)確定某(mou)個(ge)node節點有(you)問題不能使用(yong)時,需要將node節點重置后重新加入集群:

步驟如下:

(1).先將(jiang)該node節點上正在運行的pod驅逐到其他node節點

(2).#kubeadm reset 在故障node節點上重置(zhi)k8s集群,執行完(wan)相當于這個節點(dian)所有(you)東西都清空了(操作需要慎重,pod全部驅逐(zhu)后再操(cao)作)

(3).#systemctl stop kueblet

(4).#systemctl stop docker

(5).#rm -rf /var/lib/kubelet/*

(6).#rm -rf /etc/cni/

(7).#ifconfig cni0 down

(8).#ifconfig flannel.1 down (如果安(an)裝的是flannel網絡)

(9).#ip link delete cni0

(10).#ip link delete flannel.1

(11).#systemctl start docker

(12).#systemctl start kubelet

(13)#kubeadmin join … 把node節點重(zhong)新加入加入k8s集群

2).也可能(neng)是沒有掛載到pv的存儲卷的處理:

查看pv綁定(ding)的情(qing)況和(he)需(xu)求(qiu)。

步驟如下:

#kubectl get pod -o wide |grep pod#查看(kan)pod所在node節點

#kubectl describe pod pod名(ming) #查看pod的詳細信息

若后臺存儲是(shi)ceph相關報錯,可能(neng)是沒有安裝相關程序(xu)

#yum -y install ceph-common #再相應節點安裝ceph相關程序

安(an)裝ceph-common程序后,刪除(chu)pod: test-ceph后重新運行pod,再查看狀(zhuang)態。

如后臺存(cun)儲是(shi)nfs或(huo)其他,則查看相(xiang)關服務(wu)是否正(zheng)常(chang),是(shi)否能手動正常掛載。

安(an)裝(zhuang)ceph-common程序后,刪除pod: test-ceph后重新運行(xing)pod,再查看狀態(tai)。

處理思路(lu)總結(jie):

查看日志時候也可 -c 容(rong)器名

5.pod的(de)狀(zhuang)態為pending狀態的故(gu)障

Pending狀態(tai):是掛起(qi)狀態(tai)。表示創建的pod找(zhao)不(bu)到可以運(yun)行(xing)它的(de)物(wu)理節點,不(bu)能調(diao)度(du)到相(xiang)應的(de)節點上運(yun)行(xing)。

1).從兩個層面分析(xi)問題:

(1).物理(li)節點層面分析:

查(cha)看節點資源使用情況:

如(ru)free -m查看內存(cun)、top查看cpu使用(yong)率、df -h查看磁盤使用(yong)情況(kuang),這樣(yang)可以定(ding)位節(jie)點(dian)資(zi)源情況(kuang),判斷是不是節(jie)點(dian)有(you)問題。也可(ke)直(zhi)接(jie)通(tong)過(guo)監控查詢資(zi)源使用情況。

查看(kan)節點污點:

#kubectl describe node node節(jie)點名字 ,如果節點定義了(le)污點,那么(me)pod不能容忍污點,就會調度失敗,可以(yi)在yaml文(wen)件里定義容(rong)忍度,則可以試下(xia)調度。

(2).pod本身(shen)分析:

在定義(yi)pod時(shi),如(ru)果指定(ding)了nodeNamenodeSelector選(xuan)擇器是不(bu)存在(zai)的,那么也會調(diao)度失敗。

在定義pod時(shi),如果定義的(de)(de)資(zi)源(yuan)請(qing)求比較大,導致(zhi)物理節點(dian)資(zi)源(yuan)不(bu)夠也是不(bu)會(hui)調度的(de)(de)。

2).查看node節點(dian)是否有污(wu)點(dian)的方法:

#kubectl describe node node名(ming)稱 |grep Taints

Taints xxx (看有(you)沒(mei)有(you),沒(mei)有(you)就是(shi)空)

6.pod的狀(zhuang)態為ImagePullBackOff狀態的故障

1).ImagePullBackOff狀(zhuang)態的原因:

(1).拉取鏡像時間長(chang)導致(zhi)超時.

(2).配置的鏡像(xiang)有(you)錯(cuo)誤:如鏡像(xiang)名字不存在等.

(3).配置的鏡像無法訪(fang)問:如網絡限制無法訪問(wen)hub上的鏡像.

(4).配置的(de)私有鏡(jing)像倉庫參數錯(cuo)誤:如(ru)imagePullSecret沒(mei)有配(pei)置或者配(pei)置錯誤.

(5).dockerfile打包的鏡像(xiang)不可用.

2).ImagePullBackOff狀(zhuang)態(tai)的排查思(si)路:

#kubectl get pod -o wide 查看pod在哪個節點

#kubectl describe pod pod名 查看pod的詳細信息

查看到(dao)時(shi)鏡像(xiang)拉不(bu)下來問題(ti)時(shi),可以手(shou)動拉一下看(kan)看(kan)

7.pod的狀態為CrashLoopBackOff狀(zhuang)態(tai)的故障(zhang)

1).CrashLoopBackOff狀(zhuang)態的原因:

pod里(li)面的容器(qi)退出、多次重啟或準備(bei)刪除(chu)。

k8s中的pod正(zheng)常運(yun)行,但是(shi)里面的容器可能(neng)退出或(huo)者多次重啟(qi)或(huo)者準(zhun)備刪除,導致出現這(zhe)個狀態(tai),這個狀(zhuang)態具有偶(ou)發性,可能上(shang)一步(bu)還(huan)是running狀態(tai),但是突然就變(bian)成CrashLoopBackOff狀(zhuang)態了。

2).CrashLoopBackOff狀態的排查思路:

#kubectl logs pod[-c 容器名] 查看pod日志,代碼或環境變(bian)量

查看(kan)日志,查(cha)看構(gou)建鏡(jing)像用的代碼(ma)是否有問(wen)題(ti),如(ru)果代碼沒問(wen)題(ti),再(zai)看環(huan)境變(bian)量(liang)是否有問(wen)題(ti)。

#kubectl describe pod pod名 查看pod的詳細(xi)信息,limit資源限制

查看yaml文(wen)件(jian)里的(de)limit資(zi)源限(xian)制(zhi),是否跟(gen)資(zi)源限(xian)制(zhi)有關。

8.pod的狀態為(wei)Error狀態(tai)的故障

原因分析:

(1).依賴(lai)的configmapsecretpvstorageClass等不存在(zai).

(2).請求的資源超(chao)過了(le)管(guan)理(li)員(yuan)設置的限制,比如(ru)超(chao)過了(le)limits.

(3).無法(fa)操作集群內的資(zi)源,比如:開啟(qi)rbac后(hou),需要為serviceAccount配置(zhi)權限.

排查思(si)路:

#kubectl describe pod pod名(ming) #查看pod詳細信息

#kubectl logs pod pod名(ming) [-c 容器名] #查看pod或容器(qi)日志(zhi)

#kubectl -f -u kubelet #查看(kan)kubelet服務日(ri)志

#tail -f /var/log/messages #查看(kan)主機日志

9.pod的狀(zhuang)態為TerminatingUnknown狀態的故障

原(yuan)因分(fen)析:

Terminating故障(zhang)是(shi)因為容器(qi)里的(de)應用掛了或(huo)node節點失(shi)聯。

k8s1.5開始,k8s不會因為node失聯而刪除其上正在運(yun)行的(de)pod,而是將其標記(ji)為TerminatingUnknown狀態(tai)。

相應刪除這些狀態的pod4種方法:

1).手動(dong)刪(shan)除node節點(確定節點不能(neng)用再(zai)刪) # kubectl delete node node節(jie)點名稱

2).恢復正常(chang)可選擇性刪除

node節點恢(hui)復正常(chang),kubelet會重新跟kube-apiserver通(tong)信確認這些pod的期待狀態,進(jin)而再(zai)決定刪除或者繼續運行這些pod,如果(guo)刪除可以通過

# kubectl delete pod pod名 –grace-period=0 --force強制刪除

3).使(shi)用參數重建容器

4).自動(dong)重(zhong)建pod

注意:節點確實不能用了再刪node節點。刪除node節點前,先將部署的pod服務(wu)驅(qu)逐到(dao)其他(ta)node節點(dian)。

如果node節點已經刪除了,但是使用命(ming)令kubectl get pod查(cha)看時(shi)該node節點上(shang)還顯示(shi)有pod,呈(cheng)現terminating狀(zhuang)態,可以用(yong)命令:

# kubectl delete pod pod名(ming) –grace-period --force 強制刪除該pod

解決(jue)思路:

1).# kubectl get node #查看節點狀態和節點資(zi)源是否還充足,df -h free -m

2).# kubectl get pod -n kube-system |grep apiserver #查(cha)看apiserver是否(fou)異常

3).查(cha)看kubelet日志,查看相應node節(jie)點的kubelet錯誤日志

10.pod的(de)健康檢查(存活性探測和就緒性探測)

1).為什么需要探針(zhen)?

如果沒有探針(zhen),k8s無(wu)法(fa)知道應(ying)用(yong)是否還(huan)活著,只(zhi)要pod還在運行,k8s則(ze)認為容器時(shi)健(jian)康的。但實際上,pod雖(sui)然運行了,但里面容器中(zhong)的(de)應用(yong)可(ke)能還沒提供服(fu)務,那(nei)就需(xu)要做健康檢查(cha),健康檢查(cha)就需(xu)要探(tan)針。

2).常見的探(tan)針(zhen)有以下幾種:

(1).httpGet

對(dui)容(rong)器的ip地址(指定(ding)的端口和路徑(jing))執行http get請求,如果探測器收到響應,并且響應碼是(shi)2xx,則(ze)(ze)認為(wei)探測(ce)成功。如果服務器(qi)沒有(you)響(xiang)應(ying)或(huo)者返(fan)回錯(cuo)誤響(xiang)應(ying)碼則(ze)(ze)說明(ming)探測(ce)失敗(bai),容器(qi)將(jiang)重啟。

(2).tcpSocket

探(tan)針與容(rong)器指定(ding)端(duan)口(kou)建立tcp連接,如(ru)果(guo)連接建立則探(tan)測成功,否則探(tan)測失敗容器重啟(qi)。

(3).exec

在容器內(nei)執行(xing)任(ren)意命令,并(bing)檢查命令退出狀態碼,如果狀態碼為0,則探測成功,否則探測失敗容器重啟(qi)。

3).健康檢查(cha)的兩種方式: (livenessProbe和(he)ReadinessProbe)

(1).LivenessProbe(存(cun)活探測):

探測pod里的容器是否啟動成功,如果pod里的(de)容器啟(qi)動(dong)成(cheng)功(gong)那pod的(de)狀態(tai)就是(shi)Running.

(2).ReadinessProbe(就緒探測):

Pod是(shi)Running的前(qian)提下,看pod里容器(qi)部(bu)署(shu)的(de)應用是否就緒,是否可以(yi)對外提供(gong)服務,如果應用正常(chang),可以(yi)接受客戶端的(de)請(qing)求,則ready是就(jiu)緒(xu)的。

4).LivenessProbeReadinessProbe區別:

LivenessProbe決定是(shi)否重(zhong)啟容器、ReadinessProbe主(zhu)要來(lai)確定容器是(shi)否(fou)已經就緒,只(zhi)有當pod里的容器(qi)部署(shu)的應(ying)用(yong)都處于就緒狀態,才(cai)會將請(qing)求(qiu)轉發給容器(qi)。

11.token驗(yan)證問題:(添加(jia)節點(dian)token過期(qi))

默(mo)認kubeadm在安裝集群后,會打印出join新節點(dian)的命令(ling)。不過只有24小時(shi)的有效期

kubeadm init --kubernetes-version=1.18.5 --apiserver-advertise-address=${ip} --pod-network-cidr=10.244.0.0/16 --image-repository=dockerhub.example.com

若期望(wang)新增節(jie)點,則需要(yao)重新生(sheng)成token,默認是24小時(shi)有效(xiao)期,這里(li)可以通過設(she)置(zhi)ttl=0為永久有效(xiao)

kubeadm token create --print-join-command --ttl=0

輸(shu)出:

kubeadm join 172.16.10.10:6443 --token q4ge2n.rnwke6l5wmtaglrj    --discovery-token-ca-cert-hash sha256:b64218fa30ae1ca5f8f7e336f935fc7bf84d561a7e29521800b12d5fe34c6819

查看token列表

kubeadm token list

查看(kan)--discovery-token-ca-cert-hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

12.kubectl執行異常,無權限連接到(dao)k8s問題定位(wei)

kubectl執行異常的排查:

1) .安(an)裝k8s之后默認是(shi)沒有權限操作k8s資源的,可用(yong)如(ru)下方式解決:

mkdir -p $HOME/.kube

sudo cp -rf /etc/kubernetes/admin.conf $HOME/.kube/config

2).也可能是kube-apiserver異常導(dao)致。

文章來自個人專欄
文章 | 訂(ding)閱(yue)
0條評論
0 / 1000
請輸入你的評論
0
0