使用kubectl管理k8s叢集(二十九)

雪雁發表於2019-07-17

前言

在搭建k8s叢集之前,我們需要先了解下kubectl的使用,以便在叢集部署出現問題時進行檢查和處理。命令和語法記不住沒有關係,但是請記住主要的語法和命令以及幫助命令的使用。

在下一篇,我們將講述使用Kubeadm來建立k8s叢集。


 

目錄

使用kubectl管理k8s叢集

  • 概述
  • 語法
  • 主要命令(command)說明
  • 資源型別(TYPE)說明
  • 命令標準(flags)說明
  • 格式化輸出

 

 使用kubectl管理k8s叢集

 

概述

Kubectl是一個命令列介面,用於執行鍼對Kubernetes叢集的命令。Kubectl的配置檔案在$HOME/.kube目錄。我們可以通過設定KUBECONFIG環境變數或設定命令引數--kubeconfig來指定其他位置的kubeconfig檔案。

 

語法

我們可以使用以下語法kubectl從終端視窗執行命令:

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

其中command,TYPE,NAME,和flags分別是:

  • command:指定要在一個或多個資源進行的操作,例如create,get,describe,delete。例如“kubectl get cs”。
  • TYPE:指定資源型別。資源型別不區分大小寫,可以指定單數,複數或縮寫形式。例如,以下命令產生相同的輸出:

  kubectl get pod pod1

  kubectl get pods pod1

  kubectl get po pod1

  • NAME:指定資源的名稱。名稱區分大小寫。如果省略名稱,則顯示所有資源的詳細資訊,如“kubectl get pods”。

在對多個資源執行操作時,我們可以按型別和名稱指定每個資源,或指定一個或多個檔案:

1)         要按型別和名稱指定資源:

    • 如果資源型別相同,則對資源進行分組: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

2)     要使用一個或多個檔案指定資源: -f file1 -f file2 -f file<#>

    • 注意使用YAML而不是JSON,因為YAML往往更加使用者友好,特別是對於配置檔案。
      例:kubectl get pod -f ./pod.yaml
  • flags:指定的可選標誌,不過值得注意的是,使用命令列指定引數會覆蓋預設值以及相關的環境變數。例如,我們可以使用-s或--server標誌來指定Kubernetes API伺服器的地址和埠。

 

主要命令(command)說明

Kubectl的主體操作命令如下表所示:

操作

描述

annotate

新增或更新一個或多個資源的註釋。

api-versions

列出可用的API版本。

apply

通過檔名或標準輸入流(stdin)對資源進行配置,例如“kubectl apply --prune -f manifest.yaml -l app=nginx”

attach

附加到一個正在執行的容器,以檢視輸出流或與容器(stdin)互動。

autoscale

自動縮放由Replication Controller管理的pod集。

cluster-info

顯示有關群集中主伺服器和服務的端點資訊。

config

指定kubeconfig檔案。

create

從檔案或標準輸入流(stdin)建立一個或多個資源。例如使用pod.json建立pod“kubectl create -f ./pod.json”。

delete

通過檔案,標準輸入、指定標籤選擇器,名稱,資源選擇器或資源來刪除資源。例如刪除所有的pod“kubectl delete pods --all”。

describe

顯示一個或多個資源的詳細。例如檢視pod“coredns-5c98db65d4-h5v9h”的詳情“kubectl describe pod coredns-5c98db65d4-h5v9h -n kube-system”,這裡使用了“-n”指定了名稱空間。

edit

在伺服器上編輯一個資源。

exec

在Pod容器中執行命令。

explain

檢視資源的文件。例如pod,節點,服務等。例如“kubectl explain pods”。

expose

將複製控制器,服務或pod公開為新的Kubernetes服務。

get

列出一個或多個資源。例如“kubectl get pods -n kube-system -o wide”命令將列出“kube-system”名稱空間下的所有pod並且以表格狀輸出pod的相關附加資訊(節點名稱)。

label

新增或更新一個或多個資源的標籤。

logs

輸出容器在pod中的日誌。例如執行以下命令“kubectl logs etcd-k8s-master -n kube-system”將在終端中輸出該容器的日誌。

patch

使用patch策略更新資源的欄位。

port-forward

將一個或多個本地埠轉發到pod。

proxy

執行代理指定到Kubernetes API server。

replace

從檔案或標準輸入中替換資源。

rolling-update

通過逐步替換指定的Replication Controller及其pod來執行滾動更新。

run

在群集上執行指定的映像。例如執行Nginx“kubectl run nginx --image=nginx”。

scale

設定新的Deployment, ReplicaSet, Replication Controller 或者 Job副本數量。例如“ubectl scale --replicas=3 -f foo.yaml”。

version

顯示客戶端和伺服器上執行的Kubernetes版本。

api-resources

輸出服務端支援的所有的API資源型別。

api-versions

輸出服務端支援的API版本。

更多命令,我們可以執行“kubectl help”來檢視當前所有支援的命令,也可以訪問官方地址“https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands”來檢視所有的命令說明。在使用的過程中,如果我們不瞭解單個命令的具體語法,我們可以使用“kubectl <command> --help”來獲取詳細介紹,如:

kubectl scale --help

 

資源型別(TYPE)說明

我們可以使用“kubectl api-resources”命令來獲取服務端目前支援的所有的資源型別,如下圖所示:

 

命令標準(flags)說明

同樣的,我們可以使用命令“kubectl options”來輸出當前支援的所有可選標誌:

 其中,在前面我們說過,“-s”可以指定Kubernetes API 伺服器地址,“-n”可以指定名稱空間,“--kubeconfig”可以指定kubeconfig配置檔案。主要的一些說明如下所示:

 

格式化輸出

預設情況下,所有的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,包括節點名稱。

-o=yaml

輸出YAML格式的API物件。

例如:

kubectl get pods -n kube-system -o wide

 

 

往期內容連結

Docker最全教程——從理論到實戰(一)

Docker最全教程——從理論到實戰(二)

Docker最全教程——從理論到實戰(三)

Docker最全教程——從理論到實戰(四)

Docker最全教程——從理論到實戰(五)

Docker最全教程——從理論到實戰(六)

Docker最全教程——從理論到實戰(七)

Docker最全教程——從理論到實戰(八)

相關文章