Rancher 2.4.3 - 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台 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

 

 

 

 

 

 

 

 

環境說明

服務器使用本地的EXSI,虛擬機具體配置如下:

主機名稱 系統版本 內網ip 配置
rancher-01 CentOS 7.6 10.212.22.32 2核3g
rancher-02 CentOS 7.6 10.212.22.23 2核3g
rancher-03 CentOS 7.6 10.212.20.97 2核3g
rancher-slb CentOS 7.6 10.212.20.213 1核1g

 

 

 

 

 

 

 

注意:如果雲服務器,比如阿里雲,騰訊雲,AWS等等。不需要rancher-slb服務器,直接TCP轉發到rancher后端即可。

 

centos7 永久修改主機名,使用命令:

hostnamectl set-hostname xxx

其中xxx表示你要設置的主機名,執行完成之后,退出,重新登錄一次,就可以了。

 

docker安裝

關於docker安裝,請參考鏈接:

https://www.cnblogs.com/xiao987334176/p/11771657.html

 

安裝RKE 

Rancher Kubernetes Engine(RKE)是一款輕量級Kubernetes安裝程序,支持在裸機和虛擬化服務器上安裝Kubernetes。 RKE解決了Kubernettes社區中的一個常見問題,比如:安裝復雜性。RKE支持多種平台運行,比如MacOS,linux,windows。

這里在rancher-01上安裝rke:

 

1、下載二進制文件

https://github.com/rancher/rke/releases/latest

目前穩定版本為v1.0.8

 

 

下載文件

 

 下載安裝

wget https://github.com/rancher/rke/releases/download/v1.0.8/rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/bin/
rke_linux-amd64 --version

 

注意:此文件安裝的k8s版本為v1.17.5

 

安裝kubectl

kubectl是一個CLI命令行工具,用於運行Kubernetes集群的命令。Rancher 2.x中的許多維護和管理都需要它。

這里在rancher-01上安裝kubectl:

https://storage.googleapis.com/kubernetes-release/release/v1.17.0/kubernetes-client-linux-amd64.tar.gz

注意:此鏈接必須在訪問谷歌的電腦上面才行下載。

我已經上傳到百度網盤了,下載鏈接如下:

鏈接:https://pan.baidu.com/s/1WbuaTIJGBSNP5CgRIq75Bw
提取碼:f77i

 

解壓,並放到path路徑下

tar zxvf kubernetes-client-linux-amd64.tar.gz -C /usr/src/
cp /usr/src/kubernetes/client/bin/kubectl /usr/bin/kubectl
chmod +x /usr/bin/kubectl

 

配置kubectl的shell補全

CentOS Linux上,您可能需要安裝默認情況下未安裝的bash-completion軟件包。

yum install bash-completion -y

運行source <(kubectl completion bash)可將kubectl自動補全添加到當前shell,要使kubectl自動補全命令自動加載:

echo "source <(kubectl completion bash)" >> ~/.bashrc

退出,重新登錄一下即可。

 

三、使用 RKE 安裝 kubernetes

下面使用 RKE(Kubernetes Engine) 安裝高可用的 Kubernetes。

NODE-SERVER 之間建立 ssh 信任

我們目前有三台服務器用作 local 集群,首先要確保我們主機能夠通過 ssh 訪問到另外兩台主機並執行相關操作。

創建用戶rancher

注意:使用rke安裝kubernetes時,不能以root用戶執行。必須是一個普通用戶才行!!!

rancher-01,rancher-02,rancher-02執行以下命令:

useradd rancher
passwd rancher

 

授權docker權限

rancher-01,rancher-02,rancher-02執行以下命令:

使用root賬號登錄

#將登陸用戶develop加入到docker用戶組中
gpasswd -a rancher docker
#更新用戶組
newgrp docker

 

切換到rancher用戶進行測試

su rancher
docker ps

輸出正常,則表示成功了。

 

ssh信任

