config kubectl_kubectl常用命令归档及pod诊断工具安装
kubectl常用命令歸檔:
1 - k8s運行的服務是 kubectl,一般這個服務要設置默認開機啟動
[root@k8s-master ~]# systemctl enable kubelet.service2 - 查看命令幫助
[root@k8s-master ~]# kubectl -h3 - 查看更詳細pod內容
[root@k8s-master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-ds-ct2lx 1/1 Running 0 24h 10.244.2.2 k8s-node2 <none> <none> nginx-ds-gpslg 1/1 Running 0 24h 10.244.1.2 k8s-node <none> <none>4 - 查看單個Pod的當前狀態
[root@k8s-master ~]# kubectl describe pod nginx-ds-ct2lx Name: nginx-ds-ct2lx Namespace: default Priority: 0 Node: k8s-node2/10.0.0.220 Start Time: Thu, 28 May 2020 15:33:34 +0800 Labels: app=nginx-dscontroller-revision-hash=65d4b5cd6bpod-template-generation=1 Annotations: <none> Status: Running IP: 10.244.2.2 IPs:IP: 10.244.2.2 Controlled By: DaemonSet/nginx-ds Containers:my-nginx:Container ID: docker://6f22f3ed661ef1d05ab3609e09843c0c6e253e06528ae4a817fa71156eb0be80Image: nginx:1.7.9Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451Port: 80/TCPHost Port: 0/TCPState: RunningStarted: Thu, 28 May 2020 15:35:03 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-gf85d (ro) Conditions:Type StatusInitialized True Ready False ContainersReady True PodScheduled True Volumes:default-token-gf85d:Type: Secret (a volume populated by a Secret)SecretName: default-token-gf85dOptional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/disk-pressure:NoSchedulenode.kubernetes.io/memory-pressure:NoSchedulenode.kubernetes.io/not-ready:NoExecutenode.kubernetes.io/pid-pressure:NoSchedulenode.kubernetes.io/unreachable:NoExecutenode.kubernetes.io/unschedulable:NoSchedule Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled <unknown> default-scheduler Successfully assigned default/nginx-ds-ct2lx to k8s-node2Normal Pulling 24h kubelet, k8s-node2 Pulling image "nginx:1.7.9"Normal Pulled 24h kubelet, k8s-node2 Successfully pulled image "nginx:1.7.9"Normal Created 24h kubelet, k8s-node2 Created container my-nginxNormal Started 24h kubelet, k8s-node2 Started container my-nginx5 - 查看命名空間下所有pod的狀態
[root@k8s-master ~]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-55ltm 1/1 Running 2 28h coredns-7ff77c879f-99twh 1/1 Running 2 28h etcd-k8s-master 1/1 Running 6 28h kube-apiserver-k8s-master 1/1 Running 5 28h kube-controller-manager-k8s-master 1/1 Running 5 28h kube-flannel-ds-amd64-hzssh 1/1 Running 2 25h kube-flannel-ds-amd64-jlgq8 1/1 Running 2 25h kube-flannel-ds-amd64-n7kbj 1/1 Running 2 25h kube-proxy-2tk6m 1/1 Running 0 25h kube-proxy-b546c 1/1 Running 6 28h kube-proxy-jv45b 1/1 Running 0 25h kube-scheduler-k8s-master 1/1 Running 5 28h6 - 查看某個命名空間下的pod當前狀態(查看kube-scheduler-k8s-master)
[root@k8s-master ~]# kubectl describe pod kube-scheduler-k8s-master -n kube-system Name: kube-scheduler-k8s-master Namespace: kube-system Priority: 2000000000 Priority Class Name: system-cluster-critical Node: k8s-master/10.0.0.200 Start Time: Fri, 29 May 2020 15:54:35 +0800 Labels: component=kube-schedulertier=control-plane Annotations: kubernetes.io/config.hash: 2c04fc5e4761bd2ada4d5c31bd4317adkubernetes.io/config.mirror: 2c04fc5e4761bd2ada4d5c31bd4317adkubernetes.io/config.seen: 2020-05-28T12:06:12.513422254+08:00kubernetes.io/config.source: file Status: Running IP: 10.0.0.200 IPs:IP: 10.0.0.200 Controlled By: Node/k8s-master Containers:kube-scheduler:Container ID: docker://33fe41e50133b7446d4e30d214c03fef8205788ec23d3b7793bb945db0cedf09Image: registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.1Image ID: docker-pullable://registry.aliyuncs.com/google_containers/kube-scheduler@sha256:28e3b5320504fd20622e6860459f128289a3d4d8d17ac9dfb4408ca171e9e4bcPort: <none>Host Port: <none>Command:kube-scheduler--authentication-kubeconfig=/etc/kubernetes/scheduler.conf--authorization-kubeconfig=/etc/kubernetes/scheduler.conf--bind-address=127.0.0.1--kubeconfig=/etc/kubernetes/scheduler.conf--leader-elect=trueState: RunningStarted: Fri, 29 May 2020 15:54:39 +0800Last State: TerminatedReason: ErrorExit Code: 2Started: Thu, 28 May 2020 18:23:55 +0800Finished: Thu, 28 May 2020 18:35:29 +0800Ready: TrueRestart Count: 5Requests:cpu: 100mLiveness: http-get https://127.0.0.1:10259/healthz delay=15s timeout=15s period=10s #success=1 #failure=8Environment: <none>Mounts:/etc/kubernetes/scheduler.conf from kubeconfig (ro) Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True Volumes:kubeconfig:Type: HostPath (bare host directory volume)Path: /etc/kubernetes/scheduler.confHostPathType: FileOrCreate QoS Class: Burstable Node-Selectors: <none> Tolerations: :NoExecute Events:Type Reason Age From Message---- ------ ---- ---- -------Normal SandboxChanged 21h kubelet, k8s-master Pod sandbox changed, it will be killed and re-created.Normal Pulled 21h kubelet, k8s-master Container image "registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.1" already present on machineNormal Created 21h kubelet, k8s-master Created container kube-schedulerNormal Started 21h kubelet, k8s-master Started container kube-schedulerNormal SandboxChanged 15m kubelet, k8s-master Pod sandbox changed, it will be killed and re-created.Normal Pulled 15m kubelet, k8s-master Container image "registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.1" already present on machineNormal Created 15m kubelet, k8s-master Created container kube-schedulerNormal Started 15m kubelet, k8s-master Started container kube-scheduler7 - 進入到這個pod的容器內部(進kube-scheduler-k8s-master)
[root@k8s-master ~]# kubectl -n kube-system exec -it kube-scheduler-k8s-master sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead. # ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr #8 - 將單個 pod 的詳細信息輸出為 YAML 格式的對象
[root@k8s-master ~]# kubectl get pod nginx-ds-ct2lx -o yaml9 - 通過使用 --sort-by 參數指定任何數字或字符串字段來對對象進行排序
[root@k8s-master ~]# kubectl get pods --sort-by=.metadata.name NAME READY STATUS RESTARTS AGE nginx-ds-ct2lx 1/1 Running 0 25h nginx-ds-gpslg 1/1 Running 0 25h10 - 使用 example-service.yaml 中的定義創建服務
[root@k8s-master ~]# kubectl apply -f example-service.yaml11 - 使用 example-controller.yaml 中的定義創建 replication controller
[root@k8s-master ~]# kubectl apply -f example-controller.yaml12 - kubectl get - 列出一個或多個資源
## 以純文本輸出格式列出所有 pod。 [root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-ds-ct2lx 1/1 Running 0 25h nginx-ds-gpslg 1/1 Running 0 25h## 以純文本輸出格式列出所有 pod,并包含附加信息(如節點名)。 [root@k8s-master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-ds-ct2lx 1/1 Running 0 25h 10.244.2.2 k8s-node2 <none> <none> nginx-ds-gpslg 1/1 Running 0 25h 10.244.1.2 k8s-node <none> <none>## 以純文本輸出格式列出所有副本控制器和服務。 [root@k8s-master ~]# kubectl get rc,services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 28h service/nginx-ds NodePort 10.1.163.141 <none> 80:30164/TCP 25h## 列出在節點 k8s-node 上運行的所有 pod [root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k8s-node NAME READY STATUS RESTARTS AGE nginx-ds-gpslg 1/1 Running 0 25h13 - kubectl describe - 顯示一個或多個資源的詳細狀態,默認情況下包括未初始化的資源
## 顯示名稱為 k8s-node的節點的詳細信息。 [root@k8s-master ~]# kubectl describe nodes k8s-node## 顯示名為 nginx-ds-gpslg 的 pod 的詳細信息。 [root@k8s-master ~]# kubectl describe pods/nginx-ds-gpslg Name: nginx-ds-gpslg Namespace: default Priority: 0 Node: k8s-node/10.0.0.210 Start Time: Thu, 28 May 2020 15:33:34 +0800 Labels: app=nginx-dscontroller-revision-hash=65d4b5cd6bpod-template-generation=1 Annotations: <none> Status: Running IP: 10.244.1.2 IPs:IP: 10.244.1.2 # …………………………………………………………………………14 - kubectl get 命令
kubectl get 命令通常用于檢索同一資源類型的一個或多個資源。 它具有豐富的參數,允許您使用 -o 或 --output 參數自定義輸出格式。 您可以指定 -w 或 --watch 參數以開始觀察特定對象的更新。 kubectl describe 命令更側重于描述指定資源的許多相關方面。 它可以調用對 API 服務器 的多個 API 調用來為用戶構建視圖。 例如,該 kubectl describe node 命令不僅檢索有關節點的信息,還檢索在其上運行的 pod 的摘要,為節點生成的事件等。15 - kubectl delete - 從文件、stdin 或指定標簽選擇器、名稱、資源選擇器或資源中刪除資源
## 使用 pod.yaml 文件中指定的類型和名稱刪除 pod。 [root@k8s-master ~]# kubectl delete -f pod.yaml## 刪除標簽名= <label-name> 的所有 pod 和服務。 [root@k8s-master ~]# kubectl delete pods,services -l name=<label-name>## 刪除所有具有標簽名稱= <label-name> 的 pod 和服務,包括未初始化的那些。 [root@k8s-master ~]# kubectl delete pods,services -l name=<label-name> --include-uninitialized## 刪除所有 pod,包括未初始化的 pod [root@k8s-master ~]# kubectl delete pods --all16 - kubectl exec - 對 pod 中的容器執行命令
## 從 pod <pod-name> 中獲取運行 'date' 的輸出。默認情況下,輸出來自第一個容器。 [root@k8s-master ~]# kubectl exec <pod-name> date## 運行輸出 'date' 獲取在容器的 <container-name> 中 pod <pod-name> 的輸出。 [root@k8s-master ~]# kubectl exec <pod-name> -c <container-name> date## 獲取一個交互 TTY 并運行 /bin/bash <pod-name >。默認情況下,輸出來自第一個容器。 [root@k8s-master ~]# kubectl exec -ti <pod-name> /bin/bash官方的kubectl參考:
Kubectl Reference Docs?kubernetes.io二、 安裝調試工具利器 kubectl-debug(Pod故障診斷)
kubectl-debug 是一個簡單的 kubectl 插件, 能夠幫助你便捷地進行 Kubernetes 上的 Pod 排障診斷. 背后做的事情很簡單: 在運行中的 Pod 上額外起一個新容器, 并將新容器加入到目標容器的 pid, network, user 以及 ipc namespace 中, 這時我們就可以在新容器中直接用 netstat, tcpdump 這些熟悉的工具來解決問題了, 而舊容器可以保持最小化, 不需要預裝任何額外的排障工具。
kubectl-debug 包含兩部分, 一部分是用戶側的 kubectl 插件, 另一部分是部署在所有 k8s 節點上的 agent(用于啟動"新容器", 同時也作為 SPDY 連接的中繼). 在 agentless 中, kubectl-debug 會在 debug 開始時創建 debug-agent Pod, 并在結束后自動清理.(默認開啟agentless模式)
步驟分別是:
+ 插件查詢 ApiServer:demo-pod 是否存在,所在節點是什么
+ ApiServer 返回 demo-pod 所在所在節點
+ 插件請求在目標節點上創建 Debug Agent Pod
+ Kubelet 創建 Debug Agent Pod
+ 插件發現 Debug Agent 已經 Ready,發起 debug 請求(長連接)
+ Debug Agent 收到 debug 請求,創建 Debug 容器并加入目標容器的各個 Namespace 中,創建完成后,與 Debug 容器的 tty 建立連接
+ 接下來,客戶端就可以開始通過 5,6 這兩個連接開始 debug 操作。操作結束后,Debug Agent 清理 Debug 容器,插件清理 Debug Agent,一次 Debug 完成。
安裝
1 -下載安裝 kubectl debug 插件
[root@k8s-master ~]# tar -zxvf kubectl-debug.tar.gz LICENSE README.md kubectl-debug [root@k8s-master ~]# ls abc.cfg flannel-v12.tar kubectl-debug.tar.gz LICENSE README.md anaconda-ks.cfg kubectl-debug kube-flannel.yml nginx-ds.yml recommended.yaml[root@k8s-master ~]# mv kubectl-debug /usr/local/bin/2 - 安裝 debug-agent DaemonSet
[root@k8s-master ~]# kubectl apply -f > https://raw.githubusercontent.com/aylei/kubectl-debug/master/scripts/agent_daemonset.yml daemonset.apps/debug-agent created你來了,守護心靈的救世主?mp.weixin.qq.com總結
以上是生活随笔為你收集整理的config kubectl_kubectl常用命令归档及pod诊断工具安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为啥优酷CIBN酷喵影视不能投屏了
- 下一篇: delphi if多个条件_屡试不爽!使