K8S

vi /etc/kubernets

部署第一個(gè)應(yīng)用程序 中,我們使用了 kubectl 命令行界面部署了 nginx 并且查看了 Deployment 和 Pod。kubectl 還有如下四個(gè)常用命令,在我們排查問題時(shí)可以提供幫助:

kubectl get - 顯示資源列表


# kubectl get 資源類型

#獲取類型為Deployment的資源列表

kubectl get deployments     

 #獲取類型為Pod的資源列表

kubectl get pods       

#獲取類型為Node的資源列表

kubectl get nodes

名稱空間

在命令后增加 -A 或 --all-namespaces 可查看所有 名稱空間中 的對(duì)象,使用參數(shù) -n 可查看指定名稱空間的對(duì)象,例如


# 查看所有名稱空間的 

Deploymentkubectl get deployments -A

kubectl get deployments --all-namespaces

# 查看 kube-system 名稱空間的 

Deploymentkubectl get deployments -n kube-system

并非所有對(duì)象都在名稱空間里

kubectl describe - 顯示有關(guān)資源的詳細(xì)信息


# kubectl describe 資源類型 資源名稱

#查看名稱為nginx-XXXXXX的Pod的信息

kubectl describe pod nginx-XXXXXX

#查看名稱為nginx的Deployment的信息

kubectl describe deployment nginx

**kubectl logs** - 查看pod中的容器的打印日志(和命令docker logs 類似)

# kubectl logs Pod名稱

#查看名稱為nginx-pod-XXXXXXX的Pod內(nèi)的容器打印的日志

本案例中的 nginx-pod 沒有輸出日志,所以您看到的結(jié)果是空的


kubectl logs -f nginx-pod-XXXXXXX

**kubectl exec** - 在pod中的容器環(huán)境內(nèi)執(zhí)行命令(和命令docker exec 類似)

kubectl exec Pod名稱 操作命令# 在名稱為nginx-pod-xxxxxx的Pod中運(yùn)行bash


kubectl exec -it nginx-pod-xxxxxx /bin/bash

kubectl -n kube-system get po

kubectl -n kube-system get po -o wide

kubectl get node

journalctl -fu docker

journalctl -fu kubectl

kubectl get nodes

kubectl get pods

kubectl api-resources

docker logs -f <ID>

###查看namespace

kubectl get ns

###創(chuàng)建namespace

kubectl create ns nie

###配置好yaml,通過“one-pod.yaml”創(chuàng)建pod

kubectl create -f one-pod.yaml

在執(zhí)行請(qǐng)求時(shí)設(shè)定namespace

執(zhí)行 kubectl 命令時(shí),可以使用 --namespace 參數(shù)指定名稱空間,例如:

kubectl run nginx --image=nginx --namespace=<您的名稱空間>
kubectl get pods --namespace=<您的名稱空間>

設(shè)置名稱空間偏好

可以通過 set-context 命令改變當(dāng)前的名稱空間,后續(xù)所有命令都默認(rèn)在此名稱空間下執(zhí)行。

kubectl config set-context --current --namespace=<您的名稱空間>
# 驗(yàn)證結(jié)果
kubectl config view --minify | grep namespace:

并非所有對(duì)象都在名稱空間里

大部分的 Kubernetes 對(duì)象(例如,Pod、Service、Deployment、StatefulSet等)都必須在名稱空間里。但是某些更低層級(jí)的對(duì)象,是不在任何名稱空間中的,例如 [nodes]、[storageClass] 等

執(zhí)行一下命令可查看哪些 Kubernetes 對(duì)象在名稱空間里,哪些不在:

# 在名稱空間里
kubectl api-resources --namespaced=true

# 不在名稱空間里
kubectl api-resources --namespaced=false

查看名稱空間
查看集群中的名稱空間列表:

kubectl get namespaces

輸出結(jié)果如下所示:

NAME          STATUS    AGE
default       Active    11d
kube-system   Active    11d
kube-public   Active    11d

Kubernetes 安裝成功后,默認(rèn)有初始化了三個(gè)名稱空間:

