常用命令
kubectl api-resources #查詢(xún)可操作的資源對(duì)象列表
kubectl get pod #查看默認(rèn)命名空間下所有pod
kubectl describe pod podname #獲取默認(rèn)命名空間下POD詳情
# 如果要查看制定命名空間則使用 -n nsname
kubectl get pod -n ns
kubectl describe pod podname -n ns
# 以YAML格式提供比 kubectl describe pod 更加詳細(xì)的信息,即系統(tǒng)擁有的關(guān)于 Pod 的所有信息
kubectl get pod podname -o yaml
# 查看Pod對(duì)應(yīng)的labels
kubectl get pod --show-labels
# deploy 也能用 --show-labels 查看標(biāo)簽
kubectl get deploy --show-labels
# 通過(guò)labels來(lái)篩選對(duì)應(yīng)的Pod
kubectl get pod --show-labels --selector=pod-template-hash=748c667d99
kubectl logs podname #查看POD日志,如果有多個(gè)容器時(shí),默認(rèn)查看第一個(gè)容器的日志
kubectl logs podname -c containername #使用 -c 查看POD中指定容器的日志
kubectl logs podname containername #也可以省略 -c
# 打印容器在Pod中的前一個(gè)實(shí)例的日志,如果它存在的話(huà)
# 即如果你的容器之前崩潰過(guò),你可以通過(guò)此命令訪(fǎng)問(wèn)之前容器的崩潰日志(-p 是 --previous的縮寫(xiě))
kubectl logs -p podname containername
kubectl logs --previous podname containername
# 在Pod的容器內(nèi)部執(zhí)行命令
kubectl exec podname -- cat /var/log/dpkg.log
kubectl exec podname -- ls /var/log/
# 在Pod內(nèi)部使用 -c 指定容器執(zhí)行命令
# 如果Pod內(nèi)有多個(gè)容器的情況下若是不用 -c 指定容器,則會(huì)默認(rèn)在第一個(gè)容器里執(zhí)行(也就是配置文件先定義的容器)
k exec podname -c containername -- ls /var/log
# 連接Pod容器的控制臺(tái)
kubectl exec -it podname -- sh
# 連接Pod指定容器的控制臺(tái)
k exec nginx -c nginx-container -- ls /var/log
# 不執(zhí)行命令,而是生成 yaml 的配置文件重定向到配置文件中
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml
# 完整一些的
kubectl run nginx --image=nginx --restart=OnFailure --port=80 --env="test_env=test is env" --dry-run=client -o json > pod05
# 列出Pod容器的環(huán)境變量
kubectl exec podname -- printenv
Pod配置文件
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
鏡像拉取策略
imagePullPolicy有三個(gè)取值:
- Always 每次都下載最新鏡像
- Never 不會(huì)嘗試獲取鏡像,如果鏡像已經(jīng)以某種方式存在本地,kubelet 會(huì)嘗試啟動(dòng)容器;否則,會(huì)啟動(dòng)失敗
- IfNotPresent 只有當(dāng)鏡像在本地不存在時(shí)才會(huì)拉取
默認(rèn)鏡像拉取策略:
當(dāng)你(或控制器)向 API 服務(wù)器提交一個(gè)新的 Pod 時(shí),你的集群會(huì)在滿(mǎn)足特定條件時(shí)設(shè)置 imagePullPolicy 字段:
如果你省略了 imagePullPolicy 字段,并且容器鏡像的標(biāo)簽是 :latest,imagePullPolicy 會(huì)自動(dòng)設(shè)置為 Always
如果你省略了 imagePullPolicy 字段,并且沒(méi)有指定容器鏡像的標(biāo)簽,imagePullPolicy 會(huì)自動(dòng)設(shè)置為 Always
如果你省略了 imagePullPolicy 字段,并且為容器鏡像指定了非 :latest 的標(biāo)簽,imagePullPolicy 就會(huì)自動(dòng)設(shè)置為 IfNotPresent
注意事項(xiàng):
1、在生產(chǎn)環(huán)境中部署容器時(shí),你應(yīng)該避免使用 :latest 標(biāo)簽,因?yàn)檫@使得正在運(yùn)行的鏡像的版本難以追蹤,并且難以正確地回滾,應(yīng)指定一個(gè)有意義的標(biāo)簽,如 v1.42.0
2、為了確保 Pod 總是使用相同版本的容器鏡像,你可以指定鏡像的摘要; 將 : 替換為 @,例如image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 (當(dāng)使用鏡像標(biāo)簽時(shí),如果鏡像倉(cāng)庫(kù)修改了代碼所對(duì)應(yīng)的鏡像標(biāo)簽,可能會(huì)出現(xiàn)新舊代碼混雜在 Pod 中運(yùn)行的情況。 鏡像摘要唯一標(biāo)識(shí)了鏡像的特定版本,因此 Kubernetes 每次啟動(dòng)具有指定鏡像名稱(chēng)和摘要的容器時(shí),都會(huì)運(yùn)行相同的代碼。 通過(guò)摘要指定鏡像可固定你運(yùn)行的代碼,這樣鏡像倉(cāng)庫(kù)的變化就不會(huì)導(dǎo)致版本的混雜)
3、容器的 imagePullPolicy 的值總是在對(duì)象初次創(chuàng)建時(shí)設(shè)置的,如果后來(lái)鏡像的標(biāo)簽發(fā)生變化,則不會(huì)更新。例如,如果你用一個(gè) 非 :latest 的鏡像標(biāo)簽創(chuàng)建一個(gè) Deployment, 并在隨后更新該 Deployment 的鏡像標(biāo)簽為 :latest,則 imagePullPolicy 字段 不會(huì) 變成 Always 你必須手動(dòng)更改已經(jīng)創(chuàng)建的資源的拉取策略
容器重啟策略
restartPolicy有三個(gè)取值:
- Always 總是重啟
- OnFailure 失敗了才重啟
- Never 從不重啟
Pod容器的狀態(tài):
Pending Pod已經(jīng)建立,但是pod里還有容器沒(méi)有創(chuàng)建完成
Running Pod已經(jīng)被調(diào)度到節(jié)點(diǎn)上,且容器工作正常
Completed Pod里所有容器正常退出
Succeeded
Failed文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-762124.html
參考
k8s之Pod詳解文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-762124.html
到了這里,關(guān)于k8s之Pod常用命令詳解、鏡像拉取策略(imagePullPolicy)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!