---
# System prepended metadata

title: '[指令] kubectl get'
tags: [k8s, kubectl get, kubectl, K8s / commands, Kubernetes]

---

[指令] kubectl get
===
###### tags: `K8s / commands`
###### tags: `Kubernetes`, `k8s`, `kubectl`, `kubectl get`

<br>

[TOC]

<br>

## `kubectl get --raw`
### **step-by-step 範例**
- ### Step1: `/apis`
    ```
    $ kubectl get --raw '/apis' | jq
    ...
        {
          "name": "slinky.slurm.net",
          "versions": [
            {
              "groupVersion": "slinky.slurm.net/v1beta1",
              "version": "v1beta1"
            }
          ],
          "preferredVersion": {
            "groupVersion": "slinky.slurm.net/v1beta1",
            "version": "v1beta1"
          }
        },
    ...
    ```
- ### Step2: `/apis/<api-group>`
    ```
    $ kubectl get --raw '/apis/slinky.slurm.net' | jq
    {
      "kind": "APIGroup",
      "apiVersion": "v1",
      "name": "slinky.slurm.net",
      "versions": [
        {
          "groupVersion": "slinky.slurm.net/v1beta1",
          "version": "v1beta1"
        }
      ],
      "preferredVersion": {
        "groupVersion": "slinky.slurm.net/v1beta1",
        "version": "v1beta1"
      }
    }
    ```
- ### Step3: `/apis/<api-group>/<api-version>`
    ```
    $ kubectl get --raw '/apis/slinky.slurm.net/v1beta1' | jq
    {
      "kind": "APIResourceList",
      "apiVersion": "v1",
      "groupVersion": "slinky.slurm.net/v1beta1",
      "resources": [
      ...
        {
          "name": "nodesets/scale",
          "singularName": "",
          "namespaced": true,
          "group": "autoscaling",
          "version": "v1",
          "kind": "Scale",
          "verbs": [
            "get",
            "patch",
            "update"
          ]
        },
      ...
      ]
    }
    ```
- ### Step4: `/apis/<api-group>/<api-version>/namespaces/<namespace>/<resource-plural>/<resource-name>`
    ```
    $ kubectl get --raw '/apis/slinky.slurm.net/v1beta1/namespaces/slurm/nodesets/slurm-worker-gpu1080' | jq
    ```
- ### Step5: `/apis/<api-group>/<api-version>/namespaces/<namespace>/<resource-plural>/<resource-name>/<subresource-name>`
    ```
    kubectl get --raw "/apis/slinky.slurm.net/v1beta1/namespaces/slurm/nodesets/slurm-worker-gpu1080/scale" | jq
    {
      "kind": "Scale",
      "apiVersion": "autoscaling/v1",
      "metadata": {
        "name": "slurm-worker-gpu1080",
        "namespace": "slurm",
        "uid": "83e0e85e-8758-4157-b0c5-de928faead60",
        "resourceVersion": "25964227",
        "creationTimestamp": "2025-11-21T10:31:39Z"
      },
      "spec": {},
      "status": {
        "replicas": 0,
        "selector": "app.kubernetes.io/instance=slurm-worker-gpu1080,app.kubernetes.io/name=slurmd"
      }
    }
    ```

<br>

---

<br>

## `kubectl get -f <file-name>`
### 範例：`pvc.yaml` 包含 pvc & pv，要如何只撈出 pv ?
```bash
pv_names=$(kubectl get -f "pvc.yaml" \
  -o jsonpath='{.items[?(@.kind=="PersistentVolume")].metadata.name}' 2>/dev/null || true)
```
- ### 說明
    > by gpt-5.2 (2025/12/22)
    
    **從 `pvc.yaml` 這個檔案裡（或該檔案套用到叢集後的資源）把所有 `kind: PersistentVolume` 的名稱抓出來，存到變數 `pv_names`**，而且就算抓不到也不要讓腳本失敗。

    ### 逐段拆開看：

    * `kubectl get -f "pvc.yaml"`
      讀取 `pvc.yaml` 內定義的 K8s 資源（可能包含 PV/PVC/StorageClass…）。如果這些資源已存在叢集，`kubectl get` 會回傳它們的狀態；若不存在，會報錯。

    * `-o jsonpath='{.items[?(@.kind=="PersistentVolume")].metadata.name}'`
      用 JSONPath 從回傳結果的 `.items[]` 內 **篩選 `kind == "PersistentVolume"`** 的項目，取它們的 `.metadata.name`。
      → 結果通常是一串 PV 名稱（以空白分隔），例如：`pv-a pv-b pv-c`

    * `2>/dev/null`
      把錯誤輸出丟掉（例如檔案內沒有資源、資源不存在、RBAC 沒權限等），避免腳本噴錯訊息。

    * `|| true`
      就算 `kubectl get` 失敗，整個指令也回傳成功（exit code 0），讓腳本可以繼續跑。

    ### 常見用法情境：

    * 後面要對抓到的 PV 做清理或檢查，例如：

      * `kubectl delete pv $pv_names`
      * `kubectl patch pv ...`
      * 針對 reclaim policy / finalizer 做處理

    ### 小提醒：

    * 如果 `pvc.yaml` 其實只有 PVC（沒有 PV），那 `pv_names` 會是空的。
    * 很多時候 PV 不會寫在同一個 YAML（尤其是動態供應的情況），這時用這段抓不到 PV 是正常的。