default 默認(rèn)名稱空間,如果 Kubernetes 對(duì)象中不定義 metadata.namespace 字段,該對(duì)象將放在此名稱空間下
kube-system Kubernetes系統(tǒng)創(chuàng)建的對(duì)象放在此名稱空間下
kube-public 此名稱空間自動(dòng)在安裝集群是自動(dòng)創(chuàng)建,并且所有用戶都是可以讀取的(即使是那些未登錄的用戶)。主要是為集群預(yù)留的,例如,某些情況下,某些Kubernetes對(duì)象應(yīng)該被所有集群用戶看到。
查看名稱空間的概要信息:

kubectl describe namespaces <name>

輸出結(jié)果如下所示:

Name:           default
Labels:         <none>
Annotations:    <none>
Status:         Active

No resource quota.

Resource Limits
 Type       Resource    Min Max Default
 ----               --------    --- --- ---
 Container          cpu         -   -   100m

創(chuàng)建名稱空間

使用 kubectl 有兩種方式可以創(chuàng)建名稱空間
1.通過 yaml 文件,創(chuàng)建文件 my-namespace.yaml 內(nèi)容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: <名稱空間的名字>

執(zhí)行命令

```
kubectl create -f ./my-namespace.yaml

```

2.直接使用命令創(chuàng)建名稱空間:

```
kubectl create namespace <名稱空間的名字>

```

在 Kuboard 中創(chuàng)建名稱空間,請(qǐng)參考 [名稱空間管理]

刪除名稱空間

執(zhí)行如下命令可刪除名稱空間:

kubectl delete namespaces <名稱空間的名字>

WARNING

該操作將刪除名稱空間中的所有內(nèi)容

此刪除操作是異步的,您可能會(huì)觀察到名稱空間停留會(huì)在 Terminating 狀態(tài)停留一段時(shí)間。

使用名稱空間切分集群)使用名稱空間切分集群

理解-default-名稱空間)理解 default 名稱空間

默認(rèn)情況下,安裝Kubernetes集群時(shí),會(huì)初始化一個(gè) default 名稱空間,用來將承載那些未指定名稱空間的 Pod、Service、Deployment等對(duì)象

創(chuàng)建新的名稱空間)創(chuàng)建新的名稱空間

在此練習(xí)中,我們將創(chuàng)建兩個(gè) Kubernetes 名稱空間。

假設(shè)企業(yè)使用同一個(gè)集群作為開發(fā)環(huán)境和生產(chǎn)環(huán)境(注意:通常開發(fā)環(huán)境和生產(chǎn)環(huán)境是物理隔絕的):

  • 開發(fā)團(tuán)隊(duì)期望有一個(gè)集群中的空間,以便他們可以查看查看和使用他們創(chuàng)建的 Pod、Service、Deployment等。在此空間中,Kubernetes對(duì)象被創(chuàng)建又被刪除,為了適應(yīng)敏捷開發(fā)的過程,團(tuán)隊(duì)中的許多人都可以在此空間內(nèi)做他們想做的事情。
  • 運(yùn)維團(tuán)隊(duì)也期望有一個(gè)集群中的空間,在這里,將有嚴(yán)格的流程控制誰可以操作 Pod、Service、Deployment等對(duì)象,因?yàn)檫@些對(duì)象都直接服務(wù)于生產(chǎn)環(huán)境。

此時(shí),該企業(yè)可以將一個(gè)Kubernetes集群切分成兩個(gè)名稱空間:developmentproduction。創(chuàng)建名稱空間的 yaml 文件如下所示:

apiVersion: v1
kind: Namespace
metadata:
  name: development
  labels:
    name: development

執(zhí)行命令以創(chuàng)建 development 名稱空間:

kubectl create -f https://kuboard.cn/statics/learning/namespace/dev.yaml

執(zhí)行命令以創(chuàng)建 production 名稱空間:

kubectl create -f https://kuboard.cn/statics/learning/namespace/prod.yaml

執(zhí)行命令查看已創(chuàng)建的名稱空間

kubectl get namespaces --show-labels

輸出結(jié)果如下所示

NAME          STATUS    AGE       LABELS
default       Active    32m       <none>
development   Active    29s       name=development
production    Active    23s       name=production

在每個(gè)名稱空間中創(chuàng)建-pod)在每個(gè)名稱空間中創(chuàng)建 Pod

