K's Learning Diary

A parallel world used to recording.

0%

初探Kubernetes

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
2
3
GITHUB_URL=https://github.com/kubernetes/dashboard/releases
VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
weget https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml

編輯 recommended.yaml ,修改成 type: NodePort & nodePort: 自定義port
這邊使用 NodePort 對外開放port,讓遠程使用者可以操作dashboard(Kubernetes-dashboard預設只開放給localhost操作)

vi dashboard.admin-user.yml

1
2
3
4
5
6
7
8
9
10
kind: Service
...
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 8787
selector:
k8s-app: kubernetes-dashboard
type: NodePort

啟用 recommended.yaml

1
sudo k3s kubectl create -f ./recommended.yaml

建立 dashboard.admin-user.yml 並存檔

vi dashboard.admin-user.yml

1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

:wq!

建立 dashboard.admin-user-role.yml 並存檔

vi dashboard.admin-user-role.yml

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

: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
------ End of article ------

Welcome to my other publishing channels