Automated container deployment, scaling, and management
kubernetes.io
一個網頁一個系統在DB資料量變大,API越寫越多的時候,Mysql開始無法負荷過多的Connection,導致前端向後端請求資料時loading時間太長,這是一個很經典的場景,有很多方法可以解決。
一、前端先把畫面render完再ansys axios取得資料
二、把經常查詢少更新的資料用Redis緩存到Memory裡
三、建立分散式架構的Mysql叢集
初探Kubernetes
但,這次我把解決方式拉到系統層級,使用Kubernetes的load balancer
,好像有點大材小用,其實在我司要克服的功能是 透過Web監聽管控linux主機上ffmpeg stream的狀態。因為自己有在接觸docker,發現容器化的發展讓不管是DevOps、Backend或Frontend engineer都能更專注於自己的開發內容,而不必擔心丟到server上時怎麼跟local不一樣,是對團隊非常有益的工具。所以才打算建立這套microservices微服務的架構。
What is Kubernetes ?
Kubernetes簡稱k8s,是一個能夠自動化部署、擴張以及管理容器應用程式的系統。
- 自動化部屬多種容器到多台主機,並掌握硬體分配狀態
- 彈性伸縮及擴張個容器所需資源,各容器間可以負載均衡
- 有效控管應用的部署及更新,快速的自動部屬、自動重啟
Why use Kubernetes ?
- 各項應用容器化,開發環境獨立部屬,不會因library互相影響
- 容器即服務,團隊使用不同語言,透過Rest API 溝通
- 自動化伸縮容器資源,降低雲端成本
場景一、如文章開頭,大量資料高併發需要分布式架構時,利用負載均衡。
場景二、需求開發人員CI/CD到production,不須停機更新。
場景三、企業有大量虛擬機需要共同管理,環境轉移部屬。
很多場景都可以使用k8s,但是否必要,就要真的理解k8s是什麼了。
How use Kubernetes ?
講了那麼多,到底怎麼安裝k8s呢?
其實到Kubernetes的官網有一系列的教學跟工具,都非常的清楚!
但我最後選擇了k3s,由Rancher開源更輕量級的Kubernetes。
Lightweight Kubernetes. Easy to install, half the memory, all in a binary less than 40mb.
k3s - 5 less than k8s
30秒安裝輕量級Kubernetes
1 | curl -sfL https://get.k3s.io | sh - |
等待30秒,查看是否安裝成功
1 | k3s kubectl get node |
完成
安裝Kubernetes-dashboard
取得最新版Kubernetes-dashboard的recommended.yaml
需安裝 weget,yum install -y weget
1 | GITHUB_URL=https://github.com/kubernetes/dashboard/releases |
編輯 recommended.yaml ,修改成 type: NodePort
& nodePort: 自定義port
這邊使用 NodePort 對外開放port,讓遠程使用者可以操作dashboard(Kubernetes-dashboard預設只開放給localhost操作)
vi dashboard.admin-user.yml
1 | kind: Service |
啟用 recommended.yaml
1 | sudo k3s kubectl create -f ./recommended.yaml |
建立 dashboard.admin-user.yml 並存檔
vi dashboard.admin-user.yml
1 | apiVersion: v1 |
:wq!
建立 dashboard.admin-user-role.yml 並存檔
vi dashboard.admin-user-role.yml
1 | apiVersion: rbac.authorization.k8s.io/v1 |
:wq!
啟用 dashboard.admin-user.yml & dashboard.admin-user-role.yml
1 | sudo k3s kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml |
獲取token
1 | sudo k3s kubectl -n kubernetes-dashboard describe secret admin-user-token | grep ^token |
- https://遠程地址:自定義port
- 登陸Kubernetrs-dashboard
刪除k3s
刪除kubernetes-dashboard
1 | sudo k3s kubectl delete ns kubernetes-dashboard |
刪除k3s server node
1 | /usr/local/bin/k3s-uninstall.sh |
刪除k3s agent node
1 | /usr/local/bin/k3s-agent-uninstall.sh |