Concepts: Getting started
Introduction
前面稍微介紹 k8s 後
先來個簡單的 getting start(LAB)
開始實際接觸 k8s
後面的介紹 就可以一邊學一邊實做下去了
首先 k8s 有不同的 distibution 請參考 distribution-compare
這邊我們採用 k3s 作為 LAB 環境
他的優點是簡單且環境單純
可以讓我們後續學習更加順利
那為什麼不直接用原生 k8s ?
因為原生 k8s 安裝非常麻煩
順利安裝少說半小時起跳
因為步驟很多, 出錯機會也非常大 因此非常不建議使用
官方的 getting start 也不是採用原生 k8s
是使用 kind or minikube (唉 不是… getting start 你幹麻讓人選擇障礙啊啊啊)
但兩套我都不建議使用, 由於其 base 在 docker 環境底下
導致其部份功能會受到 docker 限制, 造成學習 k8s 會有限制
因此建議跟我一樣使用 k3s
detail 可見 k3s introduction
install k3s
Prerequisites
a linux VM (best use ubuntu 24.04) with 2 core/2G RAM
install
|
|
檢查 install status
如果 為 Ready 代表安裝完成
|
|
說明一下
前面有說過
不同 distribution add node 方式不同
因此前面(k8s doc reading: Concepts - Cluster Architecture: Node) 有說簡單了解即可
另外採用 k3s 我們也不會用到 kubeadm
所以這篇會跟官方的 getting start 有差異
前面提過 我們在操作 k8s 時 都是使用 kubectl
而 k3s cli 內建 kubectl 了
因此不必再另外安裝
最後我們設定 alias k="k3s kubectl"
這是官方的小 tips quick-reference
畢竟這樣方便許多
許多人都是這樣使用 k8s
為了讓大家都能看懂別人在說什麼
因此 k
就是指 kubectl
是基本常識
deploy first app
首先回憶 k8s 是採用 declarative configuration
也就是說 我們都是寫 config(yaml format) 給 k8s 看
對等就是 docker compose file
現在我們直接使用現成的 yaml 來部屬第一個 app
|
|
這邊說明 我們在 k8s 建立了一個 deployments.apps
叫 nginx-deployment
deployments.apps 就是前面說的 deployments 也可以用縮寫 deploy
觀察結果
|
|
這邊可以看到 READY: 3/3
代表我們起了 3 個 replica 並且已經啟動完成
我們可以用 get pod
加上 -o wide
看到更多訊息
|
|
expose app in cluster
在前面我們讓 app(nginx) 起來了
但是如果 cluster 內有其他 pod 要來 access app(nginx) 該怎麼做到的?
這時我們要用到 k8s 的 service (後面會介紹)
|
|
我們可以看到 k8s 提供了一個 ClusterIP
其他 pod 只要 access 這個 10.43.163.91:8000 就可以存取到 app(nginx)
且是 random 存取 3 個 app(nginx) pod
因此 replica 的應用在 k8s 是非常簡單能夠達成
expose app in host
前面利用的 service 是讓 app(nginx) 能夠在 cluster 內部給其他 pod access
但如果是要給外部存取呢?
ClusterIP/ pod IP 是一個 overlap IP
只有在 cluster 內部才能存取
我們來編輯剛剛的 service
k edit service nginx-service
修改 spec.type 由 ClusterIP
改為 LoadBalancer
並存檔離開(default 是使用 vi 編輯器)
這時再看一次狀態
$ k get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.43.163.91 192.168.56.101 8000:31509/TCP 15m
可以看到 EXTERNAL-IP 有東西了
這時只要用 browser 打開 http://192.168.56.101:8000
就可以看到結果了
cleanup
最後來把 lab 建立的 service/deployment 刪除
|
|
Conclusion
快速的 LAB 操作之後
應該會對 k8s 的操作有基本認識
我們先不要了解 yaml (manifest) 的語法
這個要等到對 k8s 有更進一步認識後才會有辦法說明
接下來會就能一邊介紹 k8s 並同時有 LAB 環境讓大家實際上手演練了