1. 程式人生 > >kubectl命令列工具_Kubernetes中文社群

kubectl命令列工具_Kubernetes中文社群

1、kubectl概述

kubectl是Kubernetes叢集的命令列工具,通過kubectl能夠對叢集本身進行管理,並能夠在叢集上進行容器化應用的安裝部署。執行kubectl命令的語法如下所示:

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

這裡的command,TYPE、NAME和flags為:

  • comand:指定要對資源執行的操作,例如create、get、describe和delete
  • TYPE:指定資源型別,資源型別是大小學敏感的,開發者能夠以單數、複數和縮略的形式。例如:
$ kubectl get pod pod1 
$ kubectl 
get pods pod1  $ kubectl get po pod1
  • NAME:指定資源的名稱,名稱也大小寫敏感的。如果省略名稱,則會顯示所有的資源,例如:
 $ kubectl get pods
  • flags:指定可選的引數。例如,可以使用-s或者–server引數指定Kubernetes API server的地址和埠。

另外,可以通過執行kubectl help命令獲取更多的資訊。

1.1 kubectl的操作

kubectl作為kubernetes的命令列工具,主要的職責就是對叢集中的資源的物件進行操作,這些操作包括對資源物件的建立、刪除和檢視等。下表中顯示了kubectl支援的所有操作,以及這些操作的語法和描述資訊:

操作 語法 描述
annotate kubectl annotate (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 新增或更新一個或多個資源的註釋
api-versions kubectl api-versions [flags] 列出可用的API版本
apply kubectl apply -f FILENAME [flags] 將來自於檔案或stdin的配置變更應用到主要物件中。
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] 連線到正在執行的容器上,以檢視輸出流或與容器互動(stdin)。
autoscale kubectl autoscale (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags] 自動擴宿容由副本控制器管理的Pod。
cluster-info kubectl cluster-info [flags] 顯示群集中的主節點和服務的的端點資訊。
config kubectl config SUBCOMMAND [flags] 修改kubeconfig檔案。
create kubectl create -f FILENAME [flags] 從檔案或stdin中建立一個或多個資源物件。
delete kubectl delete (-f FILENAME \| TYPE [NAME \| /NAME \| -l label \| –all]) [flags] 刪除資源物件。
describe kubectl describe (-f FILENAME \| TYPE [NAME_PREFIX \| /NAME \| -l label]) [flags] 顯示一個或者多個資源物件的詳細資訊。
edit kubectl edit (-f FILENAME \| TYPE NAME \| TYPE/NAME) [flags] 通過預設編輯器編輯和更新伺服器上的一個或多個資源物件。
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] 在Pod的容器中執行一個命令。
explain kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] 獲取Pod、Node和服務等資源物件的文件。
expose kubectl expose (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–port=port] [–protocol=TCP\|UDP] [–target-port=number-or-name] [–name=name] [—-external-ip=external-ip-of-service] [–type=type] [flags] 為副本控制器、服務或Pod等暴露一個新的服務。
get kubectl get (-f FILENAME \| TYPE [NAME \| /NAME \| -l label]) [–watch] [–sort-by=FIELD] [[-o \| –output]=OUTPUT_FORMAT] [flags] 列出一個或多個資源。
label kubectl label (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 新增或更新一個或者多個資源物件的標籤。
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 顯示Pod中一個容器的日誌。
patch kubectl patch (-f FILENAME \| TYPE NAME \| TYPE/NAME) –patch PATCH [flags] 使用策略合併補丁過程更新資源物件中的一個或多個欄位。
port-forward kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 將一個或多個本地埠轉發到Pod。
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] 為kubernetes API伺服器執行一個代理。
replace kubectl replace -f FILENAME 從檔案或stdin中替換資源物件。
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE \| -f NEW_CONTROLLER_SPEC) [flags] 通過逐步替換指定的副本控制器和Pod來執行滾動更新。
run kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 在叢集上執行一個指定的映象。
scale kubectl scale (-f FILENAME \| TYPE NAME \| TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] 擴宿容副本集的數量。
version kubectl version [–client] [flags] 顯示執行在客戶端和伺服器端的Kubernetes版本。

1.2 資源物件型別

在kubernetes中,提供了很多的資源物件,開發和運維人員可以通過這些物件對容器進行編排。在下表中,是kubectl所支援的資源物件型別,以及它們的縮略別名:

