kubectl使用方法及常用命令小結


Kubectl 是一個命令行接口,用於對 Kubernetes 集群運行命令。kubectl 在 $HOME/.kube 目錄中尋找一個名為 config 的文件。

kubectl安裝方法詳見:https://www.cnblogs.com/shadow-yin/p/14843099.html

1. 基本語法

 

使用以下語法 kubectl 從終端窗口運行命令:

kubectl [command] [TYPE] [NAME] [flags]

其中 commandTYPENAMEflags 分別是:

  • command:指定要對一個或多個資源執行的操作,例如 creategetdescribedelete
  • TYPE:指定資源類型。資源類型不區分大小寫,可以指定單數、復數或縮寫形式。例如,以下命令輸出相同的結果:
```shell
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
```

 

  • NAME:指定資源的名稱。名稱區分大小寫。如果省略名稱,則顯示所有資源的詳細信息 kubectl get pods
    在對多個資源執行操作時,您可以按類型和名稱指定每個資源,或指定一個或多個文件:
  • 要按類型和名稱指定資源:
  • 要對所有類型相同的資源進行分組,請執行以下操作:TYPE1 name1 name2 name<#>
    例子:kubectl get pod example-pod1 example-pod2
  • 分別指定多個資源類型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
    例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
  • 用一個或多個文件指定資源:-f file1 -f file2 -f file<#>
  • 使用 YAML 而不是 JSON 因為 YAML 更容易使用,特別是用於配置文件時。
    例子:kubectl get pod -f ./pod.yaml
  • flags: 指定可選的參數。例如,可以使用 -s-server 參數指定 Kubernetes API 服務器的地址和端口。

注意:

從命令行指定的參數會覆蓋默認值和任何相應的環境變量。

如果您需要幫助,只需從終端窗口運行 kubectl help 即可。

 

注:以上內容摘自https://kubernetes.io/zh/docs/reference/kubectl/overview/

 

2. 查看型命令

指定命名空間(namespace)查看集群內的pod:

kubectl get pods -n test-namespace

(-n test-namespace表示指定test-namespace這個命名空間)

 

顯示pod的更多信息:

kubectl get pods -n test-namespace -o wide

(比上一條命令能顯示更多的pod信息)

 

以yaml格式顯示pod詳細信息:

kubectl get pods -n test-namespace -o yaml

(能顯示pod的詳細信息,以yaml格式輸出在屏幕上)

 

以json格式顯示pod詳細信息:

kubectl get pods -n test-namespace -o json

(能顯示pod的詳細信息,以json格式輸出在屏幕上)

 

指定pod名稱顯示其信息

kubectl get pods -n test-namespace xxx

(xxx為pod名稱,后跟-o wide 或者 -o yaml則顯示該pod的詳細信息。一般用法是先用kubectl get pods -n test-namespace查看所有pod名稱,然后使用指定名稱的方式來查看特定pod的詳細信息)

 

查看pod詳細信息:

kubectl describe pods -n test-namespace xxx

(xxx是pod名稱。該命令與之前幾條命令不同之處在於它會顯示pod的所有配置信息,顯示運行狀態,甚至還包括pod運行產生的事件,可用於產生故障時定位問題。不跟pod名稱會顯示命名空間下所有的pod信息,一般都需要后跟pod名稱,以單獨顯示指定pod的信息)

 

注:以上命令是查看pod類型資源的命令,將pods替換成其他資源類型則可以查看相應資源的信息。Kubernetes的所有資源信息可以通過命如下查看:

kubectl api-resources

 

查看pod的log日志:

kubectl logs xxx -n test-namespace
(xxx為pod名稱)

 

查看所有具有某一標簽的pod:

kubectl get pods -n test-namespace -l alibabacloud.com/rd-app=cdn-bind

(-l選項用於指定標簽,alibabacloud.com/rd-app=cdn-bind表示alibabacloud.com/rd-app這個標簽的值為“cdn-bind”)

 

 

查看所有命名空間下的pod:

kubectl get pods --all-namespaces

