k8s技術預研6--Kubernetes集群kubectl命令的常見使用方法


簡介: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請求的內容。


參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM