以下為 Ubuntu 22.04 上建立 Kubernetes cluster 的操作步驟,會建立:
- 1 個 master node
- 2 個 worker node,並透過
kubeadm join
到 master node
軟體開發、伺服器和生活瑣事
以下為 Ubuntu 22.04 上建立 Kubernetes cluster 的操作步驟,會建立:
kubeadm join
到 master node在 deployment 完成後,可能會建立多個 pods,這些 pods 預設在 node 的 private ip 中,不會與 host 連線。正式的作法,是建立 NodePort service,或是 load balancer 轉送資料到 pods。
若需要暫時與其中一個 pod 連線,可以透過 kubernetes 的 port-forward 功能轉送資料。
先確認欲連線的 pod IP address:
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7d76cf4997-68rmh 1/1 Running 0 19m 172.17.0.6 minikube <none> <none> my-nginx-7d76cf4997-d5lxt 1/1 Running 0 19m 172.17.0.5 minikube <none> <none> my-nginx-7d76cf4997-q6rx4 1/1 Running 0 19m 172.17.0.4 minikube <none> <none>
上表中,可以看到 pod 的 IP 都被指定在 172.17.0.x
下。這邊假設我們要在 127.0.0.1 的 port 8080 轉送到 172.17.0.4
這個 pod 的 port 80
:
$kubectl port-forward pods/my-nginx-7d76cf4997-q6rx4 8080:80 Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
顯示 port-forwarding 狀態、且指令仍在執行沒有中斷,表示 port-forwarding 建立成功。接下來就可以從 127.0.0.1:8080
送資料到 pod 中 (範例中 pod 中為 nginx):
$ curl http://127.0.0.1:8080 <html><body><p> Hello World, kubernetes </p></body></html>
我明明應該要寫 code 的啊,為什麼現在都在寫 config …..
在 minikube 測試時,kubernetes 是在模擬環境底下,剛跑起來時是沒有 image 的,一定會去 pull 一次 image。若是 private registry 還會因為權限問題而噴錯。
若希望 minikube 直接使用 local 已有的 docker image,可以使用 load
指令讓 minikube 把已經存在的 image 讀進 kubernetes 環境:
minikube image load asia.gcr.io/zeroplex/php-fpm-customized:v1.0.0
另外,記得設定檔中的 imagePullPolicy
不可以使用 Always
,必須改成 Never
或是 IfNotPresent
。