一、查看
1、查看集群狀態(tài)
# 查看客戶端及服務(wù)端程序版本信息
kubectl version --short=true
# 查看集群信息
kubectl cluster-info
2、查看資源對(duì)象
# 查看命名空間
kubectl get namespace
# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空間,-o wide 查看詳細(xì)信息
kubectlget pod
kubectlget pod -n kube
kubectlget pod -o wide
# -l 標(biāo)簽選擇器(多個(gè)的話是與邏輯)
kubectl get pods -l app=example
# -w 監(jiān)視資源變動(dòng)信息
kubectl get pod-w
# 以yaml格式查看Pod詳細(xì)信息
kubectlgetpod
# 以json格式查看Pod詳細(xì)信息
kubectlgetpod
# 查看deployment下pod列表
kubectl get pod -n xxx | grep ${deploymentName}
通用格式:kubectl get {$sourceType} --all-namespaces
常用的資源類型({$resourceType})有:
node (節(jié)點(diǎn))
po(pod)
ns(命名空間namespace)
instance(實(shí)例)
svc(service服務(wù)):定義了一個(gè) Pod 的邏輯分組,一種可以訪問它們的策略(微服務(wù))
cm(configMap):存儲(chǔ)全局配置變量的,將分布式系統(tǒng)中不同模塊的環(huán)境變量統(tǒng)一到一個(gè)對(duì)象中管理
ds(deamonSet):在每臺(tái)計(jì)算節(jié)點(diǎn)上運(yùn)行一個(gè)守護(hù)進(jìn)程(如日志采集等),有時(shí)pod處于pending可能是因?yàn)槟硞€(gè)deamonSet沒起來
deploy(deployment):用于啟動(dòng)(上線/部署)一個(gè)Pod或者ReplicaSet。這個(gè)如果有問題,那么其他依賴它來部署的資源就肯定不會(huì)正常了
ingress : 通過http或https暴露集群內(nèi)部service,給service提供外部URL、負(fù)載均衡、SSL/TLS能力以及基于host的方向代理
# 查看 endpoint 列表 kubectlget endpoints
pv:存儲(chǔ)卷
pvc:存儲(chǔ)卷消費(fèi)者
3、查看詳情
describe類似于get,同樣用于獲取resource的相關(guān)信息。不同的是,get獲得的是更詳細(xì)的resource個(gè)性的詳細(xì)信息,describe獲得的是resource集群相關(guān)的信息。
describe命令同get類似,但是describe不支持-o選項(xiàng),對(duì)于同一類型resource,describe輸出的信息格式,內(nèi)容域相同。
注:如果發(fā)現(xiàn)是查詢某個(gè)resource的信息,使用get命令能夠獲取更加詳盡的信息。但是如果想要查詢某個(gè)resource的狀態(tài),
如某個(gè)pod并不是在running狀態(tài),這時(shí)需要獲取更詳盡的狀態(tài)信息時(shí),就應(yīng)該使用describe命令。
# 顯示 Pod 的詳細(xì)信息, 特別是查看 Pod 無法創(chuàng)建的時(shí)候的日志、Pod的運(yùn)行事件,比如鏡像有沒有拉取,容器有沒有創(chuàng)建
kubectl describe pod
kubectl describe deployment
kubectl describe service
# 顯示 Node 的詳細(xì)信息
kubectldescribe node [node ip]
# 顯示由deployment管理的Pod的信息
kubectl describe pods
# 查看pod中所有容器的信息
kubectl describe pod/{pod_name} -n {namespace}
4、查看日志
# 實(shí)時(shí)查看日志
kubectl logs -f
# 若 pod 有多個(gè)容器,加 -c 指定容器
kubectl logs-f
# kubectl attach
類似于docker attach的功能,用于取得實(shí)時(shí)的類似于kubectl logs的信息
5、查看kubernetes配置
6、查看資源對(duì)象擁有的字段
kubectlexplain pod
kubectlexplain pod.apiVersion
7、查看節(jié)點(diǎn)標(biāo)簽
kubectlget node --show-labels
為kubernetes集群的resource打標(biāo)簽,如前面實(shí)例中提到的為rc打標(biāo)簽對(duì)rc分組。還可以對(duì)nodes打標(biāo)簽,這樣在編排容器時(shí),
可以為容器指定nodeSelector將容器調(diào)度到指定lable的機(jī)器上,如如果集群中有IO密集型,計(jì)算密集型的機(jī)器分組,可以將不同的機(jī)器打上不同標(biāo)簽,
然后將不同特征的容器調(diào)度到不同分組上。在1.2之前的版本中,使用kubectl get nodes則可以列出所有節(jié)點(diǎn)的信息,包括節(jié)點(diǎn)標(biāo)簽,
1.2版本中不再列出節(jié)點(diǎn)的標(biāo)簽信息,如果需要查看節(jié)點(diǎn)被打了哪些標(biāo)簽,需要使用describe查看節(jié)點(diǎn)的信息。
8、文件交換
kubectl cp 用于pod和外部的文件交換,比如如下示例了如何在進(jìn)行內(nèi)外文件交換
在pod中創(chuàng)建一個(gè)文件message.log
[[email protected] tmp]# kubectl exec -it mysql-478535978-1dnm2 sh # pwd / # cd /tmp # echo "this is a message from `hostname`" >message.log # cat message.log this is a message from mysql-478535978-1dnm2 # exit 拷貝出來并確認(rèn) [[email protected]-1 tmp]# kubectl cp mysql-478535978-1dnm2:/tmp/message.log message.log tar: Removing leading `/' from member names [[email protected]-1 tmp]# cat message.log this is a message from mysql-478535978-1dnm2 更改message.log并拷貝回pod [[email protected]-1 tmp]# echo "information added in `hostname`" >>message.log [[email protected]-1 tmp]# cat message.log this is a message from mysql-478535978-1dnm2 information added in ku8-1 [[email protected]-1 tmp]# kubectl cp message.log mysql-478535978-1dnm2:/tmp/message.log 確認(rèn)更改后的信息 [[email protected]-1 tmp]# kubectl exec mysql-478535978-1dnm2 cat /tmp/message.log this is a message from mysql-478535978-1dnm2 information added in ku8-1
二、創(chuàng)建/修改資源
1、kubectl create/apply
# 以標(biāo)準(zhǔn)輸入創(chuàng)建資源
kubectl create deployment nginx --image=nginx:1.14
# 以文件創(chuàng)建資源
kubectl create -f my-nginx.yaml # create 創(chuàng)建一次
kubectlapply -f my-nginx.yaml # apply 可創(chuàng)建多次
2、kubectl replace/patch
用于對(duì)已有資源進(jìn)行更新、替換。如前面create中創(chuàng)建的nginx,當(dāng)我們需要更新resource的一些屬性的時(shí)候,
如修改副本數(shù)量,增加、修改label,更改image版本,修改端口等。都可以直接修改原yaml文件,然后執(zhí)行replace命令(刪除原有資源然后重新構(gòu)建資源)
kubectl replace -f
注意:yaml文件里的metadata的name不能修改(是按照name作為資源的唯一標(biāo)識(shí))
# 如對(duì)正在運(yùn)行的容器的屬性進(jìn)行在線修改(不刪除容器),比如修改pod的label等
kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}'
3、kubectl edit
# edit提供了另一種更新resource源的操作,通過edit能夠靈活的在一個(gè)common的resource基礎(chǔ)上,發(fā)展出更過的significant resource。
例如,使用edit直接更新前面創(chuàng)建的pod的命令為:
[root@master1 ~]# kubectl edit po rc-nginx-btv4j
上面命令的效果等效于:
kubectl get po rc-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml vim /tmp/nginx-tmp.yaml /*do some changes here */ kubectl replace -f /tmp/nginx-tmp.yaml
4、kubectl set
# kubectl set resources 用于設(shè)置資源的一些范圍限制
資源對(duì)象中的Pod可以指定計(jì)算資源需求(CPU-單位m、內(nèi)存-單位Mi),即使用的最小資源請(qǐng)求(Requests),
限制(Limits)的最大資源需求,Pod將保證使用在設(shè)置的資源數(shù)量范圍。
對(duì)于每個(gè)Pod資源,如果指定了Limits(限制)值,并省略了Requests(請(qǐng)求),則Requests默認(rèn)為L(zhǎng)imits的值。
可用資源對(duì)象包括(支持大小寫):replicationcontroller、deployment、daemonset、job、replicaset。
例如:
# 將deployment的nginx容器cpu限制為“200m”,將內(nèi)存設(shè)置為“512Mi” $ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi # 設(shè)置所有nginx容器中 Requests和Limits $ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi # 刪除nginx中容器的計(jì)算資源值 $ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0 # kubectl set image 用于更新現(xiàn)有資源的容器鏡像 # 將deployment中的nginx容器鏡像設(shè)置為“nginx:1.9.1” $ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1 # 所有deployment和rc的nginx容器鏡像更新為“nginx:1.9.1” $ kubectl set image deployments,rc nginx=nginx:1.9.1 --all # 將daemonset abc的所有容器鏡像更新為“nginx:1.9.1” $ kubectl set image daemonset abc *=nginx:1.9.1 # 從本地文件中更新nginx容器鏡像 $ kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml
5、kubectl label、annotate
label命令:用于更新(增加、修改或刪除)資源上的 label(標(biāo)簽)
label 必須以字母或數(shù)字開頭,可以使用字母、數(shù)字、連字符、點(diǎn)和下劃線,最長(zhǎng)63個(gè)字符。
如果 --overwrite 為 true,則可以覆蓋已有的label,否則嘗試覆蓋label將會(huì)報(bào)錯(cuò)。
如果指定了--resource-version,則更新將使用此資源版本,否則將使用現(xiàn)有的資源版本。
語法:label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
例:
# 給名為foo的Pod添加label unhealthy=true $ kubectl label pods foo unhealthy=true # 給名為foo的Pod修改label 為 'status' / value 'unhealthy',且覆蓋現(xiàn)有的value $ kubectl label --overwrite pods foo status=unhealthy # 給 namespace 中的所有 pod 添加 label $ kubectl label pods --all status=unhealthy # 僅當(dāng)resource-version=1時(shí)才更新 名為foo的Pod上的label $ kubectl label pods foo status=unhealthy --resource-version=1 # 刪除名為“bar”的label 。(使用“ - ”減號(hào)相連) $ kubectl label pods foo bar-
annotate命令:更新一個(gè)或多個(gè)資源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。
Annotations由key/value組成。
Annotations的目的是存儲(chǔ)輔助數(shù)據(jù),特別是通過工具和系統(tǒng)擴(kuò)展操作的數(shù)據(jù),更多介紹在這里。
如果--overwrite為true,現(xiàn)有的annotations可以被覆蓋,否則試圖覆蓋annotations將會(huì)報(bào)錯(cuò)。
如果設(shè)置了--resource-version,則更新將使用此resource version,否則將使用原有的resource version。
語法:annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
例:
# 更新Pod“foo”,設(shè)置annotation “description”的value “my frontend”,如果同一個(gè)annotation多次設(shè)置,則只使用最后設(shè)置的value值 $ kubectl annotate pods foo description='my frontend' # 根據(jù)“pod.json”中的type和name更新pod的annotation $ kubectl annotate -f pod.json description='my frontend' # 更新Pod"foo",設(shè)置annotation“description”的value“my frontend running nginx”,覆蓋現(xiàn)有的值 $ kubectl annotate --overwrite pods foo description='my frontend running nginx' # 更新 namespace中的所有pod $ kubectl annotate pods --all description='my frontend running nginx' # 只有當(dāng)resource-version為1時(shí),才更新pod 'foo' $ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1 # 通過刪除名為“description”的annotations來更新pod 'foo'。 # 不需要 -overwrite flag。 $ kubectl annotate pods foo description-
三、啟動(dòng)Pod
# 在集群中創(chuàng)建、啟動(dòng)一個(gè)指定的鏡像
[root@ku8-1 tmp] # kubectl run nginx --image=nginx:1.16 --port=80 --replicas=1
deployment "nginx" created
[root@ku8-1 tmp] #
從提示看到創(chuàng)建了一個(gè)deployment
kubernetes將鏡像運(yùn)行在pod中以方便實(shí)施卷和網(wǎng)絡(luò)共享等管理,使用get pods可以清楚的看到生成了一個(gè)pod
[root@ku8-1 tmp] # kubectl get pods
NAME READY STATUS RESTARTS AGE
sonarqube-1880671902-s3fdq 1/1 Running 0 6m
[root@ku8-1 tmp] #
鏈接:https://www.cnblogs.com/ailiailan/p/14565429.html
-
程序
+關(guān)注
關(guān)注
116文章
3754瀏覽量
80725 -
命令
+關(guān)注
關(guān)注
5文章
674瀏覽量
21962 -
客戶端
+關(guān)注
關(guān)注
1文章
289瀏覽量
16640
原文標(biāo)題:kubectl常用命令
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論