1. 程式人生 > >使用kubectl管理k8s叢集(二十九)

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

前言

在搭建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最全教程——從理論到實戰(八)

Docker最全教程之使用Tencent Hub來完成CI(九)

Docker最全教程——資料庫容器化(十)

Docker最全教程——資料庫容器化之持久儲存資料(十一)

Docker最全教程——MongoDB容器化(十二)

Docker最全教程——Redis容器化以及排行榜實戰(十三)

Docker最全教程之Ubuntu下安裝Docker(十四)

Docker最全教程之樹莓派和Docker(十五)

Docker最全教程之使用TeamCity來完成內部CI、CD流程(十六)

Docker最全教程之使用Docker搭建Java開發環境(十七)

Docker最全教程之Go實戰,牆裂推薦(十八)

Docker最全教程之使用.NET Core推送釘釘訊息(十九)

Docker最全教程之使用 Visual Studio Code玩轉Docker(二十)

Docker最全教程之Python爬網實戰(二十一)

Docker最全教程之使用PHP搭建個人部落格站點(二十二)

Docker最全教程之使用Node.js搭建團隊技術文件站(二十三)

Docker最全教程之MySQL容器化 (二十四)

Docker+ Kubernetes已成為雲端計算的主流(二十五)

容器化之後如何節省雲端成本?(二十六)

瞭解Kubernetes主體架構(二十七)

使用Minikube部署本地Kubernetes叢集(二十八)