差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:kubectl [2021/04/28 18:57] jonathantech:kubectl [2025/12/06 11:57] (目前版本) – [檢查 K8s Cluster 的健康狀態] jonathan
行 6: 行 6:
  
 ===== 檢查 K8s Cluster 的健康狀態 ===== ===== 檢查 K8s Cluster 的健康狀態 =====
-  * 參考 - https://stackoverflow.com/questions/54882727/kubectl-using-command-to-get-cluster-status +  * 檢查 API server<cli> 
-  * <cli>kubectl get componentstatus</cli>結果類似以下訊息:<cli> +kubectl get --raw='/healthz?verbose'
-kubectl get componentstatus +
-NAME                 STATUS    MESSAGE             ERROR +
-controller-manager   Healthy   ok +
-scheduler            Healthy   ok +
-etcd-0               Healthy   {"health":"true"}+
 </cli> </cli>
 +    * ++看實際執行結果|<cli>
 +jonathan@k3s-master-171:~$ kubectl get --raw='/healthz?verbose'
 +[+]ping ok
 +[+]log ok
 +[+]etcd ok
 +[+]poststarthook/start-apiserver-admission-initializer ok
 +[+]poststarthook/generic-apiserver-start-informers ok
 +[+]poststarthook/priority-and-fairness-config-consumer ok
 +[+]poststarthook/priority-and-fairness-filter ok
 +[+]poststarthook/storage-object-count-tracker-hook ok
 +[+]poststarthook/start-apiextensions-informers ok
 +[+]poststarthook/start-apiextensions-controllers ok
 +[+]poststarthook/crd-informer-synced ok
 +[+]poststarthook/start-system-namespaces-controller ok
 +[+]poststarthook/start-cluster-authentication-info-controller ok
 +[+]poststarthook/start-kube-apiserver-identity-lease-controller ok
 +[+]poststarthook/start-kube-apiserver-identity-lease-garbage-collector ok
 +[+]poststarthook/start-legacy-token-tracking-controller ok
 +[+]poststarthook/start-service-ip-repair-controllers ok
 +[+]poststarthook/rbac/bootstrap-roles ok
 +[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
 +[+]poststarthook/priority-and-fairness-config-producer ok
 +[+]poststarthook/bootstrap-controller ok
 +[+]poststarthook/start-kubernetes-service-cidr-controller ok
 +[+]poststarthook/aggregator-reload-proxy-client-cert ok
 +[+]poststarthook/start-kube-aggregator-informers ok
 +[+]poststarthook/apiservice-status-local-available-controller ok
 +[+]poststarthook/apiservice-status-remote-available-controller ok
 +[+]poststarthook/apiservice-registration-controller ok
 +[+]poststarthook/apiservice-discovery-controller ok
 +[+]poststarthook/kube-apiserver-autoregistration ok
 +[+]autoregister-completion ok
 +[+]poststarthook/apiservice-openapi-controller ok
 +[+]poststarthook/apiservice-openapiv3-controller ok
 +healthz check passed
 +</cli>++
 +  * 檢查 etcd<cli>
 +kubectl get --raw='/healthz/etcd'
 +</cli>
 +    * ++看實際執行結果|<cli>
 +jonathan@k3s-master-171:~$ kubectl get --raw='/healthz/etcd'
 +ok
 +</cli>++
 +  * 檢查 kube-system <cli>
 +kubectl get pods -n kube-system
 +</cli>
 +    * ++看實際執行結果|<cli>
 +jonathan@k3s-master-171:~$ kubectl get pods -n kube-system
 +NAME                                      READY   STATUS    RESTARTS       AGE
 +coredns-64fd4b4794-28wrz                  1/1     Running   1 (5d1h ago)   11d
 +local-path-provisioner-774c6665dc-t8g2l   1/    Running   1 (5d1h ago)   11d
 +metrics-server-7bfffcd44-5mkbj            1/1     Running   2 (5d1h ago)   11d
 +</cli>++
  
 ===== 讀取 K8s Cluster Name 的方式 ===== ===== 讀取 K8s Cluster Name 的方式 =====
行 144: 行 192:
  
 ===== 顯示 K8s 內的 deploy 清單 ===== ===== 顯示 K8s 內的 deploy 清單 =====
-  * <cli>kubctl get deploy</cli> Exp.<cli>+  * <cli>kubectl get deploy</cli> Exp.<cli>
 localadmin@iiidevops-73:~$ kubectl get deploy localadmin@iiidevops-73:~$ kubectl get deploy
 NAME                 READY   UP-TO-DATE   AVAILABLE   AGE NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
行 164: 行 212:
  
 ===== 顯示 K8s 內的 namespace 清單 ===== ===== 顯示 K8s 內的 namespace 清單 =====
-  * <cli>kubctl get namespace </cli> Exp.<cli>+  * <cli>kubectl get namespace </cli> Exp.<cli>
 iiidevops@iiidevops1:~$ kubectl get namespace iiidevops@iiidevops1:~$ kubectl get namespace
 NAME                   STATUS   AGE NAME                   STATUS   AGE
行 185: 行 233:
 namespace "iii-devops-toolchain" deleted namespace "iii-devops-toolchain" deleted
 </cli> </cli>
 +
 +===== 讀取 Secret 的內容 =====
 +  * <cli>kubectl get secret [secret_name]</cli> Exp.<cli>
 +rkeuser@dev4-86:~$ kubectl get secret
 +NAME                                    TYPE                                  DATA   AGE
 +default-token-pssx6                     kubernetes.io/service-account-token        21d
 +gitlab                                  Opaque                                1      21d
 +harbor                                  Opaque                                1      21d
 +harbor-harbor-clair                     Opaque                                3      21d
 +harbor-harbor-clair-internal-tls        kubernetes.io/tls                          21d
 +harbor-harbor-core                      Opaque                                8      21d
 +:
 +</cli>
 +  * 顯示 secret 的內容, 有定義那些 key<cli>kubectl describe secret [secret_name]</cli> Exp.<cli>
 +rkeuser@dev4-86:~$ kubectl describe secret harbor
 +Name:         harbor
 +Namespace:    default
 +Labels:       <none>
 +Annotations:  field.cattle.io/creatorId: user-jwvbx
 +              field.cattle.io/projectId: local:p-rhflt
 +              lifecycle.cattle.io/create.secretsController_local: true
 +              secret.user.cattle.io/secret: true
 +
 +Type:  Opaque
 +
 +Data
 +====
 +harbor-local:  25 bytes
 +</cli>
 +  * 顯示 secret key 的 value 編碼內容<cli>
 +kubectl get secrets/<secret_name> --template={{.data.<key>}}
 +</cli> Exp.<cli>
 +kubectl get secrets/harbor --template={{.data.harbor-local}}
 +</cli>
 +<WRAP center round tip 60%>
 +** 如果要直接解碼可使用 base64 -d 的方式處理** Exp. <cli>
 +kubectl get secrets/harbor --template={{.data.harbor-local}} | base64 -d
 +</cli>
 +</WRAP>
 +
 +===== 讀取 kubelet 內的 pod 目錄編號 =====
 +  * 實際 pod 的檔案存在 node 內的 /var/lib/kubelet/pods 內, 可透過以下語法獲知 pod 的目錄編號<cli>
 +kubectl get pods -A -o custom-columns=NodeName:.spec.nodeName,PodName:.metadata.name,PodUID:.metadata.uid
 +</cli>
 +    * ++看實際範例|<cli>
 +rkeuser@demo-77:~$ kubectl get pods -A -o custom-columns=NodeName:.spec.nodeName,PodName:.metadata.name,PodUID:.metadata.uid
 +NodeName     PodName                                                           PodUID
 +10.20.0.79   a1-master-db-dpy-79bc97bf96-xmqxw                                 34dad11c-7f38-44c1-b1b0-e06d760d2a7e
 +10.20.0.79   a1-master-db-gui-7cc89bcb59-vlhtz                                 9cc444c9-3986-4ba2-a535-9f44f6bb10cf
 +10.20.0.79   a1-master-sq-4-wkv2l                                              94dc6771-bea0-46bd-a0ec-0128e7c5c16d
 +10.20.0.78   apeg-python-flask-master-serv-dpy-86b655666-9ngdf                 0903dcd1-c1f5-4704-b8ba-7991d11e882d
 +10.20.0.78   aptgit-220209-master-db-dpy-5f7986d9c-wvv2c                       7209d08f-d0b8-428d-922c-87b3f6fe5787
 +10.20.0.77   aptgit-220209-master-db-gui-67bbbf77cb-h9qxh                      498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7
 +10.20.0.79   aptgit-220209-master-db-gui-67bbbf77cb-t79qf                      ba6e310c-a106-426e-910a-290e836c40a9
 +10.20.0.78   aptgit-220209-master-serv-dpy-5cf7cccd4d-66vns                    522553e2-3323-44cb-bb02-3995d625c033
 +10.20.0.77   aptgit-220209-master-serv-dpy-5cf7cccd4d-k2jl8                    f8a147db-3eee-4d40-b051-f6b00bc0a644
 +:
 +</cli> 直接看 aptgit-220209-master-db-gui-67bbbf77cb-h9qxh -> 498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7 這個 POD 的檔案<cli>
 +rkeuser@demo-77:~$ sudo ls -lRt /var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7:
 +total 16
 +-rw-r--r-- 1 root root  241 Jan  7 09:04 etc-hosts
 +drwxr-x--- 3 root root 4096 Jun 25  2022 containers
 +drwxr-x--- 3 root root 4096 Jun 25  2022 plugins
 +drwxr-x--- 3 root root 4096 Jun 25  2022 volumes
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/containers:
 +total 4
 +drwxr-x--- 2 root root 4096 Jan  7 09:04 mariadb-gui
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/containers/mariadb-gui:
 +total 0
 +-rw-rw-rw- 1 root root 0 Jan  7 09:04 832a851d
 +-rw-rw-rw- 1 root root 0 Nov 19 09:26 d65ebd13
 +-rw-rw-rw- 1 root root 0 Oct 15 06:39 d516d827
 +-rw-rw-rw- 1 root root 0 Oct 14 19:16 ea72f4fc
 +-rw-rw-rw- 1 root root 0 Sep 17 11:11 94285167
 +-rw-rw-rw- 1 root root 0 Aug 28 18:14 edc19f39
 +-rw-rw-rw- 1 root root 0 Jul 30  2022 cbf94e15
 +-rw-rw-rw- 1 root root 0 Jul 14  2022 f3f9f859
 +-rw-rw-rw- 1 root root 0 Jun 25  2022 46143b63
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/plugins:
 +total 4
 +drwxr-x--- 2 root root 4096 Jan 30 07:48 kubernetes.io~empty-dir
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/plugins/kubernetes.io~empty-dir:
 +total 0
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/volumes:
 +total 4
 +drwxr-xr-x 2 root root 4096 Jan 30 07:48 kubernetes.io~secret
 +
 +/var/lib/kubelet/pods/498451f9-fa3a-4fa6-bd2c-dd1ae1d9a3b7/volumes/kubernetes.io~secret:
 +total 0
 +rkeuser@demo-77:~$
 +</cli>++
 +
 +===== 刪除 PVC 後一直在 Terminating 狀態  =====
 +  * 查看卡住的 PVC<cli>
 +kubectl get pvc -n <namespace> | grep Terminating
 +</cli>
 +  * 移除 finalizer 強制刪除<cli>
 +kubectl patch pvc <pvc-name> -n <namespace> -p '{"metadata":{"finalizers":null}}'
 +</cli>
 +  * ++看實際處理訊息|<cli>
 +jonathan@k3s-master-171:~$ kubectl get pvc -n librenms | grep Terminating
 +librenms-frontend-data               Terminating   pvc-9e11ad7e-82c5-419f-8b34-df4d185256aa   1Gi        RWO            local-path     <unset>                 125m
 +jonathan@k3s-master-171:~$ kubectl patch pvc librenms-frontend-data -n librenms -p '{"metadata":{"finalizers":null}}'
 +persistentvolumeclaim/librenms-frontend-data patched
 +</cli>++
  
 {{tag>k8s iiidevops kubectl}} {{tag>k8s iiidevops kubectl}}
  
  • tech/kubectl.1619607423.txt.gz
  • 上一次變更: 2021/04/28 18:57
  • jonathan