通過kubectl命令可以操作和管理K8S資源,對于初學(xué)者可以在掌握K8S基礎(chǔ)命令的基礎(chǔ)上再去學(xué)習(xí)K8s的原理和架構(gòu),那么K8S常用的命令有哪些呢?來看一下吧。

1、K8S命令概述
在學(xué)習(xí)K8s基礎(chǔ)命令前,了解和學(xué)習(xí)docker命令是很有必要的,kubectl和docker很多命令都有相通之處。
docker ps #查看所有up狀態(tài)容器
docker ps -a#查看所有狀態(tài)的容器
docker inspect containerid#查看容器詳情
docker images #查看容器鏡像
docker start/stop/restart containerid #啟動/停止/重啟容器
docker exec -it containerid bash #進(jìn)入容器
docker exec containerid bash -c 'uptime' #容器外執(zhí)行命令
docker rmi imageid #刪除鏡像
docker rm containerid #刪除容器

2、K8S集群資源操作
kubectl get cs #集群健康情況
kubectl version #K8S集群版本查看
kubectl get node #查看集群節(jié)點(diǎn)
kubectl get pods -o wide -A #查看所有命命空間pod
-n #后跟指定命名空間
--all-namespaces #等同于-A
kubect get deployments -A
kubectl get svc,ep -A #查看svc和endpoints
kubectl get pod --show-labels #查看pod標(biāo)簽
kubectl get node --show-labels #查看node標(biāo)簽
查看配置
kubectl get deployments.apps nginxtest-xxx -oyaml #查看deployment資源
kubectl get pods nginxtest-xxx -oyaml #查看pod資源配置
查看是否有資源限制
kubectl describe node 192.168.1.2Capacity:
cpu: 16
ephemeral-storage: 524030980Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 82320508Ki
pods: 253
Allocatable:
cpu: 15100m
ephemeral-storage: 520373252Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 79101052Ki
pods: 253
capacity代表減去系統(tǒng)預(yù)留的資源總量。
Allocatable可分配給K8S資源的總量。
pod資源限制,防止單個服務(wù)占用資源過高影響其他pod,達(dá)到limits數(shù)值后會oom重啟。
kubectl get pods nginx-test -oyaml | grep -A 6 resources
resources:
limits:
cpu: "5"
memory: 5000Mi
requests:
cpu: 55m
memory: 100Mikubectl --help 多用help
3、K8S運(yùn)維場景
通過副本擴(kuò)容實(shí)現(xiàn)流量分?jǐn)?,避免單個節(jié)點(diǎn)負(fù)載過高,建議資源中增加反親和性,達(dá)到不同副本調(diào)度到不同node
kubectl scale deployment nginx-test --replicas=2 #副本擴(kuò)容
kubectl edit deployment nginx-test #直接編輯修改spec.replicas標(biāo)簽擴(kuò)容
kubectl exec -it podname bash #或者sh
-n 指定名字空間
kubectl exec nginx-965048598-jt28d -n test uptime #不進(jìn)入容器,只獲取命令輸出
kubectl delete pods nginx-test-6fc6d8666b-mhl48 #常規(guī)刪除
kubectl delete pod -l app=test #基于標(biāo)簽刪除,批量操作效率高
kubectl delete pods nginx-test -n dev --grace-period=0 --force #強(qiáng)制刪除,沒有terminationGracePeriodSeconds 30s的時間
還可以通過kubectl scale命令將副本縮為0的方式刪除pod
對于設(shè)置了污點(diǎn)的服務(wù),普通pod無法調(diào)用到此節(jié)點(diǎn),只有增加了Tolerations容忍配置才可以。
[root@wpseco-node-1 log]# kubectl describe node 192.168.0.1 | grep Taints
Taints: <none>
kubectl taint node 192.168.0.1 test-access-node=:NoSchedule --overwrite=true #污點(diǎn)添加
kubectl taint node 192.168.0.1 test-access-node:NoSchedule- #污點(diǎn)刪除
其中[effect] 可取值:
NoSchedule :一定不能被調(diào)度(新來的不要來,在這的就別動了)
PreferNoSchedule:盡量不要調(diào)度(盡量不要來,除非沒辦法)
NoExecute:不僅不會調(diào)度,還會驅(qū)逐Node上已有的Pod
kubectl cp my_item.tar.gz redis-6c98cb5b5f-nxb59:/tmp/ #宿主機(jī)拷貝到容器內(nèi)
kubectl cp redis-6c98cb5b5f-nxb59:/tmp/start.sh ./start.sh #pod內(nèi)文件拷貝到宿主機(jī)
靜態(tài)pod
是由 kubelet
管理的,只在特定node上存在的pod;靜態(tài)pod總是由kubelet創(chuàng)建的,并且只在kubelet所在的Node上運(yùn)行。靜態(tài)pod 不能通過
api-server來管理,無法和 RC,RS,Deployment或者 DaemonSet進(jìn)行關(guān)聯(lián);并且 kubelet無法對靜態(tài)pod
進(jìn)行健康檢查。
靜態(tài)pod資源文件默認(rèn)存放路徑/etc/kubernetes/manifests,也可以直接查看kubelet啟動參數(shù)staticPodPath: /etc/kubernetes/manifests配置確定。?
kubectl exec -it kafka-1-192.168.0.1 -c kafka sh #進(jìn)入靜態(tài)pod
-c #po有多個容器要加-c指定
kubectl logs kafka-1-192.168.0.1 -c kafka
4、K8S問題定位
處理K8S環(huán)境問題,首先要了解pod的生命周期和pod的狀態(tài)

