天天看點

Kubernetes-kubectl指令行工具1、kubectl概述2、kubectl安裝部署3、kubectl的常用指令示例

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

此處是在windows下安裝,是以下載下傳kubectl.exe,下載下傳位址:

https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe

并将kubectl.exe所在的位址添加至Windows的環境變量的Path中。

其他作業系統下安裝kubectl,請參考:

https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2

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      
Kubernetes-kubectl指令行工具1、kubectl概述2、kubectl安裝部署3、kubectl的常用指令示例

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命名空間下的所有部署。

Kubernetes-kubectl指令行工具1、kubectl概述2、kubectl安裝部署3、kubectl的常用指令示例

3)kubectl describe指令

此指令用于顯示一個或多個資源對象的詳細資訊,在這裡通過擷取上述nginx部署的資訊。

$ kubectl describe deployments/nginx      
Kubernetes-kubectl指令行工具1、kubectl概述2、kubectl安裝部署3、kubectl的常用指令示例

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      

本文轉自中文社群-Kubernetes-kubectl指令行工具

繼續閱讀