<br>

---

<br>

## `kubectl get pod`
> 查詢 pod (帶有 prefix=`pod/`)
```
$ kubectl get pod --show-kind
```
- **輸出清單時，帶有 prefix `pod/`**
    - **沒有 `--show-kind` 參數**
        ```
        $ kubectl get pod
        NAME                           READY   STATUS    RESTARTS   AGE
        hello-world-57959d477f-cbgpz   1/1     Running   0          3d17h
        ```
    - **有 `--show-kind` 參數**
        ```
        $ kubectl get pod --show-kind
        NAME                               READY   STATUS    RESTARTS   AGE
        pod/hello-world-57959d477f-cbgpz   1/1     Running   0          3d17h
        ```

<br>

## `kubectl get crd` 
> 查詢每個客製化資源(CRD)的版本

`$ kubectl get crd -o=custom-columns='NAME:.metadata.name,STORED_VERSION:.status.storedVersions,SERVED_VERSIONS:.spec.versions[*].name'`

<br>

## `kubectl get events` 
```
kubectl get events --sort-by='.lastTimestamp'
```

<br>

## `kubectl get apiservice` 
```
$ kubectl get apiservice -l app.kubernetes.io/instance=keda

NAME                                   SERVICE                                AVAILABLE   AGE
v1.                                    Local                                  True        124d
v1.acme.cert-manager.io                Local                                  True        123d
v1.admissionregistration.k8s.io        Local                                  True        124d
v1.apiextensions.k8s.io                Local                                  True        124d
v1.apps                                Local                                  True        124d
v1.authentication.k8s.io               Local                                  True        124d
v1.authorization.k8s.io                Local                                  True        124d
v1.autoscaling                         Local                                  True        124d
v1.batch                               Local                                  True        124d
v1.cert-manager.io                     Local                                  True        123d
v1.certificates.k8s.io                 Local                                  True        124d
v1.coordination.k8s.io                 Local                                  True        124d
v1.discovery.k8s.io                    Local                                  True        124d
v1.events.k8s.io                       Local                                  True        124d
v1.flowcontrol.apiserver.k8s.io        Local                                  True        124d
v1.monitoring.coreos.com               Local                                  True        123d
v1.networking.k8s.io                   Local                                  True        124d
v1.node.k8s.io                         Local                                  True        124d
v1.nvidia.com                          Local                                  True        124d
v1.policy                              Local                                  True        124d
v1.rbac.authorization.k8s.io           Local                                  True        124d
v1.scheduling.k8s.io                   Local                                  True        124d
v1.storage.k8s.io                      Local                                  True        124d
v1alpha1.eventing.keda.sh              Local                                  True        116d
v1alpha1.k8s.mariadb.com               Local                                  True        17d
v1alpha1.keda.sh                       Local                                  True        116d
v1alpha1.monitoring.coreos.com         Local                                  True        123d
v1alpha1.nfd.k8s-sigs.io               Local                                  True        124d
v1alpha1.nvidia.com                    Local                                  True        124d
v1beta1.external.metrics.k8s.io        keda/keda-operator-metrics-apiserver   True        116d
v1beta1.slinky.slurm.net               Local                                  True        2d23h
v1beta3.flowcontrol.apiserver.k8s.io   Local                                  True        124d
v2.autoscaling                         Local                                  True        124d
```

<br>

{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}