0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解kubectl常用命令

馬哥Linux運(yùn)維 ? 來源:博客園海布里Simple ? 2024-11-05 15:39 ? 次閱讀

一、查看

1、查看集群狀態(tài)

# 查看客戶端及服務(wù)端程序版本信息

kubectl version --short=true

54c178c4-9b2f-11ef-a511-92fbcf53809c.jpg

# 查看集群信息

kubectl cluster-info

2、查看資源對(duì)象

# 查看命名空間

kubectl get namespace

# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空間,-o wide 查看詳細(xì)信息

kubectlget pod

kubectlget pod -n kube

kubectlget pod -o wide

54e075e4-9b2f-11ef-a511-92fbcf53809c.jpg

# -l 標(biāo)簽選擇器(多個(gè)的話是與邏輯)

kubectl get pods -l app=example

# -w 監(jiān)視資源變動(dòng)信息

kubectl get pod-w

# 以yaml格式查看Pod詳細(xì)信息

kubectlgetpod -o yaml

54fd2022-9b2f-11ef-a511-92fbcf53809c.jpg

# 以json格式查看Pod詳細(xì)信息

kubectlgetpod -o json

# 查看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ù))

551a06b0-9b2f-11ef-a511-92fbcf53809c.jpg

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)者

552f4fac-9b2f-11ef-a511-92fbcf53809c.jpg

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}

554958ac-9b2f-11ef-a511-92fbcf53809c.jpg

4、查看日志

# 實(shí)時(shí)查看日志

kubectl logs -f

# 若 pod 有多個(gè)容器,加 -c 指定容器

kubectl logs-f -c

556d1cba-9b2f-11ef-a511-92fbcf53809c.jpg

# kubectl attach -c

類似于docker attach的功能,用于取得實(shí)時(shí)的類似于kubectl logs的信息

5、查看kubernetes配置

5591b1b0-9b2f-11ef-a511-92fbcf53809c.jpg

6、查看資源對(duì)象擁有的字段

kubectlexplain pod

kubectlexplain pod.apiVersion

55b8d34e-9b2f-11ef-a511-92fbcf53809c.jpg

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序
    +關(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    kubectl常用命令指南

    Kubectl 命令是操作 kubernetes 集群的最直接的方式,特別是運(yùn)維人員,需要對(duì)這些命令有一個(gè)詳細(xì)的掌握
    的頭像 發(fā)表于 12-28 09:25 ?746次閱讀
    <b class='flag-5'>kubectl</b><b class='flag-5'>常用命令</b>指南

    windowsxp常用命令

    windowsxp常用命令   winver---------檢查windows版本 wmimgmt.msc----打開windows管理體系結(jié)構(gòu)(wmi) wupdmgr-------
    發(fā)表于 01-10 09:05 ?1265次閱讀

    Ubuntu常用命令大全

    Ubuntu常用命令大全,包括常用管理目錄,系統(tǒng)命令,硬盤相關(guān),內(nèi)存相關(guān),查看進(jìn)程等命令
    發(fā)表于 01-06 11:16 ?0次下載

    DOS常用命令寶典

    DOS常用命令寶典,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-10 18:24 ?0次下載

    04-shell的常用命令匯總與vim

    shell的常用命令匯總
    發(fā)表于 12-17 16:04 ?0次下載

    vim常用命令

    vim常用命令
    發(fā)表于 01-08 15:59 ?3次下載

    redis常用命令總結(jié)

    本文是對(duì)redis常用命令總結(jié)。
    發(fā)表于 02-09 11:25 ?1576次閱讀

    Linux常用命令的全拼整理

    本文整理了常用命令的全拼,好像混進(jìn)了什么奇怪的東西。
    的頭像 發(fā)表于 10-10 17:19 ?4629次閱讀

    Linux教程之Linux常用命令大全

    Linux教程之Linux常用命令大全
    的頭像 發(fā)表于 03-30 10:34 ?5622次閱讀

    linux常用命令手冊(cè)

    linux常用命令手冊(cè)免費(fèi)下載。
    發(fā)表于 06-01 14:59 ?68次下載

    Memcache系統(tǒng)常用命令講解

    Memcache系統(tǒng)常用命令講解(無線電源技術(shù)商業(yè)計(jì)劃書)-該文檔為Memcache系統(tǒng)常用命令講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,
    發(fā)表于 09-28 11:27 ?5次下載
    Memcache系統(tǒng)<b class='flag-5'>常用命令</b>講解

    linux常用命令大全

    linux常用命令大全,一些常用命令都可以找到
    發(fā)表于 03-03 09:20 ?0次下載

    DOS系統(tǒng)常用命令

    介紹了DOS系統(tǒng)的常用命令。
    發(fā)表于 03-21 14:59 ?0次下載

    Linux常用命令

    Linux常用命令
    的頭像 發(fā)表于 01-12 11:19 ?1099次閱讀

    Linux常用命令手冊(cè)分享

    linux常用命令合集
    發(fā)表于 04-26 11:46 ?1次下載