Kubernetes名稱空間為集群中的 Pod、Service、Deployment 提供了一個(gè)作用域??梢韵薅ㄊ褂媚硞€(gè)名稱空間的用戶不能看到另外一個(gè)名稱空間中的內(nèi)容。我們可以在 development 名稱空間中創(chuàng)建一個(gè)簡單的 Deployment 和 Pod 來演示這個(gè)特性。

  • 首先,執(zhí)行命令以檢查當(dāng)前的 [kubectl切換當(dāng)前訪問的集群)

    kubectl config view
    
    

    輸出結(jié)果如下所示:

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: REDACTED
        server: https://130.211.122.180
      name: lithe-cocoa-92103_kubernetes
    contexts:
    - context:
        cluster: lithe-cocoa-92103_kubernetes
        user: lithe-cocoa-92103_kubernetes
      name: lithe-cocoa-92103_kubernetes
    current-context: lithe-cocoa-92103_kubernetes
    kind: Config
    preferences: {}
    users:
    - name: lithe-cocoa-92103_kubernetes
      user:
        client-certificate-data: REDACTED
        client-key-data: REDACTED
        token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
    - name: lithe-cocoa-92103_kubernetes-basic-auth
      user:
        password: h5M0FtUUIflBSdI7
        username: admin
    
    

    執(zhí)行命令

    kubectl config current-context
    
    

    輸出結(jié)果如下所示

    lithe-cocoa-92103_kubernetes
    
    
  • 接下來,為 kubectl 定義一個(gè)上下文,以便在不同的名稱空間中工作。clusteruser 字段的取值從前面的 current context 復(fù)制過來:

    kubectl config set-context dev --namespace=development --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes
    kubectl config set-context prod --namespace=production --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes
    
    

    上面的命令創(chuàng)建了兩個(gè) kubectl 的上下文,使得您可以在兩個(gè)不同的名稱空間中工作:

  • 切換到 development 名稱空間:

    kubectl config use-context dev
    
    

    驗(yàn)證

    kubectl config current-context
    dev
    
    

    此時(shí),通過 kubectl 向 Kubernetes 集群發(fā)出的所有指令都限定在名稱空間 development

    創(chuàng)建一個(gè) nginx

    kubectl run snowflake --image=nginx:1.7.9 --replicas=2
    
    

    剛剛創(chuàng)建的 Deployment 副本數(shù)為 2,運(yùn)行了一個(gè) nginx 容器。

    kubectl get deployment
    
    

    輸出結(jié)果如下

    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    snowflake   2         2         2            2           2m
    
    

    執(zhí)行命令

    kubectl get pods -l run=snowflake
    
    

    輸出結(jié)果如下

    NAME                         READY     STATUS    RESTARTS   AGE
    snowflake-3968820950-9dgr8   1/1       Running   0          2m
    snowflake-3968820950-vgc4n   1/1       Running   0          2m
    
    

    此時(shí),開發(fā)人員可以做任何他想要做的操作,所有操作都限定在名稱空間 development 里,而無需擔(dān)心影響到 production 名稱空間中的內(nèi)容。

  • 切換到 production 名稱空間:

    kubectl config use-context prod
    
    

    production 名稱空間應(yīng)該是空的,下面兩個(gè)命令將返回的結(jié)果都應(yīng)該為空:

    kubectl get deployment
    kubectl get pods
    
    

    此時(shí),我們?cè)?production 名稱空間運(yùn)行另一個(gè) deployment:

    kubectl run cattle --image=nginx:1.7.9 --replicas=5
    kubectl get deployment
    
    

    輸出結(jié)果如下所示:

    NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    cattle    5         5         5            5           10s
    
    

    執(zhí)行命令

    kubectl get pods -l run=cattle
    
    

    輸出結(jié)果如下所示:

    NAME                      READY     STATUS    RESTARTS   AGE
    cattle-2263376956-41xy6   1/1       Running   0          34s
    cattle-2263376956-kw466   1/1       Running   0          34s
    cattle-2263376956-n4v97   1/1       Running   0          34s
    cattle-2263376956-p5p3i   1/1       Running   0          34s
    cattle-2263376956-sxpth   1/1       Running   0          34s
    
    

    至此,我們可以了解到,用戶在一個(gè)名稱空間創(chuàng)建的內(nèi)容對(duì)于另外一個(gè)名稱空間來說是不可見的。

    也可以為不同的名稱空間定義不同的訪問權(quán)限控制。敬請(qǐng)期待后續(xù)更新。

標(biāo)簽的 value 必須:

  • 不能多于 63 個(gè)字符
  • 可以為空字符串
  • 如果不為空,則
    • 必須由字母、數(shù)字開始和結(jié)尾
    • 可以包含字母、數(shù)字、減號(hào)-、下劃線_、小數(shù)點(diǎn).

例如,下面的例子中的Pod包含兩個(gè)標(biāo)簽 environment: productionapp:nginx

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

標(biāo)簽選擇器)標(biāo)簽選擇器

與 [name 和 UID]不同,標(biāo)簽不一定是唯一的。通常來講,會(huì)有多個(gè)Kubernetes對(duì)象包含相同的標(biāo)簽。通過使用標(biāo)簽選擇器(label selector),用戶/客戶端可以選擇一組對(duì)象。標(biāo)簽選擇器(label selector)是 Kubernetes 中最主要的分類和篩選手段。
Kubernetes api server支持兩種形式的標(biāo)簽選擇器,equality-based 基于等式的set-based 基于集合的。標(biāo)簽選擇器可以包含多個(gè)條件,并使用逗號(hào)分隔,此時(shí)只有滿足所有條件的 Kubernetes 對(duì)象才會(huì)被選中。
如果使用空的標(biāo)簽選擇器或者不指定選擇器,其含義由具體的 API 接口決定。

基于等式的選擇方式)基于等式的選擇方式

Equality- 或者 inequality-based 選擇器可以使用標(biāo)簽的名和值來執(zhí)行過濾選擇。只有匹配所有條件的對(duì)象才被選中(被選中的對(duì)象可以包含未指定的標(biāo)簽)。可以使用三種操作符 =、==、!=。前兩個(gè)操作符含義是一樣的,都代表相等,后一個(gè)操作符代表不相等。例如:

# 選擇了標(biāo)簽名為 `environment` 且 標(biāo)簽值為 `production` 的Kubernetes對(duì)象
environment = production
# 選擇了標(biāo)簽名為 `tier` 且標(biāo)簽值不等于 `frontend` 的對(duì)象,以及不包含標(biāo)簽 `tier` 的對(duì)象
tier != frontend

也可以使用逗號(hào)分隔的兩個(gè)等式 environment=production,tier!=frontend,此時(shí)將選中所有 environmentproductiontier 不為 frontend 的對(duì)象。
以 [Pod 的節(jié)點(diǎn)選擇器]節(jié)點(diǎn)選擇器-nodeselector) 為例,下面的 Pod 可以被調(diào)度到包含標(biāo)簽 accelerator=nvidia-tesla-p100 的節(jié)點(diǎn)上:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-test
spec:
  containers:
    - name: cuda-test
      image: "k8s.gcr.io/cuda-vector-add:v0.1"
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    accelerator: nvidia-tesla-p100

基于集合的選擇方式)基于集合的選擇方式

Set-based 標(biāo)簽選擇器可以根據(jù)標(biāo)簽名的一組值進(jìn)行篩選。支持的操作符有三種:in、notin、exists。例如:

# 選擇所有的包含 `environment` 標(biāo)簽且值為 `production` 或 `qa` 的對(duì)象
environment in (production, qa)
# 選擇所有的 `tier` 標(biāo)簽不為 `frontend` 和 `backend`的對(duì)象,或不含 `tier` 標(biāo)簽的對(duì)象
tier notin (frontend, backend)
# 選擇所有包含 `partition` 標(biāo)簽的對(duì)象
partition
# 選擇所有不包含 `partition` 標(biāo)簽的對(duì)象
!partition

可以組合多個(gè)選擇器,用 , 分隔,, 相當(dāng)于 AND 操作符。例如:

# 選擇包含 `partition` 標(biāo)簽(不檢查標(biāo)簽值)且 `environment` 不是 `qa` 的對(duì)象
partition,environment notin (qa)

