一? ?k8s debug 淺談
說明: 本文只是基于對'kubectl debug'淺顯認識總結的知識點,后續(xù)'實際使用'再補充案例
Kubernetes 官方出品調(diào)試工具上手指南(無需安裝,開箱即用)
debug-application
簡化 Pod 故障診斷: kubectl-debug 介紹
1.18 版本之前需要自己安裝kubectl debug? ? ?下載位置? ??debug_0.1.1_linux_amd64.tar.gz
①? 低版本安裝kubectl-debug工具
# linux x86_64
export PLUGIN_VERSION=0.1.1
mv debug_${PLUGIN_VERSION}_linux_amd64.tar.gz kubectl-debug.tar.gz
tar -zxvf kubectl-debug.tar.gz kubectl-debug
mv kubectl-debug /usr/local/bin/
機制: 關于為什么安裝kubectl-debug,但是卻可以使用'kubectl debug'命令參考'plugin的'機制
+++++++++++++ "推薦下面的方式,而不是plugin插件的方式" +++++++++++++
1、在 'v1.23 及以上'版本中,該功能'默認'開啟
2、針對 '1.23 以下'的 K8S 版本,需要通過'以下'方式,'手動'開啟
1) '控制面' 開啟 EphemeralContainers featureGate
2) 進入 'master' 節(jié)點,編輯 /etc/kubernetes/manifests/ 下的
kube-apiserver.yaml、kube-controller-manager.yaml、kube-scheduler.yaml
備注: 實際'操作'只修改kube-apiserver.yaml即可
3) 在 command 部分添加 - --feature-gates=EphemeralContainers=true
4) kubelet 服務開啟該功能
5) 在節(jié)點上'編輯' /var/lib/kubelet/kubeadm-flags.env
添加 --feature-gates=EphemeralContainers=true
或者設置KUBELET_EXTRA_ARGS="--feature-gates=EphemeralContainers=true"#
6) 重啟 kubelet:
systemctl restart kubelet
細節(jié): v1.18.4 '版本中' 必須使用 kubectl 'alpha' debug
?
?②? 臨時容器
1、 EphemeralContainer '臨時容器'
Debugging using a copy of the Pod
③? ?debug的背景
1、kubectl是 k8s 管理員的日常工具,當'調(diào)試'或'排查 pod'問題時
2、一般情況使用 'logs'、describe、exec '子命令'便可以找到'問題'原因
java 排錯? --> 鏡像如果沒有'提供相關'的工具,怎么排錯呢? --> 'gcc 日志'分析、jvm性能分析
補充: 容器所在節(jié)點'執(zhí)行nsenter',查看pod或容器 ps: 不一定有'worker節(jié)點的登陸權限'
?思考: 哪些場景'不滿足'驅(qū)使我們使用'kubectl debug'
--feature-gates="EphemeralContainers=true"
④? ?kubectl debug原理
kubectl debug 調(diào)試運行中的pod
1、內(nèi)置的 kubectl debug 命令其實很'簡單'
2、通過 '--target' 參數(shù)指定'Pod中的哪個容器',給'正在運行中的 Pod' 增加一個'臨時'容器
備注: 默認是'主'容器,'第一個',也即'業(yè)務容器'
補充:--image參數(shù)就是用于指定使用'哪個鏡像來debug',這個鏡像包含我們'常使用的工具'即可
3、'共享進程命名空間',容器文件系統(tǒng)通過 '/proc/$pid/root' 鏈接對 pod 中的'其他容器'可見
++++++++++++ "分割線" ++++++++++++
運行 debug 命令, 把'日志級別'設置為 10 ,查看創(chuàng)建 debug 容器的'過程':
kubectl run ephemeral-demo --image=pause:3.5 --restart=Never
kubectl -v=10 debug -it ephemeral --image=busybox:1.33.1 --target=temp_demo
GET 獲取 pod -> 'PATCH' 增加臨時容器 -> 'GET' 獲取臨時容器 -> 'POST' 進入臨時容器
kubeadm 安裝的集群如何啟動 kubectl debug 調(diào)試容器
1、當'debug'連接到Pod后,使用 'chroot /host' 突破 chroot,并完全'進入'主機
2、可以獲取到'節(jié)點完全的權限',查看到節(jié)點所有的文件,甚至'重啟節(jié)點'
二? ?如何啟動臨時容器
①? 在已經(jīng)運行k8s集群中開啟臨時容器
需求: 在kubeadm 安裝的'已經(jīng)運行'的 Kubernetes 集群中開啟'臨時容器'功能
1、/etc/kubernetes/manifests/kube-apiserver.yaml
添加 'EphemeralContainers=true' 開啟'臨時容器'功能,如下'所示'
- --feature-gates=DynamicKubeletConfig=true,EphemeralContainers=true
備注: 如果要開啟'多個特性'門控功能用 ',' 隔開
②? 集群初始化的時候開啟臨時容器功能
說明: 如果想在'初始化' Kubernetes 集群時'開啟'臨時容器功能,則修改 'kubeadm' 配置文件
# init.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.19.3
apiServer:
extraArgs:
feature-gates: EphemeralContainers=true
然后通過 'kubeadm init' 初始化 Kubernetes 集群:
kubeadm init --config init.yaml
③? 驗證
1、隨著集群的運行,我們需要'驗證其有效性'
2、最簡單方法是檢查 'Pod API',它現(xiàn)在應該包含'臨時容器'部分以及通常容器
kubectl explain pod.spec.ephemeralContainers
④? 容器進程共享?
share-process-namespace
ephemeral-containers
feature-gates文章來源:http://www.zghlxwxcb.cn/news/detail-758178.html
1、驗證 Pod 中是否允許'進程共享',那么可以運行:
kubectl get pod pod_name -o json | jq .spec.shareProcessNamespace --> 'true'
⑤??docker 逃逸方法匯總文章來源地址http://www.zghlxwxcb.cn/news/detail-758178.html
容器逃逸: 避免'忘記'密碼,'重啟'服務器? --> 弄一個備用'緊急的逃生'通路
引申:?鏡像是否做過'安全'掃描
到了這里,關于k8s debug 淺談的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!