(--all-namespaces集群內所有的已創建的命名空間)

 

 

3. 創建型命令

要使用創建型的命令,一般都是先使用yaml格式的文件定義一個資源,然后在命令中指定yaml文件名稱來創建相應的資源。yaml文件可以保存在本地(運行kubectl工具的機器)的任意位置,如果不是在當前目錄,命令中需要指定yaml文件所在位置。

yaml文件示例:

apiVersion: v1
kind: Service
metadata:
  labels:
    XXXX.com/rd-tenant: CDN
  name: test-cdn-svc-cm-agent-1XXX
  namespace: test-namespace
spec:
  ports:
  - name: test-cdn-cm-agent-1
    port: 3400
    protocol: TCP
    targetPort: 3400
  selector:
    alibabacloud.com/rd-app: cdn-cdncm-agent
    alibabacloud.com/rd-app-cluster: test-node
    alibabacloud.com/rd-tenant: CDN
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

 

以上yaml文件定義了一個類型(kind)為Service的資源。在metadata中為其打上了一系列的標簽,指定了其名稱(該名稱在命名空間內唯一),指定其所屬的命名空間。然后在spec中指定了該服務的名稱,端口。selector的作用是為了提供該服務需要選擇具有什么標簽的pod(pod是提供服務的實體)。將該yaml格式文件保存為文件名svc.yaml。則創建該資源可以用如下的命令:

kubectl apply -f svc.yaml

或者:

kubectl create -f svc.yaml

兩條命令的區別如下表:

序號

kubectl apply

kubectl create

1

根據yaml文件中包含的字段(yaml文件可以只寫需要改動的字段),直接升級集群中的現有資源對象

首先刪除集群中現有的所有資源,然后重新根據yaml文件(必須是完整的配置信息)生成新的資源對象

2

yaml文件可以不完整,只寫需要的字段

yaml文件必須是完整的配置字段內容

3

kubectl apply只工作在yaml文件中的某些改動過的字段

kubectl create工作在yaml文件中的所有字段

4

在只改動了yaml文件中的某些聲明時,而不是全部改動,你可以使用kubectl apply

在沒有改動yaml文件時,使用同一個yaml文件執行命令kubectl replace,將不會成功(fail掉),因為缺少相關改動信息

建議使用apply,這種方法如果資源部存在就會創建,如果存在,則比較已經存在的資源與新定義的資源的不同點,將不同點替換。該命令可用於修改已有資源除資源名稱外(因為資源名稱是命名空間中同類型資源的唯一標識)的一些屬性。

 

4. 更新型命令

上一節提到apply命令同樣可用於更新資源的屬性。但是也還有其他命令用於更新資源的屬性。

在線編輯資源屬性:

kubectl edit pods xxx -n test-namespace

(xxx表示pod名稱。執行該命令后會彈出當前pod的屬性編輯界面,在上面直接修改資源屬性,然后保存退出,即完成資源更新操作)

 

給pod添加標簽:

kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind

(xxx表示pod名稱。該命令表示給pod添加alibabacloud.com/rd-app標簽,標簽的值為“cdn-bind”。該命令執行時,pod的原有標簽必須不存在alibabacloud.com/rd-app這個標簽,否則添加失敗)

 

修改pod標簽:

kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind --overwrite=true

(如果pod已經存在alibabacloud.com/rd-app這個標簽,需要修改為其他值,則需要在后面添加--overwrite=true )

 

5. 刪除型命令

使用定義資源是的yaml文件刪除資源:

kubectl delete -f svc.yaml

(svc.yaml文件是前述用於定義service的文件,將apply或者create換成delete即是刪除該資源(service),使用該命令是,不需要指定命名空間,因為在yaml文件中已經指定了命名空間)

 

使用資源名稱刪除資源:

kubectl delete services test-cdn-svc-cm-agent-1 -n test-namespace

(test-cdn-svc-cm-agent-1是已經創建的service名稱。該命令必須指定命名空間。該命令的用法一般是先用get命令獲取到資源的名稱,然后在指定名稱刪除資源)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM