簡介:kubectl是一個命令行界面,用於運行針對Kubernetes群集的命令。
語法:
kubectl [command] [TYPE] [NAME] [flags]
- command:指定您希望對一個或多個資源執行的操作,例如創建,獲取,描述,刪除。
- TYPE:指定資源類型。 資源類型區分大小寫,可以使用單數,復數或縮寫形式。
- NAME:指定資源的名稱。 名稱區分大小寫。 如果省略名稱,則會顯示所有資源的詳細信息,例如$ kubectl get pod。
- flags:指定可選標志。 例如,可以使用-s或--server標志來指定Kubernetes API服務器的地址和端口。
1、顯示Pod的更多信息
kubectl get pod <pod-name> -o wide
以yaml格式顯示Pod的詳細信息
kubectl get pod <pod-name> -o yaml
2、創建資源對象
根據yaml配置文件一次性創建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
根據<directory>目錄下所有.yaml、.yml、.json文件的定義進行創建操作
kubectl create -f <directory>
3、查看資源對象
查看所有Pod列表
kubectl get pods
4、查看rc和service列表
kubectl get rc,service
5、描述資源對象
顯示Node的詳細信息
kubectl describe nodes <node-name>
顯示Pod的詳細信息
kubectl describe pods/<pod-name>
顯示由RC管理的Pod的信息
kubectl describe pods <rc-name>
6、刪除資源對象
基於Pod.yaml定義的名稱刪除Pod
kubectl delete -f pod.yaml
刪除所有包含某個label的Pod和service
kubectl delete pods,services -l name=<label-name>
刪除所有Pod
kubectl delete pods --all
7、執行容器的命令
執行Pod的data命令,默認是用Pod中的第一個容器執行
kubectl exec <pod-name> data
指定Pod中某個容器執行data命令
kubectl exec <pod-name> -c <container-name> data
通過bash獲得Pod中某個容器的TTY,相當於登錄容器
kubectl exec -it <pod-name> -c <container-name> /bin/bash
8、使用一些復雜過濾條件查看特定的資源對象
# 根據重啟次數排序列出 pod
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# 獲取所有具有 app=cassandra 的 pod 中的 version 標簽
$ kubectl get pods --selector=app=cassandra rc -o jsonpath='{.items[*].metadata.labels.version}'
# 獲取所有節點的 ExternalIP
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 查看哪些節點已就緒
$ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
9、Pod的擴容縮容、滾動升級以及更新資源配置
執行擴容縮容Pod的操作
kubectl scale rc redis --replicas=3
我們需要確認的是在rc配置文件中定義的replicas數量,當我們執行上述命令的結果大於replicas的數量時,則我們執行的命令相當於擴容操作,反之相反,可以理解為我們填寫的數量是我們需要的Pod數量。需要注意的是,當我們需要進行永久性擴容時,不要忘記修改rc配置文件中的replicas數量。
Pod的滾動升級
執行滾動升級操作
kubectl rolling-update redis -f redis-rc.update.yaml
需要注意的是當我們執行rolling-update命令前需要准備好新的RC配置文件以及ConfigMap配置文件,RC配置文件中需要指定升級后需要使用的鏡像名稱,或者可以使用kubeclt rolling-update redis --image=redis-2.0直接指定鏡像名稱的方式直接升級。
# 強制替換,刪除后重新創建資源。會導致服務中斷。
$ kubectl replace --force -f ./pod.json
# 為 nginx RC 創建服務,啟用本地 80 端口連接到容器上的 8000 端口
$ kubectl expose rc nginx --port=80 --target-port=8000
# 更新單容器 pod 的鏡像版本(tag)到 v4
$ kubectl get pod mypod -o yaml | sed 's/
image:myimageimage:myimage:.*$/\1:v4/' | kubectl replace -f -
$ kubectl label pods my-pod new-label=awesome # 添加標簽
$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 添加注解
$ kubectl autoscale deployment foo --min=2 --max=10 # 自動擴展 deployment “foo”
10、查看容器的日志
查看容器輸出到stdout的日志:
kubectl logs <pod-name>
跟蹤查看容器的日志(tail -f):
kubectl logs -f <pod-name> -n <namespace> -c <container-name>
11、Kubectl context和配置
修改kubectl命令行工具默認使用的apiServer地址、集群CA和客戶端證書:
[root@bogon ssl]# kubectl config set-cluster default-cluster --server=https://10.0.2.5:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt
Cluster "default-cluster" set.
[root@bogon ssl]# kubectl config set-credentials default-admin --certificate-authority=/etc/kubernetes/ssl/ca.crt --client-key=/etc/kubernetes/ssl/cs_client.key --client-certificate=/etc/kubernetes/ssl/cs_client.crt
User "default-admin" set.
[root@bogon ssl]# kubectl config set-context default-system --cluster=default-cluster --user=default-admin 在kubeconfig配置中添加一條名為default-system的上下文記錄
Context "default-system" created.
[root@bogon ssl]# kubectl config use-context default-system #設置默認上下文為default-system
Switched to context "default-system".
[root@bogon ~]# kubectl config current-context #查看當前的上下文
default-system
查看kubectl context配置信息:
# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /etc/kubernetes/ssl/ca.crt
server: https://10.0.2.5:6443
name: default-cluster
contexts:
- context:
cluster: default-cluster
user: default-admin
name: default-system
current-context: default-system
kind: Config
preferences: {}
users:
- name: default-admin
user:
client-certificate: /etc/kubernetes/ssl/cs_client.crt
client-key: /etc/kubernetes/ssl/cs_client.key
顯示當前的上下文:
[root@bogon ~]# kubectl config current-context
default-system
12、在線編輯資源
# kubectl edit svc/mysql #可以直接對各種資源對象進行在線編輯變更
13、節點和集群信息查詢或調度方法
$ kubectl cordon my-node # 標記 my-node 不可調度
$ kubectl drain my-node # 清空 my-node 以待維護
$ kubectl uncordon my-node # 標記 my-node 可調度
$ kubectl top node my-node # 顯示 my-node 的指標度量
$ kubectl cluster-info # 顯示 master 和服務的地址
$ kubectl cluster-info dump # 將當前集群狀態輸出到 stdout
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 將當前集群狀態輸出到 /path/to/cluster-state
# 如果該鍵和影響的污點(taint)已存在,則使用指定的值替換
$ kubectl taint nodes foo dedicated=special-user:NoSchedule
14、資源類型列表
下表列出的是 kubernetes 中所有支持的類型和縮寫的別名。
資源類型
|
縮寫別名
|
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
|
|
15、kubectl的格式化輸出
要以特定的格式向終端窗口輸出詳細信息,可以在 kubectl 命令中添加 -o 或者 -output 標志。
輸出格式
|
描述
|
-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 對象
|
16、Kubectl 日志打印級別
使用 -v 或 --v 標志跟着一個整數來指定日志級別。
詳細等級
|
描述
|
--v=0
|
總是對操作人員可見。
|
--v=1
|
合理的默認日志級別,如果您不需要詳細輸出。
|
--v=2
|
可能與系統的重大變化相關的,有關穩定狀態的信息和重要的日志信息。這是對大多數系統推薦的日志級別。
|
--v=3
|
有關更改的擴展信息。
|
--v=4
|
調試級別詳細輸出。
|
--v=6
|
顯示請求的資源。
|
--v=7
|
顯示HTTP請求的header。
|
--v=8
|
顯示HTTP請求的內容。
|
參考: