第七章 kubernetes 集群命令行工具 kubectl


一、kubectl概述

kubectl 是 Kubernetes 集群的命令行工具,通過 kubectl 能夠對集群本身進行管理,並能夠在集群上進行容器化應用的安裝部署。Kubectl的配置文件在$HOME/.kube目錄。我們可以通過設置KUBECONFIG環境變量或設置命令參數--kubeconfig來指定其他位置的kubeconfig文件。

二、kubectl命令的語法

1.語法

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

官網地址:https://kubernetes.io/docs/reference/kubectl/overview/ 
kubectl flags:https://kubernetes.io/docs/reference/kubectl/kubectl/

2.command

指定要在一個或多個資源進行的操作,例如create,get,describe,delete。例如“kubectl get cs”。

3.TYPE

指定資源類型,資源類型在YAML文件中是大小寫敏感的,資源類型在命令行是不區分大小寫的,開發者能夠以單數、復數和縮略的形式。例如:

#以下命令產生相同的輸出
kubectl get pod  -n kubernetes-dashboard
kubectl get pods -n kubernetes-dashboard
kubectl get po   -n kubernetes-dashboard

4.NAME

指定資源的名稱,名稱也大小寫敏感的。如果省略名稱空間,則顯示默認名稱空間資源的詳細信息或者提示:No resources found in default namespace.。

# 示例:
[root@k8s-master-001 ~]# kubectl get pods
No resources found in default namespace.

[root@k8s-master-001 ~]# kubectl get pods --all-namespaces  # 或者 kubectl get pods --A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kube-system            coredns-6955765f44-c9zfh                     1/1     Running   8          6d7h
kube-system            coredns-6955765f44-lrz5q                     1/1     Running   8          6d7h
kube-system            etcd-k8s-master-001                              1/1     Running   9          6d7h
kube-system            kube-apiserver-k8s-master-001                    1/1     Running   9          6d7h
kube-system            kube-controller-manager-k8s-master-001           1/1     Running   8          6d7h
kube-system            kube-flannel-ds-amd64-dngrk                  1/1     Running   13         6d7h
kube-system            kube-flannel-ds-amd64-h4sn6                  1/1     Running   13         6d6h
kube-system            kube-flannel-ds-amd64-m92wp                  1/1     Running   11         6d6h
kube-system            kube-proxy-28dwj                             1/1     Running   9          6d6h
kube-system            kube-proxy-c875m                             1/1     Running   8          6d7h
kube-system            kube-proxy-stg6w                             1/1     Running   10         6d6h
kube-system            kube-scheduler-k8s-master-001                    1/1     Running   9          6d7h
kubernetes-dashboard   dashboard-metrics-scraper-7b8b58dc8b-nr5fz   1/1     Running   7          6d1h
kubernetes-dashboard   kubernetes-dashboard-755dcb9575-9kg7p        1/1     Running   9          6d1h

[root@k8s-master-001 ~]# kubectl get service --all-namespaces  # 或者 kubectl get service -A
NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  6d7h
kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   6d7h
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.104.12.221   <none>        8000/TCP                 6d1h
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.110.157.29   <none>        443:30001/TCP            6d1h

5.flags

指定可選的標記。例如,可以使用 -s 或 --server標識來指定Kubernetes API服務器的地址和端口;-n指定名稱空間;等等。

注意:你從命令行指定的flags將覆蓋默認值和任何相應的環境變量。優先級最高。

6.多資源操作

#1.按類型和名稱指定資源:
1)查看一個資源類型中的多個資源
[root@k8s-master ~]# kubectl get pod -n kube-system coredns-6d99d5879f-2pvbr kube-proxy-28dwj
NAME                       READY   STATUS    RESTARTS   AGE
coredns-6d99d5879f-2pvbr   1/1     Running   1          3d17h
kube-proxy-28dwj           1/1     Running   9          3d15h

2)查看多個資源類型
[root@k8s-master-001 ~]# kubectl get svc,node
NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        3d19h
service/nginx        NodePort    10.96.95.61   <none>        80:46847/TCP   3d16h

NAME                  STATUS   ROLES    AGE     VERSION
node/k8s-master-001   Ready    master   3d18h   v1.18.8
node/k8s-master-002   Ready    master   3d18h   v1.18.8
node/k8s-master-003   Ready    master   3d18h   v1.18.8
node/k8s-node-001     Ready    node     3d16h   v1.18.8
node/k8s-node-002     Ready    node     3d16h   v1.18.8

#2.使用一個或多個文件指定資源:-f file1 -f file2 -f file<#>
使用YAML而不是JSON,因為YAML更容易使用,特別是對於配置文件。
[root@k8s-master-001 ~]# kubectl get pod -f pod.yaml

三、kubectl查看類命令

1.獲取節點和服務版本信息

[root@k8s-master-001 ~]# kubectl  get nodes
NAME             STATUS   ROLES    AGE     VERSION
k8s-master-001   Ready    master   3d18h   v1.18.8
k8s-master-002   Ready    master   3d18h   v1.18.8
k8s-master-003   Ready    master   3d18h   v1.18.8
k8s-node-001     Ready    node     3d16h   v1.18.8
k8s-node-002     Ready    node     3d16h   v1.18.8

2.獲取節點和服務版本信息,並查看附加信息

[root@k8s-master-001 ~]# kubectl  get nodes  -o wide
NAME             STATUS   ROLES    AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8s-master-001   Ready    master   3d18h   v1.18.8   172.16.1.110   <none>        CentOS Linux 7 (Core)   5.4.147-1.el7.elrepo.x86_64      docker://20.10.8
k8s-master-002   Ready    master   3d18h   v1.18.8   172.16.1.111   <none>        CentOS Linux 7 (Core)   5.4.147-1.el7.elrepo.x86_64      docker://20.10.8
k8s-master-003   Ready    master   3d18h   v1.18.8   172.16.1.112   <none>        CentOS Linux 7 (Core)   5.4.147-1.el7.elrepo.x86_64      docker://20.10.8
k8s-node-001     Ready    node     3d16h   v1.18.8   172.16.1.113   <none>        CentOS Linux 7 (Core)   5.4.147-1.el7.elrepo.x86_64   docker://20.10.8
k8s-node-002     Ready    node     3d16h   v1.18.8   172.16.1.114   <none>        CentOS Linux 7 (Core)   5.4.147-1.el7.elrepo.x86_64   docker://20.10.8

3.獲取pod信息,默認是default名稱空間

[root@k8s-master-001 ~]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          3d16h

4.獲取pod信息

#1.獲取pod信息,默認是default名稱空間,並查看附加信息【如:pod的IP及在哪個節點運行】
[root@k8s-master-001 ~]# kubectl  get  pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP             NODE           NOMINATED NODE   READINESS GATES
nginx-f89759699-sd6bq   1/1     Running   1          3d16h   10.241.184.2   k8s-node-002   <none>           <none>

#2.獲取指定名稱空間的pod
[root@k8s-master-001 ~]# kubectl get pod -n kube-system 
NAME                       READY   STATUS    RESTARTS   AGE
coredns-6d99d5879f-2pvbr   1/1     Running   1          3d23h

#3.獲取指定名稱空間中的指定pod
[root@k8s-master-001 ~]# kubectl  get  pod -n kube-system coredns-6d99d5879f-2pvbr
NAME                       READY   STATUS    RESTARTS   AGE
coredns-6d99d5879f-2pvbr   1/1     Running   1          3d23h

#4.獲取所有名稱空間的pod
[root@k8s-master-001 ~]# kubectl  get pod -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
default       nginx-f89759699-sd6bq      1/1     Running   1          3d22h
kube-system   coredns-6d99d5879f-2pvbr   1/1     Running   1          3d23h

#5.查看pod的詳細信息,以yaml格式或json格式顯示
[root@k8s-master-001 ~]# kubectl  get  pods -o yaml
[root@k8s-master-001 ~]# kubectl get pods -o json

