差異處

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

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:kubectl [2020/12/22 12:29] jonathantech:kubectl [2023/02/04 16:47] (目前版本) jonathan
行 1: 行 1:
 +====== Kubectl 語法整理 ======
 +
 +===== 指定特別 kubeconf 檔方式 =====
 +  * Exp. kubeconf 檔案存放在 /iiidevops/kube-config/config
 +  * <cli>kubectl --kubeconfig /iiidevops/kube-config/config get pod</cli>
 +
 +===== 檢查 K8s Cluster 的健康狀態 =====
 +  * 參考 - https://stackoverflow.com/questions/54882727/kubectl-using-command-to-get-cluster-status
 +  * <cli>kubectl get componentstatus</cli>結果類似以下訊息:<cli>
 +$ kubectl get componentstatus
 +NAME                 STATUS    MESSAGE             ERROR
 +controller-manager   Healthy   ok
 +scheduler            Healthy   ok
 +etcd-0               Healthy   {"health":"true"}
 +</cli>
 +
 +===== 讀取 K8s Cluster Name 的方式 =====
 +  * 參考 - https://stackoverflow.com/questions/38242062/how-to-get-kubernetes-cluster-name-from-k8s-api
 +  * 方法1 <cli>kubectl config current-context</cli>結果:<cli>
 +rkeuser@devops2:~$ kubectl config current-context
 +iiidevops-k8s
 +</cli>
 +  * 方法2 <cli>kubectl config view</cli>結果:<cli>
 +rkeuser@devops2:~$ kubectl config view
 +apiVersion: v1
 +clusters:
 +- cluster:
 +    certificate-authority-data: DATA+OMITTED
 +    server: https://172.16.0.172:6443
 +  name: iiidevops-k8s
 +contexts:
 +- context:
 +    cluster: iiidevops-k8s
 +    user: kube-admin-iiidevops-k8s
 +  name: iiidevops-k8s
 +current-context: iiidevops-k8s
 +kind: Config
 +preferences: {}
 +users:
 +- name: kube-admin-iiidevops-k8s
 +  user:
 +    client-certificate-data: REDACTED
 +    client-key-data: REDACTED
 +</cli>
 +
 +===== 顯示 K8s 內的 POD 清單 =====
 +  * <cli>kubectl get pod</cli> Exp.<cli>
 +localadmin@iiidevops-73:~$ kubectl get pod
 +NAME                                  READY   STATUS    RESTARTS   AGE
 +devopsapi-dbbcf7fd4-j5nv2             1/    Running            36m
 +devopsdb-5555449b8d-rd2z9             1/    Running            37m
 +devopsui-84496c7fcc-bd99r             1/    Running            126m
 +redmine-547cbdbbbb-wk9s6              1/1     Running            17h
 +redmine-postgresql-6fb9475c6c-gs9gh   1/    Running            17h
 +sonarqube-server-6ccbf4c54f-vksmp     1/    Running            17h
 +</cli>
 +  * 加上 -n 參數 指定所要查詢的 namespace 內 pod 清單 <cli>kubectl get pod -n kube-system</cli> Exp.<cli>
 +$ kubectl get pod -n kube-system
 +NAME                                      READY   STATUS      RESTARTS   AGE
 +calico-kube-controllers-c955d588c-kcm7r   1/    Running              36h
 +calico-node-sghsm                         1/    Running              36h
 +:
 +rke-metrics-addon-deploy-job-dhjbl        0/1     Completed            36h
 +rke-network-plugin-deploy-job-6vzqh       0/    Completed            36h
 +</cli>
 +
 +  * 加上 -A 參數可呈現所有 namespace 的 pod 清單 <cli>kubectl get pod -A</cli> Exp.<cli>
 +localadmin@iiidevops-hv-2:~$ kubectl get pod -A
 +NAMESPACE          NAME                                       READY   STATUS      RESTARTS   AGE
 +cattle-pipeline    registry-proxy-96bbj                       1/    Running              40m
 +cattle-system      cattle-cluster-agent-7d569b986c-57485      1/1     Running              145m
 +:
 +kube-system        rke-metrics-addon-deploy-job-tb2sn         0/    Completed            146m
 +kube-system        rke-network-plugin-deploy-job-pcgss        0/1     Completed            146m
 +p-8kvwh-pipeline   docker-registry-57fbddc6cc-ch9cw           1/    Running              40m
 +p-8kvwh-pipeline   jenkins-f4d6b89cb-h8554                    1/1     Running              40m
 +p-8kvwh-pipeline   minio-5ccb99b5c7-kp9lc                     1/    Running              40m
 +</cli>
 +
 +===== 顯示 K8s 內 POD 的 logs =====
 +  * <cli>kubectl logs [pod NAME]</cli> Exp. <cli>
 +localadmin@iiidevops-73:~$ kubectl logs redmine-547cbdbbbb-wk9s6 | tail -20
 +I, [2020-12-21T10:47:03.089762 #1]  INFO -- :   Rendered enumerations/_form.html.erb (2.8ms)
 +I, [2020-12-21T10:47:03.090267 #1]  INFO -- :   Rendered enumerations/new.html.erb within layouts/admin (4.2ms)
 +I, [2020-12-21T10:47:03.095432 #1]  INFO -- :   Rendered admin/_menu.html.erb (4.9ms)
 +I, [2020-12-21T10:47:03.095745 #1]  INFO -- :   Rendering layouts/base.html.erb
 +I, [2020-12-21T10:47:03.107140 #1]  INFO -- :   Rendered layouts/base.html.erb (11.3ms)
 +I, [2020-12-21T10:47:03.107464 #1]  INFO -- : Completed 200 OK in 32ms (Views: 19.9ms | ActiveRecord: 5.8ms)
 +I, [2020-12-21T10:47:05.101236 #1]  INFO -- : Started POST "/enumerations" for 10.20.0.74 at 2020-12-21 10:47:05 +0000
 +I, [2020-12-21T10:47:05.102407 #1]  INFO -- : Processing by EnumerationsController#create as HTML
 +I, [2020-12-21T10:47:05.102487 #1]  INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"wRaItdciacpkIjcxxxxxxxxxxrdQWdKf66WuZPq6AGAIQyK9BLeuyOlyKODKQedaCNdAoADOadTy+3UH4mTeg==", "enumeration"=>{"type"=>"IssuePriority", "name"=>"Low", "active"=>"1", "is_default"=>"0"}, "commit"=>"Create"}
 +I, [2020-12-21T10:47:05.112128 #1]  INFO -- :   Current user: admin (id=1)
 +I, [2020-12-21T10:47:05.192218 #1]  INFO -- : Redirected to http://10.20.0.74:32748/enumerations
 +I, [2020-12-21T10:47:05.192469 #1]  INFO -- : Completed 302 Found in 90ms (ActiveRecord: 17.5ms)
 +10.20.0.74 - - [21/Dec/2020:10:47:05 UTC] "POST /enumerations HTTP/1.1" 302 102
 +http://10.20.0.74:32748/enumerations/new?type=IssuePriority -> /enumerations
 +10.20.0.74 - - [21/Dec/2020:10:47:05 UTC] "GET /enumerations HTTP/1.1" 200 8526
 +http://10.20.0.74:32748/enumerations/new?type=IssuePriority -> /enumerations
 +10.20.0.74 - - [22/Dec/2020:02:21:47 UTC] "GET /users/current.json HTTP/1.1" 200 253
 +- -> /users/current.json
 +10.20.0.74 - - [22/Dec/2020:02:21:47 UTC] "GET /users.json?offset=0&limit=25&key=d64c31axxxxxxxxxxd085fc5825ec257b31a3ec7 HTTP/1.1" 200 230
 +- -> /users.json?offset=0&limit=25&key=d64c31aff3xxxxxxxxxx5fc5825ec257b31a3ec7
 +
 +</cli>
 +
 +===== 顯示 K8s 內 POD 的描述資訊 =====
 +  * <cli>kubectl describe pod [pod NAME]</cli> Exp. <cli>
 +localadmin@iiidevops-71:~/deploy-devops$ kubectl describe pod devopsapi-cdccbcb48-qv4n9
 +Name:         devopsapi-cdccbcb48-qv4n9
 +Namespace:    default
 +Priority:     0
 +Node:         iiidevops-72/10.20.0.72
 +Start Time:   Thu, 24 Dec 2020 06:27:37 +0000
 +Labels:       app=devopsapi
 +              pod-template-hash=cdccbcb48
 +:
 +:
 +  Normal   Pulling         15s (x2 over 38s)  kubelet            Pulling image "iiiorg/devops-api:develop"
 +  Warning  Failed          11s (x2 over 34s)  kubelet            Failed to pull image "iiiorg/devops-api:develop": rpc error: code = Unknown desc = Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
 +  Warning  Failed          11s (x2 over 34s)  kubelet            Error: ErrImagePull
 +</cli>
 +===== 進入一個 POD 內操作 =====
 +  * <cli>kubectl exec -it [POD Name] -- bash</cli> Exp.<cli>
 +localadmin@iiidevops-hv-2:~$ kubectl exec -it devopsapi-74c78bb4c8-77phj -- bash
 +root@devopsapi-74c78bb4c8-77phj:/usr/src/app# ls -lt
 +total 76
 +drwxr-xr-x 1 root root  4096 Jan 23 08:18 apis
 +drwxrwxrwx 2 root root  4096 Jan 23 08:18 logs
 +-rw-r--r-- 1 root root    41 Jan 22 22:15 git_commit
 +-rwxr-xr-x 1 root root   435 Jan 22 22:15 Dockerfile
 +-rwxr-xr-x 1 root root 11357 Jan 22 22:15 LICENSE
 +-rwxr-xr-x 1 root root   878 Jan 22 22:15 README.md
 +-rwxr-xr-x 1 root root  1994 Jan 22 22:15 _alembic.ini
 +:
 +:
 +-rwxr-xr-x 1 root root  3133 Jan 22 22:15 k8s_config
 +root@devopsapi-c9ddc8cdf-mrb9f:/usr/src/app#
 +</cli>
 +  * 如果要進入不同 namespace 的 pod 操作就需要加上 --namespace="xxx" 的參數 Exp.<cli>
 +localadmin@iiidevops-hv-2:~$ kubectl exec -it --namespace="p-8kvwh-pipeline" minio-5ccb99b5c7-kp9lc  -- traceroute 172.17.13.183
 +traceroute to 172.17.13.183 (172.17.13.183), 30 hops max, 46 byte packets
 +  172-17-13-183.kubernetes.default.svc.cluster.local (172.17.13.183)  0.007 ms  0.009 ms  0.007 ms
 +</cli>
 +
 +===== 顯示 K8s 內的 deploy 清單 =====
 +  * <cli>kubctl get deploy</cli> Exp.<cli>
 +localadmin@iiidevops-73:~$ kubectl get deploy
 +NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
 +devopsapi            1/1                1           17h
 +devopsdb             1/               1           37m
 +devopsui             1/               1           17h
 +redmine              1/1                1           17h
 +redmine-postgresql   1/               1           17h
 +sonarqube-server     1/               1           17h
 +</cli>
 +
 +===== 移除 K8s 內的 deploy pod =====
 +  * <cli>kubctl delete deploy [deploy NAME]</cli> Exp.<cli>
 +localadmin@iiidevops-73:~$ kubectl delete deploy devopsui devopsdb devopsapi
 +deployment.apps "devopsui" deleted
 +deployment.apps "devopsdb" deleted
 +deployment.apps "devopsapi" deleted
 +</cli>
 +
 +===== 顯示 K8s 內的 namespace 清單 =====
 +  * <cli>kubctl get namespace </cli> Exp.<cli>
 +iiidevops@iiidevops1:~$ kubectl get namespace
 +NAME                   STATUS   AGE
 +account                Active   49d
 +cattle-pipeline        Active   6d22h
 +cattle-system          Active   50d
 +default                Active   50d
 +iii-devops-toolchain   Active   6d22h
 +ingress-nginx          Active   50d
 +kube-node-lease        Active   50d
 +kube-public            Active   50d
 +kube-system            Active   50d
 +p-pdx2d-pipeline       Active   6d22h
 +security-scan          Active   50d
 +</cli>
 +
 +===== 移除 K8s 內的 namespace deploy pod =====
 +  * <cli>kubctl delete namespace [namespace NAME]</cli> Exp.<cli>
 +iiidevops@iiidevops1:~$ kubectl delete namespace iii-devops-toolchain
 +namespace "iii-devops-toolchain" deleted
 +</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>++
 +
 +
 +
 +{{tag>k8s iiidevops kubectl}}