1. 基本命令
1.1 運(yùn)行pod
kubectl run
如何運(yùn)行一個(gè) nginx Deployment 并將其暴露出來? 查看 kubectl run叮趴。
# start the pod running nginx
$ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
deployment "nginx-app" created
1.2 查看服務(wù)
kubectl get
如何列出哪些正在運(yùn)行割笙?查看 kubectl get。
$ kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 1h
如何連接到已經(jīng)運(yùn)行在容器中的進(jìn)程眯亦?查看 kubectl attach伤溉。
使用 kubectl 命令:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
$ kubectl attach -it nginx-app-5jyvm
...
kubectl get 定義輸出格式
$ kubectl get pods traefik-ingress-public-hsgkl -n kube-system -o yaml
查看node
kubectl get nodes
查看所有namespace的pod
kubectl get pods --all-namespaces
查看ingress
kubectl get ing
查看dev命名空間下dev-java-xxl-job-admin-public的ingress規(guī)則, 輸出yaml格式
kubectl get ing dev-java-xxl-job-admin-public -n dev -o yaml
1.3 獲取指定pod的信息
kubectl describe pod <pod_name>
2. 高級(jí)命令
2.1 與容器交互
kubectl exec
$ kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
$ kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm
執(zhí)行交互式命令怎么辦妻率?
$ kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
更多信息請(qǐng)查看 獲取運(yùn)行中容器的 Shell 環(huán)境乱顾。
2.2 查看日志
如何查看運(yùn)行中進(jìn)程的 stdout/stderr?查看 kubectl logs宫静。
kubectl logs
$ kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
現(xiàn)在是時(shí)候提一下 pod 和容器之間的細(xì)微差別了走净;默認(rèn)情況下如果 pod 中的進(jìn)程退出 pod 也不會(huì)終止,相反它將會(huì)重啟該進(jìn)程孤里。這類似于 docker run 時(shí)的 --restart=always
選項(xiàng)伏伯, 這是主要差別。在 docker 中捌袜,進(jìn)程的每個(gè)調(diào)用的輸出都是被連接起來的说搅,但是對(duì)于 kubernetes,每個(gè)調(diào)用都是分開的虏等。要查看以前在 kubernetes 中執(zhí)行的輸出弄唧,請(qǐng)執(zhí)行以下操作:
$ kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
查看 記錄和監(jiān)控集群活動(dòng) 獲取更多信息。
2.3 刪除pod
如何停止和刪除運(yùn)行中的進(jìn)程博其?查看 kubectl delete套才。
kubectl delete
$ kubectl get deployment nginx-app
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-app 1 1 1 1 2m
$ kubectl get po -l run=nginx-app
NAME READY STATUS RESTARTS AGE
nginx-app-2883164633-aklf7 1/1 Running 0 2m
$ kubectl delete deployment nginx-app
deployment "nginx-app" deleted
$ kubectl get po -l run=nginx-app
# Return nothing
請(qǐng)注意迂猴,我們不直接刪除 pod慕淡。使用 kubectl 命令,我們要?jiǎng)h除擁有該 pod 的 Deployment沸毁。如果我們直接刪除pod峰髓,Deployment 將會(huì)重新創(chuàng)建該 pod。
2.4 強(qiáng)制刪除pod
kubectl delete pod $POD_ID --grace-period=0 --force
將Pod的優(yōu)雅終止時(shí)間設(shè)置為0息尺,并強(qiáng)制刪除携兵。
2.5 切換namespace
默認(rèn)在default namespace下
kubectl config set-context --current --namespace=devops
3. 如果一個(gè)pod啟動(dòng)有問題如何排查?
- 首先查看pods狀態(tài)搂誉, 可以使用命令kubectl get pods
(base) ? kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
dev-java-resource-back-question-provider-6bf66cd85f-zrtjt 0/1 CrashLoopBackOff 5761 20d
如果查看是錯(cuò)誤的狀態(tài)徐紧, 可以使用
kubectl describe pod [name]
繼續(xù)調(diào)試如果沒有發(fā)現(xiàn)問題可以使用
kubectl logs [pod-name] -n [namespace]
查看日志輸出如果當(dāng)前pod的日志沒有發(fā)現(xiàn)問題可以查看以前pod的輸出
kubectl logs --previous [pod-name] -n [namespace]
如果還是不能解決問題重新啟動(dòng)pod, 先執(zhí)行
kubectl scale deployment [name] --replicas=0
關(guān)閉所有pod, 再執(zhí)行kubectl scale deployment [name] --replicas=1
啟動(dòng)pod,也可以直接執(zhí)行刪除pod操作
4. 資源類型
下表列出的是 kubernetes 中所有支持的類型和縮寫的別名并级。
資源類型 | 縮寫別名 |
---|---|
clusters |
|
componentstatuses |
cs |
configmaps |
cm |
daemonsets |
ds |
deployments |
deploy |
endpoints |
ep |
event |
ev |
horizontalpodautoscalers |
hpa |
ingresses |
ing |
jobs |
|
limitranges |
limits |
namespaces |
ns |
networkpolicies |
|
nodes |
no |
statefulsets |
|
persistentvolumeclaims |
pvc |
persistentvolumes |
pv |
pods |
po |
podsecuritypolicies |
psp |
podtemplates |
|
replicasets |
rs |
replicationcontrollers |
rc |
resourcequotas |
quota |
cronjob |
|
secrets |
|
serviceaccount |
sa |
services |
svc |
storageclasses |
|
thirdpartyresources |
4.1 格式化輸出
要以特定的格式向終端窗口輸出詳細(xì)信息拂檩,可以在 kubectl
命令中添加 -o
或者 -output
標(biāo)志。
輸出格式 | 描述 |
---|---|
-o=custom-columns=<spec> |
使用逗號(hào)分隔的自定義列列表打印表格 |
-o=custom-columns-file=<filename> |
使用 文件中的自定義列模板打印表格 |
-o=json |
輸出 JSON 格式的 API 對(duì)象 |
-o=jsonpath=<template> |
打印 jsonpath 表達(dá)式中定義的字段 |
-o=jsonpath-file=<filename> |
打印由 文件中的 jsonpath 表達(dá)式定義的字段 |
-o=name |
僅打印資源名稱 |
-o=wide |
以純文本格式輸出任何附加信息嘲碧,對(duì)于 Pod 稻励,包含節(jié)點(diǎn)名稱 |
-o=yaml |
輸出 YAML 格式的 API 對(duì)象 |