資源物件型別 縮略別名
apiservices
certificatesigningrequests csr
clusters
clusterrolebindings
clusterroles
componentstatuses cs
configmaps cm
controllerrevisions
cronjobs
customresourcedefinition crd
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
jobs
limitranges limits
namespaces ns
networkpolicies netpol
nodes no
persistentvolumeclaims pvc
persistentvolumes pv
poddisruptionbudget pdb
podpreset
pods po
podsecuritypolicies psp
podtemplates
replicasets rs
replicationcontrollers rc
resourcequotas quota
rolebindings
roles
secrets
serviceaccounts sa
services svc
statefulsets
storageclasses

1.3 輸出選項

kubectl預設的輸出格式為純文字格式,可以通過-o或者–output欄位指定命令的輸出格式。

$ kubectl [command] [TYPE] [NAME] -o=<output_format>
輸出格式 描述
-o=custom-columns=<spec> 使用以逗號分隔的自定義列打印表格。
-o=custom-columns-file=<filename> 使用檔案中自定義列打印表格。
-o=json 輸出JSON格式的API物件
-o=jsonpath=<template> 列印在jsonpath表示式中定義的欄位
-o=jsonpath-file=<filename> 列印檔案中以jsonpath表示式定義的欄位
-o=name 僅僅輸出資源物件的名稱。
-o=wide 輸出帶有附加資訊的純文字格式。對於Pod物件,將會包含Node名稱。
-o=yaml 輸出YAML格式的API物件

2、kubectl安裝部署

2.1 安裝kubectl

1)下載kubectl

並將kubectl.exe所在的地址新增至Windows的環境變數的Path中。

2)配置kubeconfig檔案

RKE會在配置檔案所在的目錄下部署一個本地檔案,該檔案中包含kube配置資訊以連線到新生成的群集。

預設情況下,kube配置檔案被稱為.kube_config_cluster.yml。將這個檔案複製到你的本地~/.kube/config,就可以在本地使用kubectl了。

需要注意的是,部署的本地kube配置名稱是和叢集配置檔案相關的。例如,如果您使用名為mycluster.yml的配置檔案,則本地kube配置將被命名為.kube_config_mycluster.yml。

2.2 驗證

執行kubectl命令,獲取nodes的資訊:

$ kubectl get nodes

3、kubectl的常用命令示例

在此部分將提供常用命令的示例,已幫助您快速瞭解和試用kubectl。

1)kubectl create命令

此命令通過檔案或者stdin建立一個資源物件,假設這裡存在一個nginx部署的YAML配置檔案,可以通過執行下面的命令建立部署物件。

$ kubectl create -f nginx-deployment.yaml
nginx部署的YAML配置檔案的示例程式碼如下:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
        - name: dc-hspfd
      containers:
      # 應用的映象
      - image: nginx
        name: nginx
        imagePullPolicy: IfNotPresent
        # 應用的內部埠
        ports:
        - containerPort: 80
          name: nginx80
        # 持久化掛接位置,在docker中      
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: nginx-data
        - mountPath: /etc/nginx
          name: nginx-conf
      volumes:
      # 宿主機上的目錄
      - name: nginx-data
        nfs:
          path: /k8s-nfs/nginx
          server: 192.168.8.150
      - name: nginx-conf
        nfs:
          path: /k8s-nfs/nginx/conf
          server: 192.168.8.150

2)kubectl get 命令

通過此命令列出一個或多個資源物件,在這裡通過kubectl get命令獲取default名稱空間下的所有部署。

3)kubectl describe命令

此命令用於顯示一個或多個資源物件的詳細資訊,在這裡通過獲取上述nginx部署的資訊。

$ kubectl describe deployments/nginx

4)kubectl exec命令

此命令用於在Pod中的容器上執行一個命令,此處在nginx的一個容器上執行/bin/bash命令。

$ kubectl exec -it nginx-5847748bf9-49k5k /bin/bash

5)kubectl logs命令

此命令用於獲取Pod中一個容器的日誌資訊,此處獲取nginx一個容器的日誌資訊。

$ kubectl logs nginx-5847748bf9-49k5k

6)kubectl delete命令

此命令用於刪除叢集中已存在的資源物件,可以通過指定名稱、標籤選擇器、資源選擇器等。此處刪除前面建立的nginx部署。

$ kubectl delete deployments/nginx

參考資料

1.《kubectl Usage Conventions》地址:https://kubernetes.io/docs/reference/kubectl/conventions/

2.《kubectl Commands》地址:https://kubernetes.io/docs/reference/kubectl/kubectl-cmds/

3.《Overview of kubectl》地址:https://kubernetes.io/docs/reference/kubectl/overview/

作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。