基于集合的選擇方式是一個(gè)更寬泛的基于等式的選擇方式,例如,environment=production 等價(jià)于 environment in (production);environment!=production 等價(jià)于 environment notin (production)。
基于集合的選擇方式可以和基于等式的選擇方式可以混合使用,例如: partition in (customerA, customerB),environment!=qa

API

查詢條件

LIST 和 WATCH 操作時(shí),可指定標(biāo)簽選擇器作為查詢條件,以篩選指定的對(duì)象集合。兩種選擇方式都可以使用,但是要符合 URL 編碼,例如:

  • 基于等式的選擇方式: ?labelSelector=environment%3Dproduction,tier%3Dfrontend
  • 基于集合的選擇方式: ?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29

兩種選擇方式都可以在 kubectl 的 list 和 watch 命令中使用,例如:

  • 使用基于等式的選擇方式

    kubectl get pods -l environment=production,tier=frontend
    
    
  • 使用基于集合的選擇方式

    kubectl get pods -l 'environment in (production),tier in (frontend)'
    
    

#Kubernetes對(duì)象引用

某些 Kubernetes 對(duì)象中(例如,Service和Deployment),使用標(biāo)簽選擇器指定一組其他類型的 Kubernetes 對(duì)象(例如,Pod)

#Service

Service 中通過 spec.selector 字段來選擇一組 Pod,并將服務(wù)請(qǐng)求轉(zhuǎn)發(fā)到選中的 Pod 上。

在 yaml 或 json 文件中,標(biāo)簽選擇器用一個(gè) map 來定義,且支持基于等式的選擇方式,例如:

"selector": {
  "component" : "redis",
}

selector:
  component: redis

上面的例子中定義的標(biāo)簽選擇器等價(jià)于 component=rediscomponent in (redis)

#有些對(duì)象支持基于集合的選擇方式

Job、Deployment、ReplicaSetDaemonSet 同時(shí)支持基于等式的選擇方式和基于集合的選擇方式。例如:

selector:
  matchLabels:
    component: redis
  matchExpressions:
    - {key: tier, operator: In, values: [cache]}
    - {key: environment, operator: NotIn, values: [dev]}

matchLabels 是一個(gè) {key,value} 組成的 map。map 中的一個(gè) {key,value} 條目相當(dāng)于 matchExpressions 中的一個(gè)元素,其 key 為 map 的 key,operatorInvalues 數(shù)組則只包含 value 一個(gè)元素。matchExpression 等價(jià)于基于集合的選擇方式,支持的 operatorIn、NotInExistsDoesNotExist。當(dāng) operatorInNotIn 時(shí),values 數(shù)組不能為空。所有的選擇條件都以 AND 的形式合并計(jì)算,即所有的條件都滿足才可以算是匹配。

引用一組節(jié)點(diǎn)

可以通過標(biāo)簽選擇器將 Pod 調(diào)度到指定的節(jié)點(diǎn)上,請(qǐng)參考 [將容器組調(diào)度到指定的節(jié)點(diǎn)]

向Kubernetes對(duì)象添加注解
Kubernetes 對(duì)象的 metadata 字段可以添加自定義的標(biāo)簽(label)或者注解(annotation)。標(biāo)簽用來選擇對(duì)象或者用來查找符合指定條件的一組對(duì)象。與此相對(duì),注解不是用來標(biāo)記對(duì)象或者選擇對(duì)象的。metadata 中的注解可以很大,也可以很??;可以是結(jié)構(gòu)化的,也可以是非結(jié)構(gòu)化的;還可以包括標(biāo)簽中不允許出現(xiàn)的字符。

與標(biāo)簽相似,注解也是 key/value map,例如:

metadata:
  annotations:
    key1: value1
    key2: value2

類似于下面的信息可以記錄在注解中:

聲明式配置層用到的狀態(tài)信息。
Build、release、image信息,例如 timestamp、release ID、git branch、PR number、image hash、registry address
日志、監(jiān)控、分析、審計(jì)系統(tǒng)的參數(shù)
第三方工具所需要的信息,例如 name、version、build information、URL
輕量級(jí)的發(fā)布工具用到的信息,例如,config、checkpoint
負(fù)責(zé)人的聯(lián)系方式,例如,電話號(hào)碼、網(wǎng)址、電子信箱
用戶用來記錄備忘信息的說明,例如,對(duì)標(biāo)準(zhǔn)鏡像做了什么樣的修改、維護(hù)過程中有什么特殊信息需要記住
下面是一個(gè)來自于實(shí)際 Deployment 的注解:

