# kubernetes Debug ## 有用的文檔 **k8s官方** https://kubernetes.io/docs/setup/production-environment/container-runtimes/ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ **docker官方文檔** https://docs.docker.com/engine/install/ubuntu/ **containerd github page 手動安裝CNI plugins部份(不確定有無影響)** https://github.com/containerd/containerd/blob/main/docs/getting-started.md#step-3-installing-cni-plugins ## 測試結果 ### Containerd部份 先弄出一個預設的containerd config ``` # containerd config default > /etc/containerd/config.toml ``` 改config > /etc/containerd/config.toml ``` [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true ``` ### Images部份 雖然不確定有沒有用 但先把會用到的Images全部pull下來本地 ``` sudo kubeadm config images pull ``` ### Flannel 官方Github版的apply ``` kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml ``` 搭配教學文的apply一起使用 #### 目前測下來教學文的也沒問題 ## Termianl打不開問題 ubuntu20.04的虛擬機裝好之後可能是語言系統的問題導致terminal無法開啟 https://hackmd.io/@om56OsAHTP6kPVpeCY8IXA/S1d3Bl8Ch ### flannel多網卡配置 https://huangzhongde.cn/istio/Chapter6/Chapter6-8.html 參考上方教學文 先拉一份flannel的官方yaml 然後設定iface參數為想要的網卡 #### 網卡設定 一張NAT 一張內部網路 NAT那張不要動它 內部網路那張 在虛擬機安裝好之後去網路設定 IP:10開頭的隨便設一個 Mask:看子網路需要多少個可用IP,自行設定 重新連上那個網路之後應該會顯示Connected **flannel.yaml的iface參數設定成這張的名字** kubectl init的時候加上```--apiserver-advertise-address=這張網卡的IP``` k8s節點工作ip也固定成這張網卡的IP 正常來說就沒問題了 > ok 我的是在一張網卡上給到兩張ip,然後k8s用固定的那個,另一個就專門接外網,不過一張卡上有兩個ip一直覺得怪怪的,晚點再開一台vm試看看你的方法👍 > 👍 > 有個想法,如果新增一個「僅限主機」網路,但不要開DHCP,網段一樣設定10開頭的,而且實體機的IP設定成那個網段裡面的某個IP,接著虛擬機的網卡選「僅限主機」,網路就選剛創的那個,剩下都和上面的操作一樣,設定完固定IP之後,看實體機和虛擬機之間能不能互相Ping通,如果能的話那會更好。 > 有想法的! 不過這樣感覺實體機的IP要固定? > 其實就相當於在實體機上面再開一個網路界面。 > 一台電腦上可以有很多網路界面,每個界面都可以設定一個IP。 > 大概是這種感覺 ![螢幕截圖_20240512_172912](https://hackmd.io/_uploads/B1PW3WAMC.png) > 喔喔喔我好像理解了!? 不過不確定host-only這樣設能不能從實體機戳去外網 > 實體機可以透過另一個界面去戳外網,但虛擬機在只有host-only網卡的情況下無法連外網,這就是為什麼還要留一張NAT > 因為我也不確定你現在的網路環境是怎麼樣:thinking_face:,但最理想的情況下橋接也行,前提是你的IP不會變,像手機開熱點分享的這種就不適合橋接 > 喔喔我以為是要全部塞到host-only那張卡上面,變成虛擬機那邊只開一張卡,那這樣確實IP不能動,感覺還是多弄一張NAT好些。這樣感覺host-only和內部網路差不多嗎 > 差在實體機戳不戳得到虛擬機而已,虛擬機在這兩種情況下都能互戳 > 原來是這樣! :smile: ### 固定k8s節點工作ip https://cloud-atlas.readthedocs.io/zh-cn/latest/kubernetes/administer/set_k8s_worker_internal_ip.html 沒固定的話kubectl exec可能會有問題 **所有節點都要固定** ### Ubuntu24.04的k8s支援 當工作節點好像沒問題 :thinking_face: 當Master還沒測試 但Docker確定已經有For Ubuntu24.04的儲存庫了 ### Ingress Alternative https://docs.nginx.com/nginx-gateway-fabric/ 酷酷的東西 Final Result ![螢幕截圖_20240512_163136](https://hackmd.io/_uploads/Sy5YCeRG0.png) ### pod 報錯 ``` apiVersion: v1 kind: Pod metadata: name: ubuntu-pod labels: app: test spec: tolerations: - key: "node-role.kubernetes.io/control-plane" effect: "NoSchedule" operator: "Exists" containers: - name: ubuntu image: ubuntu:20.04 args: ["bash", "-c", "for ((i = 0; ; i++)); do echo \"$i: $(date)\"; sleep 100; done"] ``` 永遠在Creating ``` NAME READY STATUS RESTARTS AGE ubuntu-pod 0/1 ContainerCreating 0 65m ubuntu-pod2 0/1 ContainerCreating 0 9m24s ubuntu-pod3 0/1 ContainerCreating 0 69s ``` > 應該是因為worker有被taint到,master工作分不下去,可以看一下這篇https://godleon.github.io/blog/Kubernetes/k8s-Taints-and-Tolerations/ > ```journalctl -xeu kubelet```看他說什麼4 ## pod yaml debug message ``` kubectl logs config-pod2 -c test-container ``` ### 集群重建之後nodes皆NotReady解決方之一 ``` sudo systemctl restart containerd ``` ### 嘗試apply kubeflow但失敗 ![螢幕截圖_20240622_175050](https://hackmd.io/_uploads/B1EklQEUR.png) > 會一直卡在這邊 > 參考 https://github.com/kubeflow/manifests 進行部屬 > 我重開兩台新的機器去試著裝也是同樣問題,不敢直接裝在之前的上面怕爛掉,https://cert-manager.io/docs/troubleshooting/webhook/ 研究看看這篇,不曉得甚麼問題 > by呆 > 更) 我試試看一個一個手動裝,直接全裝完全想不到解法 ___ ### kubeflow應該算裝成功(? :::info **Prerequisite**: * 一個集群(master\*1+woker\*1) * storageclass(隨便一個都行) * worker開超大的cpu+memory ___ https://github.com/DieWay0123/k8s-project/tree/main ::: kubeflow1.8.1: https://github.com/kubeflow/manifests/tree/v1.8.1 ``` #clone kubeflow manifest v1.8.1 git clone https://github.com/kubeflow/manifests.git -b v1.8.1 #接下來就照步驟裝 ``` ![image](https://hackmd.io/_uploads/HyuQasyvC.png) 這兩個會一直時不時CrashLoop有時候又可以正常running,但是看logs+describe還是不知道怎麼搞,就先放著不管 ___ 有一個問題是裝的過程可能會有記憶體/cpu資源不夠的問題,遇到2,3次差不多,最後worker那隻開到8核CPU+14GRAM才夠(估計光部屬就需要7核CPU+13GRAM) ![image](https://hackmd.io/_uploads/Byr75elwR.png) ![image](https://hackmd.io/_uploads/H1j7qxxwR.png) 所以真的跟資源不足有關係嗎? 我是在跑的時候有看到有些卡很久,就去describe看有看到insufficient memory/cpu 不過webhook那個問題我猜可能是他webhook的service也是用pod,只有master但是沒有toleration的話pod沒有工作就沒有辦法驗證 那個Default StorageClass的用處是什麼? 目前看到是在notebook開的時候可以選volume(用storageclass動態生成volume),不過pod裡面有看到mysql,pipeline或其他的kubeflow功能可能也有用到