Rancher 2.x 生產環境HA(高可用)部署

Rancher官方中文文檔:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/

Rancher 2.x 生產環境HA(高可用)部署

本次實驗,爲Ranche七層負載均衡Helm HA部署

一、環境準備

1、服務器配置

服務器使用騰訊雲的虛擬機具體配置如下:

主機名稱 系統版本 內網ip 公網ip 配 置
master1 CentOS 7.6 172.27.100.101 xxx 4C 16G
master2 CentOS 7.6 172.27.100.101 xxx 4C 16G
master3 CentOS 7.6 172.27.100.101 xxx 4C 16G

因使用7層負載均衡,需要一個LB,這裏使用騰訊雲的雲負載均衡(實驗環境可以使用nginx)

(1) 配置每臺主機的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。

(2) 關閉selinux:

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

(3) 測試環境關閉防火牆或者開啓相應端口,參考https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/references/

填坑備註:這裏我的內網是全部開了的,然而部署的時候有報錯,需要開放對應端口讓服務器的公網ip可以訪問~(居然不走內網ip,不知道是什麼情況~)

2、Docker安裝及配置

正常安裝Docker,唯一注意的地方是:因爲CentOS的安全限制,通過RKE安裝K8S集羣時候無法使用root賬戶。CentOS用戶使用非root用戶來運docker

(1) 配置安裝源

yum install ca-certificates ;
update-ca-trust;

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak
cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

EOF

(2) 安裝Docker

# 定義用戶名
NEW_USER=rancher
# 添加用戶(可選)
sudo adduser $NEW_USER
# 爲新用戶設置密碼
sudo passwd $NEW_USER
# 爲新用戶添加sudo權限
sudo echo "$NEW_USER ALL=(ALL) ALL" >> /etc/sudoers
# 卸載舊版本Docker軟件
sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-selinux \
              docker-engine-selinux \
              docker-engine \
              container*
# 定義安裝版本
export docker_version=19.03.1
# step 1: 安裝必要的一些系統工具
sudo yum update -y;
sudo yum install -y yum-utils device-mapper-persistent-data \
    lvm2 bash-completion;
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}';
sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version};
# 如果已經安裝高版本Docker,可進行降級安裝(可選)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把當前用戶加入docker組
sudo usermod -aG docker $NEW_USER;
# 設置開機啓動
sudo systemctl enable docker;

(3) 修改Docker配置

daemon.json默認位於/etc/docker/daemon.json,如果沒有可手動創建,基於systemd管理的系統都是相同的路徑。通過修改daemon.json來改過Docker配置,也是Docker官方推薦的方法。

1、配置私有倉庫
Docker默認只信任TLS加密的倉庫地址(https),所有非https倉庫默認無法登陸也無法拉取鏡像。insecure-registries字面意思爲不安全的倉庫,通過添加這個參數對非https倉庫進行授信。可以設置多個insecure-registries地址,以數組形式書寫,地址不能添加協議頭(http)。
{
"insecure-registries": ["harbor.xxx.cn:30002"]
}

2、配置存儲驅動
OverlayFS是一個新一代的聯合文件系統,類似於AUFS,但速度更快,實現更簡單。Docker爲OverlayFS提供了兩個存儲驅動程序:舊版的overlay,新版的overlay2(更穩定)。

先決條件:

overlay2: Linux內核版本4.0或更高版本,或使用內核版本3.10.0-514+的RHEL或CentOS。
overlay: 主機Linux內核版本3.18+
支持的磁盤文件系統
ext4(僅限RHEL 7.1)
xfs(RHEL7.2及更高版本),需要啓用d_type=true。

{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}

3、配置日誌驅動
容器在運行時會產生大量日誌文件,很容易佔滿磁盤空間。通過配置日誌驅動來限制文件大小與文件的數量。 >限制單個日誌文件爲50M,最多產生3個日誌文件
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}

最終配置文件如下:

{
"insecure-registries": ["harbor.xxx.cn:30002"]
}

{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}

{
"log-driver": "json-file",
"log-opts": {
    "max-size": "50m",
    "max-file": "3"
    }
}

3、安裝RKE

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

1、下載二進制文件
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/rke/

2、運行一下命令測試:

chmod +x rke_linux-amd64
./rke_linux-amd64 --version

4、安裝kubectl

kubectl是一個CLI命令行工具,用於運行Kubernetes集羣的命令。Rancher 2.x中的許多維護和管理都需要它。
這裏在master1上安裝kubectl:

1、下載二進制文件
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/kubernetes/

