---
# System prepended metadata

title: kubernetes Debug

---

# 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功能可能也有用到
