技術博客主題wordpress谷歌seo關鍵詞優(yōu)化
管理k8s集群
kubectl
k8s中有兩種用戶
一種是登錄的
一種是/sbin/nologin
linux可以用密碼登錄,也可以用證書登錄
k8s只能用證書登錄
誰拿到這個證書,誰就可以管理集群
在k8s中,所有節(jié)點都被網(wǎng)絡組件calico設置了路由和通信
所以pod的ip是可以被主機訪問到的
比如能ping 通
如果pod運行的是web服務
也可以直接curl pod_ip訪問到web服務
k8s集群對容器的管理和使用方式:
pod在系統(tǒng)進程中,是一個多進程的聚合單位
一個容器,一個服務,就是一個進程
同一個pod共享網(wǎng)絡和卷
pod的創(chuàng)建過程:
用戶向apiserver發(fā)送指令,
apiserver會把指令的信息記錄在數(shù)據(jù)庫etcd中
pod的創(chuàng)建過程是一個異步創(chuàng)建,
scheduler通過watch機制,
發(fā)現(xiàn)集群中創(chuàng)建出來,但尚未被調(diào)度的pod
由scheduler決定這個pod運行在哪個節(jié)點上
scheduler作為集群中的調(diào)度器,會選擇合適的節(jié)點
讓這個pod進行運行
選擇好節(jié)點之后
會把這個數(shù)據(jù)同步給apiserver
并且會記錄在etcd數(shù)據(jù)庫中
這個調(diào)度的過程叫做綁定。
第一個過程,是用戶的指令過程
第二個過程,是pod的調(diào)度過程
這兩個過程是分開執(zhí)行的
這兩個過程結束之后,pod還是沒有被創(chuàng)建。
之前這兩個過程都是在管理控制節(jié)點master上運行的
在master上執(zhí)行完調(diào)度綁定之后,
就該到計算節(jié)點了。
被綁定的計算節(jié)點的kubelet通過watch機制,發(fā)現(xiàn)集群中
被綁定到這個節(jié)點上,但尚未被創(chuàng)建的pod
kubelet自己不會創(chuàng)建容器,
kubelet會去找runtime軟件,比如containerd
runtime軟件負責
按照kubelet的要求把pod創(chuàng)建出來
創(chuàng)建完之后
把結果反饋給kubelet
kubelet把結果反饋給apiserver
最終把結果寫入到數(shù)據(jù)庫中。
pod的創(chuàng)建,總共三個過程
第一個是與用戶交互的過程
第二個是調(diào)度的過程
第三個是創(chuàng)建的過程
所以kubectl get 命令的查詢
并不是去實際節(jié)點進行查詢
而是查詢etcd數(shù)據(jù)庫中pod的狀態(tài)。
至于pod的實際狀態(tài)
是由kubelet更新進數(shù)據(jù)庫的。
pod在創(chuàng)建過程中,會經(jīng)歷不同的狀態(tài)
第一個是pending,是一個等待調(diào)度的過程
第二個是scheduler進行調(diào)度,調(diào)度之后,
pod會進入一個中間狀態(tài),叫createcontainer
第三個是runnning和failed其中的一種,就是創(chuàng)建失敗還是成功了
如果未成功創(chuàng)建,pod隔一段時間還會重試,重新運行
嘗試讓pod成功運行
任務執(zhí)行成功之后,會進入completed狀態(tài)
這是pod的各種狀態(tài)和相位。
failed是非0退出碼
unknown 無法獲取pod的狀態(tài),大多數(shù)是由于網(wǎng)絡不通了或者被防火墻屏蔽了
了解這些,有助于pod的管理和排錯。
-----------------------------------------------------------------------------------
namespace也是一種api資源
kube-system是系統(tǒng)名稱空間
events是在describe里面,主要用途是排錯
get看外觀
describe看pod
logs看容器
排錯三兄弟比裝系統(tǒng)還重要
]# kubectl exec -it myweb -- ls
# 其中"--" 是選項終止符,這個不是k8s里面的東西,是shell的東西
]# ls --help | grep --time
# 這個里面"--time"沒有被當成grep的參數(shù),而被當成grep的選項了
]# ls --help | grep -- --time
# 加上選項終止符"--" , 就是告訴grep,后面的內(nèi)容不是選項了,是參數(shù)
]# kubectl exec -it myweb -- ls
index.html info.php
]# kubectl exec -it myweb ls
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
index.html info.php
# k8s也告訴管理員了,pod后面要加命令,就用 -- [COMMAND]
“--”選項終止符的作用是,解決復雜命令之間選項和參數(shù)分割的問題。
pod會監(jiān)控自己的容器
如果容器故障了,會自動restart容器
控制器可以跨節(jié)點搬運服務,如果有節(jié)點故障了
控制器自動把服務搬到其他節(jié)點上運行
exec主要用于在容器內(nèi)運行命令???????
有時候通過看日志還搞不定了,就得進容器里面看
cp 把文件和目錄拷貝進容器,也可以從容器中拷貝到宿主機
]# kubectl cp myweb:/var/www ./www
tar: Removing leading `/' from member names
docker的cp是本機復制
k8s的cp是跨主機復制
k8s是把要拷貝的數(shù)據(jù)先條帶化打包,tar包是個條帶化數(shù)據(jù),按照條帶化的方式
把數(shù)據(jù)發(fā)過來,發(fā)過來的東西就是個tar包,在本地做了一個解包的操作
所以k8s的cp是靠tar實現(xiàn)的
cp還有一個功能是重定向,
]# tar -cf - www
# 這里面的"-" 代表標準輸入和標準輸出
]# tar -cf - www |gzip >a.tar.gz
重定向可以實現(xiàn)跨主機重定向
可以在A機器重定向到B機器。