#6.查看pod的標簽信息
[root@k8s-master-001 ~]# kubectl  get  pod -A --show-labels
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE     LABELS
default       nginx-f89759699-sd6bq      1/1     Running   1          3d22h   app=nginx,pod-template-hash=f89759699
kube-system   coredns-6d99d5879f-2pvbr   1/1     Running   1          3d23h   k8s-app=kube-dns,pod-template-hash=6d99d5879f

#7.根據Selector(label query)來查詢pod
[root@k8s-master-001 ~]# kubectl  get  pod -A --selector='k8s-app=kube-dns'
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-6d99d5879f-2pvbr   1/1     Running   1          4d

#8.查看運行pod的環境變量
[root@k8s-master-001 ~]# kubectl  exec nginx-f89759699-sd6bq -- env

#9.查看指定pod的日志
[root@k8s-master-001 ~]# kubectl  logs -f --tail 100  -n kube-system coredns-6d99d5879f-2pvbr

5.獲取service信息

#1.查看所有名稱空間的service信息
[root@k8s-master-001 ~]# kubectl get svc -A
NAMESPACE     NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP                  4d2h
default       nginx        NodePort    10.96.95.61   <none>        80:46847/TCP             3d23h
kube-system   kube-dns     ClusterIP   10.96.0.2     <none>        53/UDP,53/TCP,9153/TCP   4d1h

