前言
在搭建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