常見狀態(tài)原因
- ImagePullBackOff 鏡像拉取失敗,網(wǎng)絡(luò)不通,鏡像名稱有誤或者鏡像倉庫認(rèn)證失敗都可能有這個報(bào)錯。
- CrashLoopBackOff 探針檢測失敗,服務(wù)對網(wǎng)絡(luò)或者其他pod服務(wù)有依賴等,此外宿主機(jī)上的安全軟件可能也會導(dǎo)致容器無法正常啟動。
- Pending 一般是調(diào)度失敗,pod沒有可調(diào)度的節(jié)點(diǎn),常見原因:節(jié)點(diǎn)有污點(diǎn),不滿足節(jié)點(diǎn)親和性,或者節(jié)點(diǎn)處于notready狀態(tài)。
- Evicted 當(dāng)節(jié)點(diǎn)內(nèi)存、磁盤或者cpu資源不足時,K8s 會按照 QoS 等級對節(jié)點(diǎn)上的某些 Pod 進(jìn)行驅(qū)逐,釋放資源保證節(jié)點(diǎn)可用性,kubelet可以配置內(nèi)存,cpu和磁盤的驅(qū)逐閾值。
- Terminating pod刪除后超過terminationGracePeriodSeconds參數(shù)時間還處于Terminating狀態(tài)可能是存在節(jié)點(diǎn)故障,和master節(jié)點(diǎn)失聯(lián),可以檢查節(jié)點(diǎn)狀態(tài)或者嘗試重啟kubelet
- Completed 此狀態(tài)通常是job類的pod執(zhí)行完成了正常退出容器。
- Init:Error pod初始化失敗,可以查看init pod的日志定位。
問題定位經(jīng)常需要使用如下命令:
kubectl logs -f podname
kubectl logs -f -l app=nginx-test #多副本情況下,可以看到所有pod日志
kubectl describe pods podname #pod啟動日志
kubectl describe node 192.168.0.1 #節(jié)點(diǎn)狀態(tài)日志
kubectl get events #查看集群事件
系統(tǒng)服務(wù)查看
systemctl status kubelet/docker/etcd
系統(tǒng)服務(wù)日志查看
journalctl -xeu kubelet/docker
--since指定時間
??https://kubernetes.io/zh-cn/docs/home/???