Rancher2.2.2-HA 高可用k8s容器叢集搭建
對於生產環境,需以高可用的配置安裝 Rancher,確保使用者始終可以訪問 Rancher Server。當安裝在Kubernetes叢集中時,Rancher將與叢集的 etcd 整合,並利用Kubernetes 排程實現高可用。
為確保高可用,本文所部署的 Kubernetes 叢集將專用於執行 Rancher ,Rancher 執行起來後,可再建立或匯入叢集以執行具體的工作負載。
一、推薦架構
- Rancher的DNS 應解析到 4層(TCP) 負載均衡上。
- 負載均衡應將埠 TCP/80 和 TCP/443 轉發到 Kubernetes 叢集中的所有3個節點。
- Ingress-controller 將 HTTP 重定向到HTTPS並終止埠 TCP/443 上的 SSL/TLS(SSL數字證書在這裡部署)。
- Ingress-controller 將流量轉發到 pod 的 TCP/80 埠。
下面是一張從官網拉過來的圖片,更直觀一些。
二、準備工作
1. 伺服器準備
- 1臺 Linux伺服器,配置不用很高,用於四層負載均衡
- 3臺 Linux伺服器,Rancker-server-node 節點
- n臺 Linux伺服器,Rancker-agent-node 節點(n<=50)
節點伺服器的硬體配置,可根據實際情況依據該表自行選擇。
規模 | 叢集 | 節點 | CPU | 記憶體 |
---|---|---|---|---|
小 | 最多5個 | 高達50 | 2 | 8 GB |
中 | 最多15個 | 最多200 | 4 | 16 GB |
大 | 高達50 | 最多500個 | 8 | 32 GB |
超大 | 最多100個 | 高達1000 | 32 | 128 GB |
更大規模 | 100+ | 1000+ | 聯絡 Rancher | 聯絡 Rancher |
2.工具安裝
這些工具軟體將在部署過程中用到,需提前安裝好,並確保通過 $PATH 變數可以找到。
安裝 kubectl
這是一個 kubernetes 命令列工具,安裝參考 K8S 官網
這裡要注意的是,官網的安裝過程是到谷歌雲平臺下載,這裡我門修改下載連結為 RANCHER 提供的映象地址。
# 下載目前最新版 wget https://www.cnrancher.com/download/kubernetes/linux-amd64-v1.14.1-kubectl # 設定執行許可權 chmod +x ./linux-amd64-v1.14.1-kubectl # 將其移動到 /usr/locak/bin/kubectl sudo mv ./linux-amd64-v1.14.1-kubectl /usr/local/bin/kubectl
安裝 RKE
RKE 全稱 Rancher Kubernetes Engine,是一個用於構建 kubernets 叢集的命令列工具。網路原因,我們切換到 Rancher 提供的映象地址下載安裝
# 下載目前最新版
wget https://www.cnrancher.com/download/rke/v0.1.18-rke_linux-amd64
# 設定執行許可權
chmod +x v0.1.18-rke_linux-amd64
# 將其移動到 /usr/locak/bin/kubectl
sudo cp v0.1.18-rke_linux-amd64 /usr/local/bin/rke
# 驗證安裝
rke --version # rke version v0.1.18
安裝 helm
helm 是Kubernetes的包管理器。Helm版本需高於 v2.12.1
。
# 網路原因,切換到 Rancher 提供的映象連線
wget https://www.cnrancher.com/download/helm/helm-v2.13.1-linux-amd64.tar.gz
# 解壓
tar -zxvf helm-v2.0.0-linux-amd64.tgz
# 移動到 /usr/local/bin/helm
mv linux-amd64/helm /usr/local/bin/helm
三、建立節點和負載均衡
這些節點須在同一個網路區域或資料中心。
1. 節點準備
作業系統
所有節點安裝 ubuntu 18.04(64-bit x86)
網路要求
注意參考 官網放行相關埠。本文 ip 清單(僅用於演示):
NODE | IP | 備註 |
---|---|---|
NODE-LB | 公網 168.168.168.1 / 內網 10.0.0.1 | 四層負載均衡 |
NODE-SERVER | 公網 168.168.168.6 / 內網 10.0.0.6 | local 叢集 |
NODE-SERVER | 公網 168.168.168.7 / 內網 10.0.0.7 | local 叢集 |
NODE-SERVER | 公網 168.168.168.8 / 內網 10.0.0.8 | local 叢集 |
NODE-WORKER | 公網 168.168.168.16 / 內網 10.0.0.16 | 工作負載 |
NODE-WORKER | 公網 168.168.168.17 / 內網 10.0.0.17 | 工作負載 |
NODE-WORKER | 公網 168.168.168.18 / 內網 10.0.0.18 | 工作負載 |
docker-ce
並安裝最新stable版 docker-ce:18.09.6
# 刪除舊版本docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新 apt
$ sudo apt-get update
# 安裝工具包
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 新增Docker官方 GPG key
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 新增 stable apt 源
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安裝 Docker CE
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
# 將當前使用者加入"docker"使用者組,加入到該使用者組的賬號在隨後安裝過程會用到。
$ sudo usermod -aG docker $USER
2. 配置四層負載均衡
RKE 將會在每個節點上配置一個 Ingress-controller pod,這個 pod 將繫結到該節點的 TCP/80 和 TCP/443 埠,作為 Rancher-server 的HTTPS流量入口點。
將負載均衡器配置為基本的第4層TCP轉發器,這裡採用 NGINX 作四層負載均衡。
*安裝 Nginx
sudo apt-get install nginx
# /usr/sbin/nginx:主程式
# /etc/nginx:存放配置檔案
# /usr/share/nginx:存放靜態檔案
# /var/log/nginx:存放日誌
更新配置檔案 /etc/nginx/nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
upstream rancher_servers_http {
least_conn;
server 10.0.0.6:80 max_fails=3 fail_timeout=5s;
server 10.0.0.7:80 max_fails=3 fail_timeout=5s;
server 10.0.0.8:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}
upstream rancher_servers_https {
least_conn;
server 10.0.0.6:443 max_fails=3 fail_timeout=5s;
server 10.0.0.7:443 max_fails=3 fail_timeout=5s;
server 10.0.0.8:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}
注意:將local群集專用於Rancher。 勿將此負載均衡(即local群集Ingress)對 Rancher 以外的應用程式進行負載轉發。
四、使用 RKE 安裝 kubernetes
下面使用 RKE(Kubernetes Engine) 安裝高可用的 Kubernetes。
1. NODE-SERVER 之間建立 ssh 信任
我們目前有三臺伺服器用作 local 叢集,首先要確保我們主機能夠通過 ssh 訪問到另外兩臺主機並執行相關操作。比如執行 docker 命令,還記得前面我們加入 docker 使用者組的使用者吧。
# 根據需求配置相關資訊生成 rsa 公鑰金鑰
ssh-keygen
# 複製當前主機上的公鑰到另外兩臺上面,實現免密碼登入
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# 要注意這裡也要跟自己註冊註冊一下 :ssh-copy-id -i ~/.ssh/id_rsa.pub user@本機ip
2. 編寫 rancher-cluster.yml 檔案
這裡需要注意,這個檔案沒有明確配置rsa檔名,預設會使用 $HOME/.ssh/id_rsa
建立連線。內容如下
nodes:
- address: 168.168.168.6
internal_address: 10.0.0.6
user: ubuntu
role: [controlplane,worker,etcd]
- address: 168.168.168.7
internal_address: 10.0.0.7
user: ubuntu
role: [controlplane,worker,etcd]
- address: 168.168.168.8
internal_address: 10.0.0.8
user: ubuntu
role: [controlplane,worker,etcd]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
3. 執行 RKE 構建 kubernetes 叢集
rke up --config ./rancher-cluster.yml
# 驗證:返回類似下面的訊息則說明執行成功,有問題歡迎留言交流。
# Finished building Kubernetes cluster successfully.
執行成功會在當前目錄生成一個檔案 kube_config_rancher-cluster.yml
,將該檔案複製到 .kube/kube_config_rancher-cluster.yml
。
或者
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
4. 測試叢集
kubectl get nodes
# 返回下面資訊說明叢集建立成功
NAME STATUS ROLES AGE VERSION
168.168.168.6 Ready controlplane,etcd,worker 13m v1.13.5
168.168.168.7 Ready controlplane,etcd,worker 13m v1.13.5
168.168.168.8 Ready controlplane,etcd,worker 13m v1.13.5
5. 儲存好相關配置檔案
當排除故障、升級群集時需要用到以下檔案,請將其副本儲存在一個安全的位置。
rancher-cluster.yml
:RKE叢集配置檔案。
kube_config_rancher-cluster.yml
:群集的Kubeconfig檔案,此檔案包含完全訪問群集的憑據。
rancher-cluster.rkestate
:Kubernetes群集狀態檔案,此檔案包含完全訪問群集的憑據。
6. 初始化 Helm
一開始,我們安裝了 Helm ,Helm 是 Kubernetes 首選的包管理工具。為了能夠使用 Helm,需要在群集上安裝伺服器端元件 tiller。
Kubernetes APIServer 開啟了 RBAC 訪問控制,所以需要建立 tiller 使用的service account: tiller 並分配合適的角色給它。
# 在 kube-system 名稱空間下建立一個 serviceaccount ,並將角色繫結給 tiller
kubectl -n kube-system create serviceaccount tiller
# 然後, heml 就可以在叢集上安裝 tiller 了
# 同樣,網路原因,我們需要配置一個映象倉庫地址
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 輸出:$HELM_HOME has been configured at /home/ubuntu/.helm.
7. 測試 tiller 安裝是否成功
kubectl -n kube-system rollout status deploy/tiller-deploy
# 輸出 deployment "tiller-deploy" successfully rolled out
helm version
# Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
# Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
五、安裝 Rancher
這裡注意選擇 stable 版本,首先新增 heml 源倉庫。
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
1. 部署 Rancher 並配置 SSL 數字證書
helm install rancher-stable/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=cloud.jfjbapp.cn \
--set ingress.tls.source=secret
2. 將通過 CA 機構簽發的數字證書準備好,
3. 檢查 rancher 是否成功可用
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
4. 訪問 Rancher UI
瀏覽器開啟 https://your.doamin
,為 admin
賬戶設定初始密碼,並登入系統。提示設定server-url
,確保你的地址無誤,確認即可。隨後稍等皮片刻,待系統完成初始化。
如果出現local叢集一直停留在等待狀態,並提示 Waiting for server-url setting to be set
,可以嘗試點選 全域性->local->升級->新增一個成員角色(admin/ClusterOwner)->儲存即可。
六、結語
至此,已完成 Rancher 2.2.3 的 HA 安裝,後續再做一些安全加固,檢查各項配置確保無安全風險,即可開始提供服務。隨後會抽空再寫一篇文章簡單介紹微服務架構應用的部署