#2.查看默認名稱空間的service信息
[root@k8s-master-001 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        4d2h
nginx        NodePort    10.96.95.61   <none>        80:46847/TCP   3d23h


#3.查看指定名稱空間的service信息
[root@k8s-master-001 ~]# kubectl get svc -n kube-system 
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.2    <none>        53/UDP,53/TCP,9153/TCP   4d1h

6.查看狀態信息

#1.查看component statuses信息(組件狀態)
[root@k8s-master-001 ~]# kubectl  get cs

#2.查看所有config maps信息(配置映射)
[root@k8s-master-001 ~]# kubectl get cm -A

#3.查看所有service accounts信息(服務賬號)
[root@k8s-master-001 ~]# kubectl get sa -A

#4.查看所有daemonsets信息(守護程序)
[root@k8s-master-001 ~]# kubectl get ds -A

#5.查看所有deployments信息(部署應用)
[root@k8s-master-001 ~]# kubectl get deploy -A

#6.查看所有replicasets信息(復制集)
[root@k8s-master-001 ~]# kubectl  get rs -A

#7.查看所有statefulsets信息
[root@k8s-master-001 ~]# kubectl  get sts -A

#8.查看所有jobs信息
[root@k8s-master-001 ~]# kubectl get  jobs -A

#9.查看所有ingresses信息
[root@k8s-master-001 ~]# kubectl get  jobs -A

#10.查看有哪些名稱空間
[root@k8s-master-001 ~]# kubectl get ns

7. 查看pod的描述信息

[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          4d15h

#1.查看pod的描述信息
[root@k8s-master-001 ~]# kubectl describe pod nginx-f89759699-sd6bq

[root@k8s-master-001 ~]# kubectl describe pod -n kube-system coredns-6d99d5879f-2pvbr

#2.查看指定名稱空間中指定deploy的描述信息
[root@k8s-master-001 ~]# kubectl describe deploy -n kube-system coredns
 
#3.查看node或pod的資源使用情況(需要heapster 或metrics-server支持)
[root@k8s-master-001 ~]# kubectl top node
[root@k8s-master-001 ~]# kubectl top pod 

8.查看集群信息

#1.查看集群信息
[root@k8s-master-001 ~]# kubectl cluster-info
或者
[root@k8s-master-001 ~]# kubectl cluster-info dump

#2.查看各組件信息【172.16.1.110為master機器】
kubectl -s https://172.16.1.110:6443 get componentstatuses 

四、kubectl操作類命令

# 創建資源
kubectl create -f xxx.yaml

# 應用資源
kubectl apply -f xxx.yaml

# 應用資源,該目錄下的所有 .yaml, .yml, 或 .json 文件都會被使用
kubectl apply -f <directory>

# 創建test名稱空間
kubectl create namespace test

# 刪除資源
kubectl delete -f xxx.yaml
kubectl delete -f <directory>

# 刪除指定的pod
kubectl delete pod podName

# 刪除指定名稱空間的指定pod
kubectl delete pod -n test podName

# 刪除其他資源
kubectl delete svc svcName
kubectl delete deploy deployName
kubectl delete ns nsName

# 強制刪除
kubectl delete pod podName -n nsName --grace-period=0 --force
kubectl delete pod podName -n nsName --grace-period=1
kubectl delete pod podName -n nsName --now

# 編輯資源
kubectl edit pod podName

五、kubectl進階命令操作

1.進入pod啟動的容器

# kubectl exec:進入pod啟動的容器
kubectl exec -it podName -n nsName /bin/sh    #進入容器
kubectl exec -it podName -n nsName /bin/bash  #進入容器

2.添加label值

# kubectl label:添加label值
kubectl label nodes k8s-node01 zone=north  #為指定節點添加標簽 
kubectl label nodes k8s-node01 zone-       #為指定節點刪除標簽
kubectl label pod podName -n nsName role-name=test    #為指定pod添加標簽
kubectl label pod podName -n nsName role-name=dev --overwrite  #修改lable標簽值
kubectl label pod podName -n nsName role-name-        #刪除lable標簽

3.滾動升級

[root@k8s-master-001 ~]# vi myapp-deployment-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 10
  # 重點關注該字段
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
        ports:
        - containerPort: 80

[root@k8s-master-001 ~]# vi myapp-deployment-v2.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 10
  # 重點關注該字段
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v2
        ports:
        - containerPort: 80

# kubectl滾動升級; 通過 kubectl apply -f myapp-deployment-v1.yaml 啟動deploy
kubectl apply -f myapp-deployment-v2.yaml     #通過配置文件滾動升級
kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3"   #通過命令滾動升級
kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment    #pod回滾到前一個版本
kubectl rollout undo deploy/myapp-deployment --to-revision=2  #回滾到指定歷史版本

4.動態伸縮

# kubectl scale:動態伸縮
kubectl scale deploy myapp-deployment --replicas=5  # 動態伸縮
kubectl scale --replicas=8 -f myapp-deployment-v2.yaml  #動態伸縮【根據資源類型和名稱伸縮,其他配置「如:鏡像版本不同」不生效】

六、kubectl help 獲取更多信息

官網地址查看更多詳情:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
https://kubernetes.io/docs/reference/kubectl/overview/#operations

1.kubectl語法中的command操作

Operation Syntax Description
create kubectl create -f FILENAME [flags] 從文件或標准輸入創建一個或多個資源★★★
expose kubectl expose (-f FILENAME TYPE NAME
run kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 在集群上運行指定的鏡像★★★
explain kubectl explain [–recursive=false] [flags] 獲取各種資源的文檔。例如pods、nodes、services等。★★★★★
get kubectl get (-f FILENAME TYPE [NAME
edit kubectl edit (-f FILENAME TYPE NAME
delete kubectl delete (-f FILENAME TYPE [NAME
rollout kubectl rollout SUBCOMMAND [options] 對資源進行管理。有效的資源類型包括:deployments,daemonsets 和statefulsets
scale kubectl scale (-f FILENAME TYPE NAME
autoscale kubectl autoscale (-f FILENAME TYPE NAME
cluster-info kubectl cluster-info [flags] 顯示集群信息,顯示關於集群中的主機和服務的端點信息。★★★
top kubectl top node、kubectl top pod 需要heapster 或metrics-server支持 顯示資源(CPU/內存/存儲)使用情況★★★
cordon kubectl cordon NODE [options] 將node標記為不可調度
uncordon kubectl uncordon NODE [options] 將node標記為可調度
drain kubectl drain NODE [options] 排除指定node節點,為維護做准備
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] 更新一個或多個節點上的污點★★★
describe kubectl describe (-f FILENAME TYPE [NAME_PREFIX
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 打印pod中一個容器的日志★★★★★
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args…]] 對pod中的容器執行命令或進入Pod容器★★★★★
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] 運行Kubernetes API服務的代理
cp kubectl cp [options] 從宿主機復制文件和目錄到一個容器;或則從容器中復制文件和目錄到宿主機★★★
auth kubectl auth [flags] [options] 檢查授權
apply kubectl apply -f FILENAME [flags] 通過文件名中的內容或stdin將配置應用於資源★★★★★
patch kubectl patch (-f FILENAME TYPE NAME
replace kubectl replace -f FILENAME 通過文件或stdin替換資源
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE -f NEW_CONTROLLER_SPEC) [flags]
label kubectl label (-f FILENAME TYPE NAME
annotate kubectl annotate (-f FILENAME TYPE NAME
api-resources kubectl api-resources [flags] [options] 打印支持的API資源★★★
api-versions kubectl api-versions [flags] 列出可用的API版本★★★
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件。有關詳細信息,請參見各個子命令
plugin kubectl plugin [flags] [options] 提供與插件交互的實用工具
version kubectl version [–client] [flags] 顯示在客戶端和服務器上運行的Kubernetes版本★★★

2.kubectl語法中的TYPE資源

下表包含常用的資源類型及其縮寫別名的列表。
Resource Name Short Names Namespaced Resource Kind
bindings TRUE Binding
componentstatuses cs FALSE ComponentStatus
configmaps cm TRUE ConfigMap
endpoints ep TRUE Endpoints
events ev TRUE Event
limitranges limits TRUE LimitRange
namespaces ns FALSE Namespace
nodes no FALSE Node
persistentvolumeclaims pvc TRUE PersistentVolumeClaim
persistentvolumes pv FALSE PersistentVolume
pods po TRUE Pod
podtemplates TRUE PodTemplate
replicationcontrollers rc TRUE ReplicationController
resourcequotas quota TRUE ResourceQuota
secrets TRUE Secret
serviceaccounts sa TRUE ServiceAccount
services svc TRUE Service
mutatingwebhookconfigurations FALSE MutatingWebhookConfiguration
validatingwebhookconfigurations FALSE ValidatingWebhookConfiguration
customresourcedefinitions crd, crds FALSE CustomResourceDefinition
apiservices FALSE APIService
controllerrevisions TRUE ControllerRevision
daemonsets ds TRUE DaemonSet
deployments deploy TRUE Deployment
replicasets rs TRUE ReplicaSet
statefulsets sts TRUE StatefulSet
tokenreviews FALSE TokenReview
localsubjectaccessreviews TRUE LocalSubjectAccessReview
selfsubjectaccessreviews FALSE SelfSubjectAccessReview
selfsubjectrulesreviews FALSE SelfSubjectRulesReview
subjectaccessreviews FALSE SubjectAccessReview
horizontalpodautoscalers hpa TRUE HorizontalPodAutoscaler
cronjobs cj TRUE CronJob
jobs TRUE Job
certificatesigningrequests csr FALSE CertificateSigningRequest
leases TRUE Lease
endpointslices TRUE EndpointSlice
events ev TRUE Event
ingresses ing TRUE Ingress
networkpolicies netpol TRUE NetworkPolicy
runtimeclasses FALSE RuntimeClass
poddisruptionbudgets pdb TRUE PodDisruptionBudget
podsecuritypolicies psp FALSE PodSecurityPolicy
clusterrolebindings FALSE ClusterRoleBinding
clusterroles FALSE ClusterRole
rolebindings TRUE RoleBinding
roles TRUE Role
priorityclasses pc FALSE PriorityClass
csidrivers FALSE CSIDriver
csinodes FALSE CSINode
storageclasses sc FALSE StorageClass
volumeattachments FALSE VolumeAttachment

3.kubectl 子命令使用分類

#1.基礎命令

#2.部署和集群管理命令

#3.故障和調試命令

#4.其他命令

七、kubectl輸出選項

1.概述

所有kubectl命令的默認輸出格式是人類可讀的純文本格式。

要將詳細信息以特定的格式輸出到終端窗口,可以將 -o 或 --output標識添加到受支持的kubectl命令中。

2.語法

kubectl [command] [TYPE] [NAME] -o <output_format>

根據kubectl操作,支持以下輸出格式:
Output format Description
-o custom-columns= 使用逗號分隔的自定義列列表打印表
-o custom-columns-file= 使用文件中的自定義列模板打印表
-o json 輸出一個JSON格式的API對象
-o jsonpath= 打印jsonpath表達式中定義的字段
-o jsonpath-file= 通過文件打印jsonpath表達式定義的字段
-o name 只打印資源名,不打印其他任何內容
-o wide 以純文本格式輸出,包含附加信息。對於pods,包含節點名
-o yaml 輸出一個YAML格式的API對象

3.示例

#1.wide示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master-001 ~]# kubectl  get  pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE           NOMINATED NODE   READINESS GATES
nginx-f89759699-sd6bq   1/1     Running   1          5d    10.241.184.2   k8s-node-002   <none>           <none>

#2.yaml示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master-001 ~]# kubectl  get  pod -o yaml
apiVersion: v1
items:
- apiVersion: v1
  kind: Pod
  metadata:
    creationTimestamp: "2021-09-22T10:22:13Z"
    generateName: nginx-f89759699-
    labels:
      app: nginx
      pod-template-hash: f89759699
    managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
………………

#3.json示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master ~]# kubectl get pod -o json
{
    "apiVersion": "v1",
    "items": [
        {[root@k8s-master-001 ~]# kubectl get pod -o json
{
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "v1",
            "kind": "Pod",
            "metadata": {
                "creationTimestamp": "2021-09-22T10:22:13Z",
                "generateName": "nginx-f89759699-",
                "labels": {
                    "app": "nginx",
………………

#4.name示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master-001 ~]# kubectl get pod -o name
pod/nginx-f89759699-sd6bq

#5.custom-columns示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master-001 ~]# kubectl get pods -o custom-columns=NAME:.metadata.name,UID:.metadata.uid,imageName:.spec.containers[0].image
NAME                    UID                                    imageName
nginx-f89759699-sd6bq   069dc771-65f2-47d4-9ff9-866297a69f06   nginx

說明:custom-columns=key:value;其中key表示列明;value表示要顯示信息,這個value信息可以通過-o json或-o yaml獲取。

#6.custom-columns-file示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d
# 要顯示的列明和數據來源
[root@k8s-master-001 ~]# cat custom-col.conf 
NAME          UID          imageName                containerPort
metadata.name metadata.uid spec.containers[0].image spec.containers[0].ports[0].containerPort

[root@k8s-master-001 ~]# kubectl get pod -o custom-columns-file=custom-col.conf
NAME         		UID                                    imageName                                                     containerPort
nginx-f89759699-sd6bq   069dc771-65f2-47d4-9ff9-866297a69f06  registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17   80

#7.jsonpath示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

[root@k8s-master-001 ~]# kubectl get pods -o jsonpath='{.items[0].metadata.name},{.items[0].spec.containers[0].image}'
nginx-f89759699-sd6bq,nginx

#8.jsonpath-file示例
[root@k8s-master-001 ~]# kubectl  get  pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-sd6bq   1/1     Running   1          5d

# 要顯示的數據來源
[root@k8s-master-001 ~]# cat custom-json.conf
{.items[0].metadata.name},{.items[0].spec.containers[0].image},{.items[0].spec.containers[0].ports[0].containerPort}
 
[root@k8s-master-001 ~]# kubectl get pod -o jsonpath-file=custom-json.conf
nginx-f89759699-sd6bq,registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17,80


免責聲明!

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



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