k8s創(chuàng)建pod
pod的啟動(dòng)流程
流程圖
運(yùn)維人員向kube-apiserver發(fā)出指令(我想干什么,我期望事情是什么狀態(tài))
api響應(yīng)命令,通過一系列認(rèn)證授權(quán),把pod數(shù)據(jù)存儲(chǔ)到etcd,創(chuàng)建deployment資源并初始化。(期望狀態(tài))
controller通過list-watch機(jī)制,監(jiān)聽api server讀取etcd,發(fā)現(xiàn)新的deployment,將該資源加入到內(nèi)部工作隊(duì)列,發(fā)現(xiàn)該資源沒有關(guān)聯(lián)的pod和replicaset,啟用deployment controller創(chuàng)建replicaset資源,再啟用replicaset controller創(chuàng)建pod。所有controller被創(chuàng)建完成后.將deployment,replicaset,pod資源更新存儲(chǔ)到etcd。
scheduler通過list-watch機(jī)制,監(jiān)聽api server讀取etcd,發(fā)現(xiàn)新的pod,經(jīng)過主機(jī)過濾、主機(jī)打分規(guī)則,將pod綁定(binding)到合適的主機(jī),并將綁定結(jié)果存儲(chǔ)到etcd。
kubelet每隔 20s(可以自定義)向apiserver獲取自身Node上所要運(yùn)行的pod清單.通過與自己的內(nèi)部緩存進(jìn)行比較,用容器運(yùn)行時(shí)軟件(docker或containerd)拉取鏡像創(chuàng)建pod。
kube-proxy為新創(chuàng)建的pod注冊動(dòng)態(tài)DNS到CoreOS。給pod的service添加iptables/ipvs規(guī)則,用于服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
controller通過control loop(控制循環(huán))將當(dāng)前pod狀態(tài)與用戶所期望的狀態(tài)做對(duì)比,如果當(dāng)前狀態(tài)與用戶期望狀態(tài)不同,則controller會(huì)將pod修改為用戶期望狀態(tài),實(shí)在不行會(huì)將此pod刪掉,然后重新創(chuàng)建pod。
?
實(shí)踐案例:控制器的方式創(chuàng)建nginx的pod
流程圖
1.使用kubectl創(chuàng)建nginx的pod
[root@k8s-master ~]# kubectl create deployment k8s-nginx --image=nginx -r 3
?
相當(dāng)于docker run去啟動(dòng)容器,背后一樣要去拉取鏡像
- create deployment,創(chuàng)建部署控制器
- k8s-nginx,命名部署控制器
- –image,指定使用的鏡像
- -r 3,建立三個(gè)副本,刪除后也會(huì)自動(dòng)補(bǔ)充
2.查看部署控制器
[root@k8s-master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
k8s-nginx 3/3 3 3 14m
?3.查看副本控制器
[root@k8s-master ~]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
k8s-nginx-75f95db655 3 3 3 15m
4.查看pod的詳細(xì)信息
[root@k8s-master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
k8s-nginx-75f95db655-24mfb 1/1 Running 0 17m 10.244.140.73 k8s-node-2 <none> <none>
k8s-nginx-75f95db655-fl5cc 1/1 Running 0 17m 10.244.109.81 k8s-node-1 <none> <none>
k8s-nginx-75f95db655-txf25 1/1 Running 0 17m 10.244.109.80 k8s-node-1 <none> <none>
?
參數(shù)的含義
status
- Running,正常運(yùn)行
- Terminating,正在終止
- Container Created,正在創(chuàng)建容器
pod的命名規(guī)則
k8s-nginx-75f95db655-24mfb
- 部署控制器名+副本控制器名+pod名
5.進(jìn)入pod容器
[root@k8s-master ~]# kubectl exec -it k8s-nginx-75f95db655-24mfb -- bash
root@k8s-nginx-75f95db655-24mfb:/#
- kubectl exec 進(jìn)入pod容器
- -it 交互式進(jìn)入容器
- – bash指定解釋器
6.刪除pod容器
[root@k8s-master ~]# kubectl delete pod k9s-nginx-68df494c64-529qk
- delete,刪除指定pod
刪除一個(gè)pod后,因?yàn)楦北究刂破髦付?,盡管刪除一個(gè)后,也會(huì)自動(dòng)補(bǔ)充一個(gè)pod
7.刪除部署控制器
[root@k8s-master ~]# kubectl delete ployment k8s-nginx-75f95db655
刪除部署控制器后,就會(huì)徹底刪除所有的副本控制器以及pod
二、刪除pod
在日常的k8s運(yùn)維過程中,避免不了會(huì)對(duì)某些pod進(jìn)行剔除,那么如何才能正確的剔除不需要的pod呢?
首先,需要查出想要?jiǎng)h除的pod
# 可通過任意方式進(jìn)行查詢
kubectl get pods -A |grep <podname>
kubectl get pods -n <namespace>
kubectl get pods --all-namespaces |grep <podname>?
kubectl 刪除pod命令
kubectl delete pod <podname> -n <namespace>
例如:kubectl delete pod nginx-web-460776586-f6nf0 -n yundoc?
可是這里你會(huì)發(fā)現(xiàn),在進(jìn)行刪除delete pod后,并不會(huì)直接刪除。該pod會(huì)自動(dòng)重新構(gòu)建(可以理解為重啟、重構(gòu)),原因是k8s誤認(rèn)為我們要?jiǎng)h除的pod異常掛了,會(huì)啟用容災(zāi)機(jī)制,導(dǎo)致重新再拉起一個(gè)新的pod。
我們想要正常且徹底的刪除一個(gè)pod,必須要先破壞掉他的容災(zāi)機(jī)制,即刪除deployment機(jī)制。
查看deployment信息
#可理解是調(diào)度管理pod的
kubectl get deployment --all-namespaces
kubectl get deployment -n kube-system
刪除deployment配置
kubectl delete deployment <deployment名> -n <namespace>
例如:kubectl delete deployment nginx-web -n yundoc
刪除deployment,pod會(huì)隨之刪除。
可通過再次查看pod狀態(tài),然后進(jìn)行刪除pod命令即可,通常情況下刪除deployment后,再次查詢pod發(fā)現(xiàn),pod已經(jīng)開始自行刪除了(這步可酌情處理)。
?
當(dāng)然,也可以導(dǎo)出yaml文件,進(jìn)行修改重啟策略,重新啟動(dòng)pod , 我在之前的文章中也提到了。文章來源:http://www.zghlxwxcb.cn/news/detail-688939.html
然后再去刪除pod 也是可以的。這個(gè)場景使用再測試環(huán)境或者生產(chǎn)環(huán)境都有可能。文章來源地址http://www.zghlxwxcb.cn/news/detail-688939.html
到了這里,關(guān)于k8s 啟動(dòng)和刪除pod的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!