前言
這個禮拜複習一下之前使用 k3d 練習 Kubernetes 的相關文章 - 將 Chatbot 丟入一台筆電中的 Kubernetes 叢集海 | k3d | Docker,但很莫名其妙的 k3d 壞掉,建立除了說 agents 找不到之外,建立到一半還會 rollback,以下如果看文的你有遇到類似的問題可以試試看。
TL;DR
- 刪除 k3d 的 Cluster
- NodePort 開啟的寫法更換
除蟲過程直接跳到 kind
許久沒用之後我索性想說跳巢使用另一個工具 kind,它是由 Kubernetes 所維護的開源測試工具,本想說好了順便學一下,順著 Quick Start 實作後,部署上去透過 k9s 來監控一下為什麼最基本的服務起來都一直在 pending 的狀態,進去看之後看到類似下面的訊息:
1
| 1 node(s) had taints that the pod didn
|
許久沒弄+第一次換過來都不知道是發生什麼事情(污染了什麼??),並且當中也看到 CrashLoopBackOff 的字眼,重複查了許多都是因為使用舊版導致的一些問題,這邊剛好想到會不會是 k3d 與 kind 之間卡了什麼東西互相影響
回歸 k3d 建立 Cluster 遇到錯誤
建立初期我還是照著官網範例下了 k3d cluster create nijiacluster --agents 1 -p 8000:30080@agent[0]
(官網不會騙我吧?),但還是出現類似以下的錯誤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ➜ k3d cluster create nijiacluster2 INFO[0000] Prep: Network INFO[0000] Created network 'k3d-nijiacluster2' INFO[0000] Created volume 'k3d-nijiacluster2-images' INFO[0000] Starting new tools node... INFO[0000] Starting Node 'k3d-nijiacluster2-tools' INFO[0001] Creating node 'k3d-nijiacluster2-server-0' INFO[0001] Creating node 'k3d-nijiacluster2-agent-0' INFO[0001] Creating LoadBalancer 'k3d-nijiacluster2-serverlb' INFO[0001] Using the k3d-tools node to gather environment information INFO[0001] Starting cluster 'nijiacluster2' INFO[0001] Starting servers... INFO[0001] Starting Node 'k3d-nijiacluster2-server-0' INFO[0001] Deleted k3d-nijiacluster2-tools INFO[0007] Starting agents... INFO[0007] Starting Node 'k3d-nijiacluster2-agent-0' WARNING: Error loading config file: /Users/nijia/.docker/config.json: open /Users/nijia/.docker/config.json: too many open files ERRO[0030] Failed Cluster Start: Failed to add one or more agents: Node k3d-nijiacluster2-agent-0 failed to get ready: Failed waiting for log message 'Successfully registered node' from node 'k3d-nijiacluster2-agent-0': failed to get container for node 'k3d-nijiacluster2-agent-0': Failed to list containers: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22app%3Dk3d%22%3Atrue%2C%22k3d.cluster.imageVolume%3Dk3d-nijiacluster2-images%22%3Atrue%2C%22k3d.cluster.network.external%3Dfalse%22%3Atrue%2C%22k3d.cluster.network.id%3Ded12e7fc4c6a417a407af54b2aa37659ef4c93ad480fbbe815b041fe9d042954%22%3Atrue%2C%22k3d.cluster.network.iprange%3D172.25.0.0%2F16%22%3Atrue%2C%22k3d.cluster.network%3Dk3d-nijiacluster2%22%3Atrue%2C%22k3d.cluster.token%3DDIoMcOupoUDPSYabJsVF%22%3Atrue%2C%22k3d.cluster.url%3Dhttps%3A%2F%2Fk3d-nijiacluster2-server-0%3A6443%22%3Atrue%2C%22k3d.cluster%3Dnijiacluster2%22%3Atrue%2C%22k3d.role%3Dagent%22%3Atrue%2C%22k3d.version%3Dv5.0.1%22%3Atrue%7D%2C%22name%22%3A%7B%22%5E%2F%3F%28k3d-%29%3Fk3d-nijiacluster2-agent-0%24%22%3Atrue%7D%7D&limit=0": dial unix /var/run/docker.sock: socket: too many open files ERRO[0030] Failed to create cluster >>> Rolling Back INFO[0030] Deleting cluster 'nijiacluster2' WARNING: Error loading config file: /Users/nijia/.docker/config.json: open /Users/nijia/.docker/config.json: too many open files ERRO[0030] Failed to get nodes for cluster 'nijiacluster2': docker failed to get containers with labels 'map[k3d.cluster:nijiacluster2]': failed to list containers: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22app%3Dk3d%22%3Atrue%2C%22k3d.cluster%3Dnijiacluster2%22%3Atrue%7D%7D&limit=0": dial unix /var/run/docker.sock: socket: too many open files ERRO[0030] failed to get cluster: No nodes found for given cluster FATA[0030] Cluster creation FAILED, also FAILED to rollback changes!
|
想起還有 k9s
透過 k9s 可以觀看在線上的 node, pod 在搞什麼鬼,近來看才發現有一個沒刪掉的 cluster 卡在這
可能我指令也不熟沒發現到這邊
上網找了一下可以使用 kubectl config delete-context
把沒刪掉的 cluster 砍了,因此就如下:
1 2
| ➜ kubectl config delete-context k3d-nijiacluster deleted context k3d-nijiacluster from /Users/nijia/.kube/config
|
砍掉之後再重新建立一次 cluster 就不會出現上面錯誤了
k3d - NodePort 建立不起來
上次輸入這個指令後是可以建立 NodePort 的 Cluster
1
| k3d cluster create nijiacluster --agents 1 -p '8000:30080@agent[0]'
|
官方文件目前也是這樣說 [2021/10/17]: https://k3d.io/usage/guides/exposing_services/#2-via-nodeport
想當然是建立失敗,出現以下訊息
1
| FATA[0000] failed to transform ports: Failed to parse node filters: invalid format or empty subset in 'agent[0]'
|
接著透過 --help
來找一下到底哪邊輸入錯了
1 2
| -p, --port [HOST:][HOSTPORT:]CONTAINERPORT[/PROTOCOL][@NODEFILTER] Map ports from the node containers (via the serverlb) to the host (Format: [HOST:][HOSTPORT:]CONTAINERPORT[/PROTOCOL][@NODEFILTER]) - Example: `k3d cluster create --agents 2 -v /my/path@agent:0,1 -v /tmp/test:/tmp/other@server:0`
|
看到範例才發現後面的 []
變成了 :
AS-IS
1
| k3d cluster create nijiacluster --agents 1 -p 8082:30080@agent[0]
|
TO-BE
1
| k3d cluster create nijiacluster --agents 1 -p 8082:30080@agent:0
|
結論
今天簡短寫一下這週對我而言遇到的怪問題,接下來要開始研究一下在 k3d 中安裝 prometheus 了~