Kubernetes管理員手邊必備的9個kubectl命令
Kubernetes是當今基礎架構的主導技術,這意味著系統管理員需要熟悉其管理。多年來,筆者一直堅持每天管理Kubernetes叢集,並且總結了一些技巧,希望可以幫助其他人簡化他們的管理。
筆者在這裡分享9個有關kubectl的命令,主要說明筆者每天用來管理Kubernetes叢集的正常執行的命令。筆者將它們分為幾部分,以幫助讀者確定是否應將它們用於某些任務。筆者還以長號和簡寫形式包含了一些標誌,以幫助讀者更快地使用它們。
1. 使用Kubectl獲取(get)、建立(create)、編輯(edit)和刪除(delete)資源
從命令列實用程式開始,最安全的地方是提問(讀操作)而不是發出命令(寫操作)。有用的get命令可以使您滾動起來。
命令1:Kubectl get
使用get可以獲取叢集中當前擁有的資源列表。您可以獲得的資源型別包括:
Namespace
Pod
Node
Deployment
Service
ReplicaSets
每個選項都提供有關群集中可用資源的詳細資訊。例如,這是get nodes命令的輸出,該命令提供了Kubernetes的用法和狀態版本。
$kubectl get nodesNAME STATUS ROLES AGE VERSIONminikube Ready master 9d v1.18.0
這些命令大多數都有縮減版。要獲取名稱空間,可以執行kubectl get namespaces或kubectl get ns:
$ kubectl get nsNAME STATUS AGEcharts Active8ddefaultActive9dkube-node-lease Active9dkube-public Active9dkube-system Active9d
每個get命令都可以使用–namespace或-n標誌集中於給定的名稱空間。當您想要檢視kube-system中的Pod時,筆者會特別提供幫助,這是執行Kubernetes本身所需的服務。
$ 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,您幾乎可以在叢集中建立任何型別的資源。其中一些資源確實需要配置檔案和名稱空間來設定資源以及名稱。您可以建立的資源包括:
service
cronjob
deployment
job
namespace (ns)
因此,建立create namespace需要另一個引數來命名名稱空間。
$kubectl create ns hello-therenamespace/hello-there created
我們也可以使用cron命令來連續建立執行作業,就像許多Linux朋友會熟悉的那樣。在這裡,我們使用cronjob命令每五秒鐘回顯一次“ hello”。
$kubectl create cronjob my-cron --image=busybox --schedule="*/5 * * * *"--echohellocronjob.batch/my-namespaced-cron created
您也可以使用簡化版的命令cj而不是cronjob。
$kubectl create cj my-existing-cron --image=busybox --schedule="*/15 * * * *"--echohellocronjob.batch/my-existing-cron created
命令3:Kubectl edit
那麼,當筆者們建立某些東西並想要更新時會發生什麼呢?這就是kubectl edit的作用。
執行此命令時,可以編輯叢集中的任何資源。它將開啟您的預設文字編輯器。因此,我們將編輯現有的cronjob,我們可以執行:
$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: {}
這個計劃設定為每15秒一次:
我們將其更改為每25秒寫入一次資源:
編寫完成後,我們可以看到它已更改。
$ kubectl edit cronjob/my-existing-croncronjob.batch/my-existing-cron edited
如果要使用其他編輯器,可以使用此KUBE_EDITOR語法新增來覆蓋它。
$ KUBE_EDITOR="nano"kubectl edit cronjob/my-existing-cron
命令4:Kubectl delete
到目前為止,除了將其完全刪除之外,我們已經做了所有事情,這就是我們下一步要做的。我們剛剛編輯的cronjob是兩個cronjobs之一,因此現在我們將刪除整個資源。
$ kubectldeletecronjobmy-existing-croncronjob.batch"my-existing-cron"deleted
作為警告,切勿刪除你所不知道的所有相關資訊的內容。一旦資源被刪除,就無法恢復。您將不得不重新建立它,因此在執行此命令之前請三思。
命令5:Kubectl apply
之前,筆者提到過某些命令將需要配置檔案。該apply命令允許您在叢集內透過檔案應用配置資源。這也可以透過命令列standard in (STDIN)來完成此操作,但是建議始終是按檔案進行。
筆者認為該命令有些高階,因為您需要知道如何使用群集以及要應用哪種配置檔案。對於此示例,筆者曾經使用來自Helm的基於角色訪問控制(RBAC)配置用於一個服務帳戶。
$kubectl apply -f commands.yamlserviceaccount/tiller createdclusterrolebinding.rbac.authorization.k8s.io/tiller created
您可以應用幾乎任何所需的配置,但是始終需要確定要應用的配置,否則可能會看到意想不到的結果。
2. 使用Kubectl對Kubernetes進行故障排除
命令6:Kubectl describe
Describe顯示您正在檢視的資源的詳細資訊。最常見的用例是描述一個pod或節點,以檢查事件中是否有錯誤,或者資源是否太有限而無法使用。
您可以描述的資源包括:
Nodes
Pods
Services
Deployments
Replica sets
Cronjobs
在此示例中,我們可以從前面的示例中describe叢集中當前的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內應用程式發生的事件,但logs提供了與pod相關的Kubernetes內發生的事件詳細資訊。理解這一區別可以幫助您解決應用程式內部和Kubernetes內部發生的問題,因為它們都是不被允許發生的相同問題。
$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""-"
您還可以透過使用grep命令來消除額外的噪音或尋找其他事件。該kube-probe可能有噪音,讓我們用grep命令過濾出來。
$ 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"“-”
由於某些部署在一個pod中有多個容器,您還可以對日誌使用-c<container name>,從而只在一個特定容器中查詢日誌。
命令8:Kubectl exec
與docker exec命令非常相似,您也可以執行到容器中以直接對應用程式進行故障排除。當Pod中的日誌沒有為您提供可能要除錯的問題的答案時,此功能很有用。使用exec命令時,該行的末尾必須始終提供您在pod內使用的shell。
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts --/bin/bashroot@cherry-chart-88d49478c-dmcfv:/#
命令9:Kubectl cp
該命令用於在容器之間複製檔案和目錄,就像Linux cp命令一樣。它不是您每天都會使用的東西,但是它是筆者個人最喜歡的,用於在自動化失敗時在緊急情況下提取或還原備份。
這是將本地檔案複製到容器的示例。語法遵循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
這是另一個示例,但是這次是從容器中將檔案提取我們的本地計算機上。語法為kubectl cp 格式:
$kubectl cp charts/cherry-chart-88d49478c-dmcfv:commands.txt commands_copy.txt$lscommands_copy.txt
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490593/viewspace-2691053/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server資料庫管理員必備的DBCC命令SQLServer資料庫
- Kubernetes之kubectl常用命令
- [zt] SQL Server管理員必備的DBCC用法SQLServer
- 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南
- 80 多個 Linux 系統管理員必備的監控工具Linux
- 每個Web開發者必備的9個軟技能Web
- Java開發人員必備Linux命令JavaLinux
- Mysql系列第三講 管理員必備技能(必須掌握)MySql
- 開發者進階必備的9個Tips & Tricks!
- Kubernetes 中必備的 10 個告警處置方法
- kubectl命令大全
- Linux的幾個新手必備的命令(一)Linux
- 24 個必知必會的系統管理員面試問題面試
- vim 必備命令
- Linux 操作必備 150 個命令Linux
- Linux 管理員手冊(8)--備份(轉)Linux
- Linux 管理員手冊(9)--Keeping Time(轉)Linux
- 優秀的Java開發人員必備的6個技能!Java
- 資料庫管理員必讀的十本技術手冊資料庫
- Linux 運維必備的 40 個命令總結Linux運維
- 防火牆配置中必備的六個主要命令防火牆
- 9個必須時刻警惕的Linux命令&程式碼Linux
- Web開發人員必備的18個iPhone應用程式WebiPhone
- Android開發人員必備的10個開發工具Android
- Solaris管理員常用命令簡明手冊
- 10多個 Linux 系統管理員必備的監控工具、常用的網站監控工具Linux網站
- 常用kubectl命令總結
- kubectl常用命令
- 四個管理銷售軟體必備功能
- 9 個使用前必須再三小心的 Linux 命令Linux
- 9個使用前必須再三小心的 Linux 命令Linux
- Linux必學的60個命令(3)-系統管理Linux
- 給Linux系統/網路管理員準備的Nmap命令的29個實用範例Linux
- Cheat—— 給Linux初學者和管理員一個終極命令列"備忘單"Linux命令列
- 開發者必備Linux命令Linux
- git命令使用(必備系列)Git
- 新手必備:FTP命令大全FTP
- kubernetes實踐之三十一:kubectl