2、確保kubectl二進制文件是可執行文件。

chmod +x ./kubectl

3、將kubectl二進制文件移動到PATH路徑下。

sudo mv ./kubectl /usr/local/bin/kubectl

4、配置kubectl
使用RKE創建Kubernetes集羣時,RKE會在本地目錄中創建一個包含認證信息的配置文件kube_config_rancher-cluster.yml,以使用kubectl或helm等工具連接到新集羣。

可以將此文件複製到$HOME/.kube/config


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

4、配置kubectl的shell補全

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

yum install bash-completion -y

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

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

二、安裝

1、配置負載均衡器

使用騰訊***雲負載均衡,導入域名ssl證書(此處的域名須有後面配置訪問域名一致,我使用的是免費一年的ssl證書♪(^∇^)),把10443端口綁定到master1,master2,master3的80端口即可~
備註:需要開通對應的安全規則,即負載均衡的ip能訪問master1、2、3的80端口
Rancher 2.x 生產環境HA(高可用)部署

2、RKE安裝K8S

(1) 在master1上創建rke安裝文件rancher-cluster.yml

#vim rancher-cluster.yml

nodes:
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.101
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master1
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.102
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master2
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.103
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master3

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

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

(2) 創建K8S集羣及測試

#rke up --config ./rancher-cluster.yml

完成後,會創建一個文件kube_config_rancher-cluster.yml。這個文件包含kubectl和helm訪問K8S的憑據。可以將此文件複製到$HOME/.kube/config,或者如果您正在使用多個Kubernetes集羣,請將KUBECONFIG環境變量設置爲kube_config_rancher-cluster.yml文件路徑。

備註:保存好kube_config_rancher-cluster.yml和rancher-cluster.yml,之後的維護和升級需要用到!

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

使用kubectl get nodes測試:

Rancher 2.x 生產環境HA(高可用)部署

3、安裝和配置Helm

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

(1) 配置Helm客戶端訪問權限

master1上,在上一步生成的kube_config_rancher-cluster.yml文件的同級目錄下運行:

kubectl --kubeconfig=kube_configxxx.yml -n kube-system create serviceaccount tiller
kubectl --kubeconfig=kube_configxxx.yml create clusterrolebinding tiller \
--clusterrole cluster-admin --serviceaccount=kube-system:tiller

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

(2) 安裝Helm客戶端

1、下載helm:
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/helm/

2、解壓縮及配置:

tar -zxvf helm-v2.x.x-linux-amd64.tgz
helm在解壓後的目錄中找到二進制文件,並將其移動到所需的位置
mv linux-amd64/helm /usr/local/bin/helm && chmod +x /usr/local/bin/helm

(3) 安裝Helm服務端(Tiller)

master1上,在上一步生成的kube_config_rancher-cluster.yml文件的同級目錄下運行:

kubeconfig=xxx.yml

helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
helm init --kubeconfig=$kubeconfig \
--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更新索引。

4、Helm安裝Rancher

(1) 添加Chart倉庫地址

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

(2) 配置SSL並安裝Rancher Server

SSL證書使用騰訊雲提供的一年免費證書,自簽名證書參考官網

export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml
helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher     --name rancher --namespace cattle-system     --set hostname=paas.yunjingtech.cn     --set tls=external

安裝成功後,輸入之前配置的域名即可~

Rancher 2.x 生產環境HA(高可用)部署

備註:
登陸後查看,system空間,若cattle-cluster-agent Pod和cattle-node-agent無法正常運行,需要爲其添加主機別名:

export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system \
    patch deployments rancher --patch '{
        "spec": {
            "template": {
                "spec": {
                    "hostAliases": [
                        {
                            "hostnames":
                            [
                                "xxx.cnrancher.com"
                            ],
                                "ip": "xxxxxx"
                        }
                    ]
                }
            }
        }
    }'
export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system \
patch deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "demo.cnrancher.com"
                        ],
                            "ip": "xxxxxx"
                    }
                ]
            }
        }
    }
}'
export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system \
patch  daemonsets cattle-node-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "xxx.rancher.com"
                        ],
                            "ip": "xxxxxx"
                    }
                ]
            }
        }
    }
}'

rancher安裝期間遇到的最大問題就是一些地方未配置安全組造成的!好在最後都解決了,之後會繼續分享,rancher平臺CICD的使用,部署持久性存儲Ceph,部署Harbor、Gitlab、Nexus3等過程中遇到的問題及處理辦法~~ (^U^)ノ~YO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章