metadata:
  annotations:
    deployment.kubernetes.io/revision: 7  # 由Deployment控制器添加,用于記錄當(dāng)前發(fā)布的修改次數(shù)
    k8s.eip.work/displayName: busybox   # Kuboard添加,Deployment顯示在Kuboard界面上的名字
    k8s.eip.work/ingress: false     # Kuboard添加,根據(jù)此參數(shù)顯示Deployment是否配置了Ingress
    k8s.eip.work/service: none      # Kuboard添加,根據(jù)此參數(shù)顯示Deployment是否配置了Service
除了使用注解,您也可以將這類信息存放在一個(gè)外部的數(shù)據(jù)庫,然而,在使用、分享這些信息的時(shí)候,可能會(huì)變得難以管理。

句法和字符集

注解是一組名值對(duì)。

注解的 key 有兩個(gè)部分:可選的前綴和標(biāo)簽名,通過 / 分隔。

注解名:
標(biāo)簽名部分是必須的
不能多于 63 個(gè)字符
必須由字母、數(shù)字開始和結(jié)尾
可以包含字母、數(shù)字、減號(hào)-、下劃線_、小數(shù)點(diǎn).
注解前綴:
注解前綴部分是可選的
如果指定,必須是一個(gè)DNS的子域名,例如:k8s.eip.work
不能多于 253 個(gè)字符
使用 / 和標(biāo)簽名分隔
如果省略注解前綴,則注解的 key 將被認(rèn)為是專屬于用戶的。Kubernetes的系統(tǒng)組件(例如,kube-scheduler、kube-controller-manager、kube-apiserver、kubectl 或其他第三方組件)向用戶的Kubernetes對(duì)象添加注解時(shí),必須指定一個(gè)前綴。

kubernetes.io/ 和 k8s.io/ 這兩個(gè)前綴是 Kubernetes 核心組件預(yù)留的。Kuboard 使用 k8s.eip.work 這個(gè)前綴。

下面的例子中,Pod包含一個(gè)注解 imageregistry: https://hub.docker.com/

apiVersion: v1
kind: Pod
metadata:
  name: annotations-demo
  annotations:
    imageregistry: "https://hub.docker.com/"
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

概述

字段選擇器(Field Selector)可以用來基于的一個(gè)或多個(gè)字段的取值來選取一組Kubernetes對(duì)象。下面有一些示例性的字段選擇器:

  • metadata.name=my-service
  • metadata.namespace!=default
  • status.phase=Pending

下面的 kubectl 命令選擇了所有字段 status.phase 的取值為 Running 的 Pod:

kubectl get pods --field-selector status.phase=Running

字段選擇器本質(zhì)上是一個(gè) filter。默認(rèn)情況下,沒有添加 selector/filter 時(shí),代表著指定資源類型的所有對(duì)象都被選中。下面?zhèn)€兩個(gè) kubectl 查詢時(shí)等價(jià)的:

kubectl get pods
kubectl get pods --field-selector ""

#支持的字段

不同的 Kubernetes 對(duì)象類型,可以用來查詢的字段不一樣。所有的對(duì)象類型都支持的兩個(gè)字段是 metadata.namemetadata.namespace。在字段選擇器中使用不支持的字段,將報(bào)錯(cuò)。例如:

kubectl get ingress --field-selector foo.bar=baz

輸出結(jié)果為:

Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"

支持的操作符

字段選擇器中可以使用的操作符有 ===、!==== 含義相同)。例如,下面的 kubectl 命令,查詢不在 default 名稱空間中的 Service:

kubectl get services  --all-namespaces --field-selector metadata.namespace!=default

多選擇器

可以指定多個(gè)字段選擇器,用逗號(hào) , 分隔。下面的 kubectl 命令查詢所有的 status.phase 不等于 Runningspec.restartPolicy 等于 Always 的 Pod:

kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always

多種對(duì)象類型

字段選擇器可以跨資源類型使用。下面的 kubectl 命令查詢所有的不在 default 名稱空間的 StatefulSet 和 Service:

kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容