Rancher2.2.2-HA 高可用k8s容器集群搭建

来源:https://www.cnblogs.com/kelsen/archive/2019/05/09/10836332.html
-Advertisement-
Play Games

對於生產環境,需以高可用的配置安裝 Rancher,確保用戶始終可以訪問 Rancher Server。當安裝在Kubernetes集群中時,Rancher將與集群的 etcd 集成,並利用Kubernetes 調度實現高可用。 ...


對於生產環境,需以高可用的配置安裝 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 埠。

下麵是一張從官網拉過來的圖片,更直觀一些。

image

二、準備工作

1. 伺服器準備

  1. 1台 Linux伺服器,配置不用很高,用於四層負載均衡
  2. 3台 Linux伺服器,Rancker-server-node 節點
  3. 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"用戶組,加入到該用戶組的賬號在隨後安裝過程會用到。用於節點訪問的SSH用戶必須是節點上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.2 的 HA 安裝,後續再做一些安全加固,檢查各項配置確保無安全風險,即可開始提供服務。隨後會抽空再寫一篇文章簡單介紹微服務架構應用的部署。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 因項目原因,需要使用SQLite的全文索引,用到了最新的fts5模塊 但在咱們.net framwork中卻會提示“SQL logic error no such module: fts5”:找不到fts5模塊…… 百度了很久都沒有找到項目解決方案,可能是C#用SQLite比較少的原因,更何況用的更 ...
  • https://3gstudent.github.io/3gstudent.github.io/Exchange-Web-Service(EWS)%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/ EWS是郵箱的一個開放的介面服務,可以取到郵箱的各種信息,郵件收發、會議、日期 ...
  • 在之前的文章中我們是使用Rester來測試我們的WebAPI的。接下來,我們來創建一個實際的頁面來測試之前我們寫的WebAPI。我們創建一個HTML頁面,併在頁面使用 jQuery 來調用 Web API 。通過jQuery來調用增刪除改查WebAPI介面,並用 API 介面返回的響應中的詳細信息更... ...
  • 概述 在嵌入式開發的過程中,由於經常需要下位機與上位機通信,通信之間就需要協議,有協議就需要進行解碼,而產品開發得過程中,協議可能不斷更新,協議更新就需要解碼軟體更新,不斷更新解碼軟體就很麻煩,如果所有人都願意麻煩,那麼我不願意。在這裡就產生了一個通用的解碼類庫,使用者就可以簡單的改一下協議文件,通 ...
  • Modbus已經成為工業領域通信協議的業界標準(De facto),並且現在是工業電子設備之間常用的連接方式。 所以這也是我們工控領域軟體開發的所必懂的通訊協議,我也是初次學習,先貼上我的學習筆記 一 .協議概述 (1)Modbus協議是應用於控制器上的一種通用語言,實現控制器之間,控制器通過網路和 ...
  • 一.DDD分層架構介紹 本篇分析CQRS架構下的Equinox開源項目。該項目在github上star占有2.4k。便決定分析Equinox項目來學習下CQRS架構。再講CQRS架構時,先簡述下DDD風格,在DDD分層架構中,一般包含表現層、應用程式層(應用服務層)、領域層(領域服務層)、基礎設施層 ...
  • 該文章是系列文章 "基於.NetCore和ABP框架如何讓Windows服務執行Quartz定時作業" 的其中一篇。 可以訪問 "ABP模板" 創建項目 Demo.MyJob,ABP的模板是創建Web項目,而Topshelf所需的是Console項目。 Topshelf是什麼 Topshelf開源地 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。本系列痞子衡給大家介紹的是 飛思卡爾i.MX RTxxx系列微控制器相關知識 。 恩智浦半導體於2018年10月發佈的i.MX RTxxx系列開啟了ML/AI MCU的新紀元,其第一款晶元i.MX RT600,搭載一顆主頻高達300MHz的Cortex M33 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...