rancher-01,rancher-02,rancher-02執行以下命令:

# su rancher
$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

 

復制公鑰

rancher-01上執行

注意:以rancher用戶執行。

$ ssh-copy-id 10.212.22.32
$ ssh-copy-id 10.212.22.23
$ ssh-copy-id 10.212.20.97

 

測試ssh免密

rancher-01上執行

注意:以rancher用戶執行。

$ ssh 10.212.22.32
$ ssh 10.212.22.23 $ ssh 10.212.20.97

 

編寫 rancher-cluster.yml 文件

這里需要注意,這個文件沒有明確配置rsa文件名,默認會使用 $HOME/.ssh/id_rsa 建立連接。內容如下

rancher-01上執行

注意:以rancher用戶執行。

$ vi rancher-cluster.yml

內容如下:

nodes:
  - address: 10.212.22.32
    internal_address: 10.212.22.32
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher-01
  - address: 10.212.22.23
    internal_address: 10.212.22.23
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher-02
  - address: 10.212.20.97
    internal_address: 10.212.20.97
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher-03

services:
  etcd:
    backup_config:
        enabled: true
        interval_hours: 6
        retention: 60
View Code

備注:
address 公共域名或IP地址
user 可以運行docker命令的用戶
role 分配給節點的Kubernetes角色列表
internal_address 內部集群通信的私有域名或IP地址
開啟了etcd的備份機制,每隔6小時備份一次,保存60天數據

 

運行 RKE 構建 kubernetes 集群

rancher-01上執行

注意:以rancher用戶執行。

$ rke_linux-amd64 up --config ./rancher-cluster.yml

輸出如下:

INFO[0000] Running RKE version: v1.0.8                  
INFO[0000] Initiating Kubernetes cluster                
INFO[0000] [dialer] Setup tunnel for host [10.212.20.97] 
INFO[0000] [dialer] Setup tunnel for host [10.212.22.32] 
INFO[0000] [dialer] Setup tunnel for host [10.212.22.23] 
INFO[0000] Checking if container [cluster-state-deployer] is running on host [10.212.22.32], try #1 
INFO[0000] Image [rancher/rke-tools:v0.1.56] exists on host [10.212.22.32] 
...
INFO[0128] [ingress] ingress controller nginx deployed successfully 
INFO[0128] [addons] Setting up user addons              
INFO[0128] [addons] no user addons defined              
INFO[0128] Finished building Kubernetes cluster successfully 
View Code

以上輸出,表示安裝成功了。

 

執行成功會在當前目錄生成2個文件,分別是rancher-cluster.rkestate和kube_config_rancher-cluster.yml

文件說明

rancher-cluster.yml:RKE集群配置文件。
kube_config_rancher-cluster.yml:群集的Kubeconfig文件,此文件包含完全訪問群集的憑據。
rancher-cluster.rkestate:Kubernetes群集狀態文件,此文件包含完全訪問群集的憑據。

 

錯誤集錦

WARN[0000] Failed to set up SSH tunneling for host [10.212.20.97]: Can't retrieve Docker Info: error during connect: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info: Unable to access node with address [10.212.20.97:22] using SSH. Please check if you are able to SSH to the node using the specified SSH Private Key and if you have configured the correct SSH username. Error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain 

ssh信任沒有做好,請確保是普通用戶執行rke_linux-amd64。不能是root用戶

 

Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system

重新執行一遍 rke_linux-amd64 up --config ./rancher-cluster.yml即可。

 

設置環境變量

rancher-01上執行

注意:以rancher用戶執行。

mkdir ~/.kube
cp kube_config_rancher-cluster.yml ~/.kube/config
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml

 

查看node

$ kubectl get nodes
NAME         STATUS   ROLES                      AGE   VERSION
rancher-01   Ready    controlplane,etcd,worker   43m   v1.17.5
rancher-02   Ready    controlplane,etcd,worker   43m   v1.17.5
rancher-03   Ready    controlplane,etcd,worker   43m   v1.17.5

 

