您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Kubernetes管理員必備的kubectl命令有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
Kubernetes是當(dāng)今基礎(chǔ)架構(gòu)的主導(dǎo)技術(shù),這意味著系統(tǒng)管理員需要熟悉其管理。多年來(lái),筆者一直堅(jiān)持每天管理Kubernetes集群,并且總結(jié)了一些技巧,希望可以幫助其他人簡(jiǎn)化他們的管理。
筆者在這里分享9個(gè)有關(guān)kubectl的命令,主要說(shuō)明筆者每天用來(lái)管理Kubernetes集群的正常運(yùn)行的命令。筆者將它們分為幾部分,以幫助讀者確定是否應(yīng)將它們用于某些任務(wù)。筆者還以長(zhǎng)號(hào)和簡(jiǎn)寫形式包含了一些標(biāo)志,以幫助讀者更快地使用它們。
1. 使用Kubectl獲取(get)、創(chuàng)建(create)、編輯(edit)和刪除(delete)資源
從命令行實(shí)用程序開始,最安全的地方是提問(wèn)(讀操作)而不是發(fā)出命令(寫操作)。有用的get命令可以使您滾動(dòng)起來(lái)。
命令1:Kubectl get
使用get可以獲取集群中當(dāng)前擁有的資源列表。您可以獲得的資源類型包括:
?Namespace
?Pod
?Node
?Deployment
?Service
?ReplicaSets
每個(gè)選項(xiàng)都提供有關(guān)群集中可用資源的詳細(xì)信息。例如,這是get nodes命令的輸出,該命令提供了Kubernetes的用法和狀態(tài)版本。
$kubectl get nodesNAME STATUS ROLES AGE VERSIONminikube Ready master 9d v1.18.0
這些命令大多數(shù)都有縮減版。要獲取命名空間,可以運(yùn)行kubectl get namespaces或kubectl get ns:
$ kubectl get nsNAME STATUS AGEcharts Active8ddefaultActive9dkube-node-lease Active9dkube-public Active9dkube-system Active9d
每個(gè)get命令都可以使用–namespace或-n標(biāo)志集中于給定的命名空間。當(dāng)您想要查看kube-system中的Pod時(shí),筆者會(huì)特別提供幫助,這是運(yùn)行Kubernetes本身所需的服務(wù)。
$ kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-66bff467f8-mjptx1/1Running29dcoredns-66bff467f8-t2xcz1/1Running29detcd-minikube1/1Running19dkube-apiserver-minikube1/1Running19dkube-controller-manager-minikube1/1Running29dkube-proxy-rpc9d1/1Running19dkube-scheduler-minikube1/1Running29dstorage-provisioner1/1Running19d
命令2:Kubectl create
使用kubectl,您幾乎可以在集群中創(chuàng)建任何類型的資源。其中一些資源確實(shí)需要配置文件和命名空間來(lái)設(shè)置資源以及名稱。您可以創(chuàng)建的資源包括:
?service
?cronjob
?deployment
?job
?namespace (ns)
因此,創(chuàng)建create namespace需要另一個(gè)參數(shù)來(lái)命名命名空間。
$kubectl create ns hello-therenamespace/hello-there created
我們也可以使用cron命令來(lái)連續(xù)創(chuàng)建運(yùn)行作業(yè),就像許多Linux朋友會(huì)熟悉的那樣。在這里,我們使用cronjob命令每五秒鐘回顯一次“ hello”。
$kubectl create cronjob my-cron --image=busybox --schedule="*/5 * * * *"--echohellocronjob.batch/my-namespaced-cron created
您也可以使用簡(jiǎn)化版的命令cj而不是cronjob。
$kubectl create cj my-existing-cron --image=busybox --schedule="*/15 * * * *"--echohellocronjob.batch/my-existing-cron created
命令3:Kubectl edit
那么,當(dāng)筆者們創(chuàng)建某些東西并想要更新時(shí)會(huì)發(fā)生什么呢?這就是kubectl edit的作用。
運(yùn)行此命令時(shí),可以編輯集群中的任何資源。它將打開您的默認(rèn)文本編輯器。因此,我們將編輯現(xiàn)有的cronjob,我們可以運(yùn)行:
$kubectl edit cronjob/my-existing-cron
這顯示了我們要編輯的配置。
# Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file will be# reopened with the relevant failures.#apiVersion: batch/v1beta1kind: CronJobmetadata:creationTimestamp:"2020-04-19T16:06:06Z" managedFields: - apiVersion: batch/v1beta1 fieldsType: FieldsV1 fieldsV1: f:spec: f:concurrencyPolicy: {} f:failedJobsHistoryLimit: {} f:jobTemplate: f:metadata: f:name: {} f:spec: f:template: f:spec: f:containers:k:{"name":"my-new-cron"}: .: {} f:command: {} f:image: {} f:imagePullPolicy: {}
這個(gè)計(jì)劃設(shè)置為每15秒一次:
我們將其更改為每25秒寫入一次資源:
編寫完成后,我們可以看到它已更改。
$ kubectl edit cronjob/my-existing-croncronjob.batch/my-existing-cron edited
如果要使用其他編輯器,可以使用此KUBE_EDITOR語(yǔ)法添加來(lái)覆蓋它。
$ KUBE_EDITOR="nano"kubectl edit cronjob/my-existing-cron
命令4:Kubectl delete
到目前為止,除了將其完全刪除之外,我們已經(jīng)做了所有事情,這就是我們下一步要做的。我們剛剛編輯的cronjob是兩個(gè)cronjobs之一,因此現(xiàn)在我們將刪除整個(gè)資源。
$ kubectldeletecronjobmy-existing-croncronjob.batch"my-existing-cron"deleted
作為警告,切勿刪除你所不知道的所有相關(guān)信息的內(nèi)容。一旦資源被刪除,就無(wú)法恢復(fù)。您將不得不重新創(chuàng)建它,因此在運(yùn)行此命令之前請(qǐng)三思。
命令5:Kubectl apply
之前,筆者提到過(guò)某些命令將需要配置文件。該apply命令允許您在集群內(nèi)通過(guò)文件應(yīng)用配置資源。這也可以通過(guò)命令行standard in (STDIN)來(lái)完成此操作,但是建議始終是按文件進(jìn)行。
筆者認(rèn)為該命令有些高級(jí),因?yàn)槟枰廊绾问褂萌杭约耙獞?yīng)用哪種配置文件。對(duì)于此示例,筆者曾經(jīng)使用來(lái)自Helm的基于角色訪問(wèn)控制(RBAC)配置用于一個(gè)服務(wù)帳戶。
$kubectl apply -f commands.yamlserviceaccount/tiller createdclusterrolebinding.rbac.authorization.k8s.io/tiller created
您可以應(yīng)用幾乎任何所需的配置,但是始終需要確定要應(yīng)用的配置,否則可能會(huì)看到意想不到的結(jié)果。
2. 使用Kubectl對(duì)Kubernetes進(jìn)行故障排除
命令6:Kubectl describe
Describe顯示您正在查看的資源的詳細(xì)信息。最常見的用例是描述一個(gè)pod或節(jié)點(diǎn),以檢查事件中是否有錯(cuò)誤,或者資源是否太有限而無(wú)法使用。
您可以描述的資源包括:
?Nodes
?Pods
?Services
?Deployments
?Replica sets
?Cronjobs
在此示例中,我們可以從前面的示例中describe集群中當(dāng)前的cronjob。
$ kubectldescribecronjob my-cron片段:Name: my-cronNamespace:defaultLabels: Annotations: Schedule: */5* * * *ConcurrencyPolicy:AllowSuspend:FalseSuccessful Job HistoryLimit:3FailedJob HistoryLimit:1StartingDeadlineSeconds: Selector: <unset>Parallelism: <unset>Completions: <unset>PodTemplate:Labels: Containers: my-cron: Image: busyboxPort: Host Port:
命令7:Kubectl logs
雖然describe命令提供pod內(nèi)應(yīng)用程序發(fā)生的事件,但logs提供了與pod相關(guān)的Kubernetes內(nèi)發(fā)生的事件詳細(xì)信息。理解這一區(qū)別可以幫助您解決應(yīng)用程序內(nèi)部和Kubernetes內(nèi)部發(fā)生的問(wèn)題,因?yàn)樗鼈兌际遣槐辉试S發(fā)生的相同問(wèn)題。
$kubectl logs cherry-chart-88d49478c-dmcfv -n charts
片段:
172.17.0.1- - [19/Apr/2020:16:01:15+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:20+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:25+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:30+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:35+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:40+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:45+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:50+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:55+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"
您還可以通過(guò)使用grep命令來(lái)消除額外的噪音或?qū)ふ移渌录?。該kube-probe可能有噪音,讓我們用grep命令過(guò)濾出來(lái)。
$ kubectl logs cherry-chart-88d49478c-dmcfv -n charts |grep-vie kube-probe127.0.0.1- - [10/Apr /2020:23:01:55+0000]"GET / HTTP/1.1"200612"-""Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0"“-”
由于某些部署在一個(gè)pod中有多個(gè)容器,您還可以對(duì)日志使用-c<container name>,從而只在一個(gè)特定容器中查找日志。
命令8:Kubectl exec
與docker exec命令非常相似,您也可以執(zhí)行到容器中以直接對(duì)應(yīng)用程序進(jìn)行故障排除。當(dāng)Pod中的日志沒(méi)有為您提供可能要調(diào)試的問(wèn)題的答案時(shí),此功能很有用。使用exec命令時(shí),該行的末尾必須始終提供您在pod內(nèi)使用的shell。
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts --/bin/bashroot@cherry-chart-88d49478c-dmcfv:/#
命令9:Kubectl cp
該命令用于在容器之間復(fù)制文件和目錄,就像Linux cp命令一樣。它不是您每天都會(huì)使用的東西,但是它是筆者個(gè)人最喜歡的,用于在自動(dòng)化失敗時(shí)在緊急情況下提取或還原備份。
這是將本地文件復(fù)制到容器的示例。語(yǔ)法遵循kubectl cp <filename> <namespace/podname:/path/tofile> 格式:
$ kubectl cp commands_copy.txt charts/cherry-chart-88d49478c-dmcfv:commands.txt$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts --/bin/bashroot@cherry-chart-88d49478c-dmcfv:/# lsbin boot commands.txt dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
這是另一個(gè)示例,但是這次是從容器中將文件提取我們的本地計(jì)算機(jī)上。語(yǔ)法為kubectl cp 格式:
$kubectl cp charts/cherry-chart-88d49478c-dmcfv:commands.txt commands_copy.txt$lscommands_copy.txt
感謝各位的閱讀!關(guān)于“Kubernetes管理員必備的kubectl命令有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。