對於生產環境,需以高可用的配置安裝 Rancher,確保用戶始終能夠訪問 Rancher Server。當安裝在Kubernetes集羣中時,Rancher將與集羣的 etcd 集成,並利用Kubernetes 調度實現高可用。node
爲確保高可用,本文所部署的 Kubernetes 集羣將專用於運行 Rancher ,Rancher 運行起來後,可再建立或導入集羣以運行具體的工做負載。linux
下面是一張從官網拉過來的圖片,更直觀一些。nginx
節點服務器的硬件配置,可根據實際狀況依據該表自行選擇。docker
規模 | 集羣 | 節點 | 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 |
這些工具軟件將在部署過程當中用到,需提早安裝好,並確保經過 $PATH 變量能夠找到。ubuntu
安裝 kubectl瀏覽器
這是一個 kubernetes 命令行工具,安裝參考 K8S 官網安全
這裏要注意的是,官網的安裝過程是到谷歌雲平臺下載,這裏我門修改下載連接爲 RANCHER 提供的鏡像地址。bash
# 下載目前最新版 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
這些節點須在同一個網絡區域或數據中心。
操做系統
全部節點安裝 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"用戶組,加入到該用戶組的帳號在隨後安裝過程會用到。用於節點訪問的SSH用戶必須是節點上docker組的成員: $ sudo usermod -aG docker $USER
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 Engine) 安裝高可用的 Kubernetes。
咱們目前有三臺服務器用做 local 集羣,首先要確保咱們主機可以經過 ssh 訪問到另外兩臺主機並執行相關操做。好比執行 docker 命令,還記得前面咱們加入 docker 用戶組的用戶吧。
# 根據需求配置相關信息生成 rsa 公鑰密鑰 ssh-keygen # 複製當前主機上的公鑰到另外兩臺上面,實現免密碼登陸 ssh-copy-id -i ~/.ssh/id_rsa.pub user@x.x.x.x # 要注意這裏也要跟本身註冊註冊一下 :ssh-copy-id -i ~/.ssh/id_rsa.pub user@本機ip
這裏須要注意,這個文件沒有明確配置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
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
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
當排除故障、升級羣集時須要用到如下文件,請將其副本保存在一個安全的位置。
rancher-cluster.yml
:RKE集羣配置文件。
kube_config_rancher-cluster.yml
:羣集的Kubeconfig文件,此文件包含徹底訪問羣集的憑據。
rancher-cluster.rkestate
:Kubernetes羣集狀態文件,此文件包含徹底訪問羣集的憑據。
一開始,咱們安裝了 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.
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"}
這裏注意選擇 stable 版本,首先添加 heml 源倉庫。
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm install rancher-stable/rancher \ --name rancher \ --namespace cattle-system \ --set hostname=cloud.jfjbapp.cn \ --set ingress.tls.source=secret
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
瀏覽器打開 https://your.doamin
,爲 admin
帳戶設置初始密碼,並登入系統。提示設置server-url
,確保你的地址無誤,確認便可。隨後稍等皮片刻,待系統完成初始化。
若是出現local集羣一直停留在等待狀態,並提示 Waiting for server-url setting to be set
,能夠嘗試點擊 全局->local->升級->添加一個成員角色(admin/ClusterOwner)->保存便可。
至此,已完成 Rancher 2.2.2 的 HA 安裝,後續再作一些安全加固,檢查各項配置確保無安全風險,便可開始提供服務。隨後會抽空再寫一篇文章簡單介紹微服務架構應用的部署。