如果需要root用戶執行kubectl,切換到root用戶,執行以下命令

mkdir ~/.kube
cp /home/rancher/kube_config_rancher-cluster.yml ~/.kube/config
export KUBECONFIG=~/.kube/config

 

測試kubectl命令

# kubectl get pods
No resources found in default namespace.
[root@rancher-master-01 ~]# kubectl get pods -A
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
ingress-nginx   default-http-backend-67cf578fc4-r4cgs     1/1     Running     0          41m
ingress-nginx   nginx-ingress-controller-8ck28            1/1     Running     0          41m
ingress-nginx   nginx-ingress-controller-crw7r            1/1     Running     0          41m
ingress-nginx   nginx-ingress-controller-s5zkp            1/1     Running     0          41m
kube-system     canal-5fhpj                               2/2     Running     0          42m
kube-system     canal-m5ww5                               2/2     Running     0          42m
kube-system     canal-mzqkg                               2/2     Running     0          42m
kube-system     coredns-7c5566588d-89ztq                  1/1     Running     0          42m
kube-system     coredns-7c5566588d-xdwg6                  1/1     Running     0          40m
kube-system     coredns-autoscaler-65bfc8d47d-pbc5t       1/1     Running     0          42m
kube-system     metrics-server-6b55c64f86-bfrcb           1/1     Running     0          41m
kube-system     rke-coredns-addon-deploy-job-npdcf        0/1     Completed   0          42m
kube-system     rke-ingress-controller-deploy-job-pqkpl   0/1     Completed   0          41m
kube-system     rke-metrics-addon-deploy-job-5nd4r        0/1     Completed   0          42m
kube-system     rke-network-plugin-deploy-job-cvxnv       0/1     Completed   0          42m
View Code

 

四、安裝和配置Helm

Helm是Kubernetes首選的包管理工具。Helmcharts為Kubernetes YAML清單文檔提供模板語法。使用Helm,可以創建可配置的部署,而不僅僅是使用靜態文件。Helm有兩個部分:Helm客戶端(helm)和Helm服務端(Tiller)。

配置Helm客戶端訪問權限

rancher-01上執行,下面提到的所有命令,都可以在root用戶執行了。

 

kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller \
--clusterrole cluster-admin --serviceaccount=kube-system:tiller

備注:在kube-system命名空間中創建ServiceAccount;創建ClusterRoleBinding以授予tiller帳戶對集群的訪問權限;helm初始化tiller服務

 

安裝Helm客戶端

wget https://get.helm.sh/helm-v2.16.6-linux-amd64.tar.gz
tar zxvf helm-v2.16.6-linux-amd64.tar.gz -C /usr/src/
cp /usr/src/linux-amd64/helm /usr/local/bin/

 

安裝Helm服務端(Tiller)

helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
helm init  \
--service-account tiller --skip-refresh \
--tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:$helm_version 

備注:
1、RKE默認啟用RBAC,所以在安裝tiller時需要指定ServiceAccount。
2、helm init在缺省配置下,會去谷歌鏡像倉庫拉取gcr.io/kubernetes-helm/tiller鏡像,在Kubernetes集群上安裝配置Tiller;由於在國內可能無法訪問gcr.io、storage.googleapis.com等域名,可以通過--tiller-image指定私有鏡像倉庫鏡像。 
3、helm init在缺省配置下,會利用https://kubernetes-charts.storage.googleapis.com作為缺省的stable repository地址,並去更新相關索引文件。在國內可能無法訪問storage.googleapis.com地址, 可以通過--stable-repo-url指定chart國內加速鏡像地址。 
4、如果您是離線安裝Tiller, 假如沒有內部的chart倉庫, 可通過添加--skip-refresh參數禁止Tiller更新索引。

 

Helm安裝Rancher

添加Chart倉庫地址

helm repo add rancher-stable \
https://releases.rancher.com/server-charts/stable

 

配置SSL

注意:rancher默認使用https訪問,因此,需要有一個公網的SSL才行。我在阿里雲上面買了一個通配符的SSL證書。

將證書上傳到rancher-01

rancher-01上執行

創建secret

kubectl create ns cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./214563317320547.pem --key=./214563317320547.key

 

通過helm安裝rancher

helm install rancher-stable/rancher   --name rancher   --namespace cattle-system   --set hostname=rancher.baidu.com   --set ingress.tls.source=secret 

注意:這里指定了hostname=rancher.baidu.com,必須使用域名訪問才行。

 

查看pod,確保運行正常

# kubectl get pods -A
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
cattle-system   rancher-66b5cfc7f5-6wbhq                  0/1     Running     1          100s
cattle-system   rancher-66b5cfc7f5-9p98v                  1/1     Running     0          100s
cattle-system   rancher-66b5cfc7f5-zs7qc                  0/1     Running     1          100s
ingress-nginx   default-http-backend-67cf578fc4-r4cgs     1/1     Running     0          71m
ingress-nginx   nginx-ingress-controller-8ck28            1/1     Running     0          71m
ingress-nginx   nginx-ingress-controller-crw7r            1/1     Running     0          71m
ingress-nginx   nginx-ingress-controller-s5zkp            1/1     Running     0          71m
kube-system     canal-5fhpj                               2/2     Running     0          71m
kube-system     canal-m5ww5                               2/2     Running     0          71m
kube-system     canal-mzqkg                               2/2     Running     0          71m
kube-system     coredns-7c5566588d-89ztq                  1/1     Running     0          71m
kube-system     coredns-7c5566588d-xdwg6                  1/1     Running     0          70m
kube-system     coredns-autoscaler-65bfc8d47d-pbc5t       1/1     Running     0          71m
kube-system     metrics-server-6b55c64f86-bfrcb           1/1     Running     0          71m
kube-system     rke-coredns-addon-deploy-job-npdcf        0/1     Completed   0          71m
kube-system     rke-ingress-controller-deploy-job-pqkpl   0/1     Completed   0          71m
kube-system     rke-metrics-addon-deploy-job-5nd4r        0/1     Completed   0          71m
kube-system     rke-network-plugin-deploy-job-cvxnv       0/1     Completed   0          71m
kube-system     tiller-deploy-9d74c75cf-7blmd             1/1     Running     0          18m
View Code

 

訪問頁面

由於沒有DNS服務器,這里直接在windows10添加一條記錄。

10.212.22.32  rancher.baidu.com

注意:這里ip地址rancher-01地址,其實,設置為rancher-02或者rancher-03都是能訪問的。

 

訪問頁面

https://rancher.baidu.com

效果如下:

設置一個強密碼

 

 

確定訪問地址

 

 

設置中文

 

 

查看local集群

 

 

查看主機

 

 

五、負載均衡配置

登錄rancher-slb節點,安裝nginx

yum install -y nginx

 

修改nginx.conf

vi /etc/nginx/nginx.conf

完整內容如下:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 8192;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server { listen 80; return 301 https://$host$request_uri; }
}
stream { upstream rancher_servers { least_conn; server 10.212.22.32:443 max_fails=3 fail_timeout=5s; server 10.212.22.23:443 max_fails=3 fail_timeout=5s; server 10.212.20.97:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers; } }

上面紅色部分,就是核心配置。

 

重新加載

nginx
nginx -s reload

 

修改windows10的hosts記錄,指向為rancher-slb節點ip

10.212.20.213  rancher.baidu.com

 

刷新頁面,能正常訪問,說明成功了。

 

 

本文參考鏈接:

https://blog.51cto.com/bilibili/2440304

https://blog.51cto.com/liuzhengwei521/2398244

https://www.cnblogs.com/xzkzzz/p/9995956.html

https://www.cnblogs.com/kelsen/p/10836332.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM