溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Rancher(1),Rancher 2.x 生產(chǎn)環(huán)境HA(高可用)部署K8S

發(fā)布時間:2020-06-07 09:21:43 來源:網(wǎng)絡(luò) 閱讀:2414 作者:槑槑的嫑嫑 欄目:云計(jì)算

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

Rancher(1),Rancher 2.x 生產(chǎn)環(huán)境HA(高可用)部署K8S

本次實(shí)驗(yàn),為Ranche七層負(fù)載均衡Helm HA部署

一、環(huán)境準(zhǔn)備

1、服務(wù)器配置

服務(wù)器使用騰訊云的虛擬機(jī)具體配置如下:

主機(jī)名稱 系統(tǒng)版本 內(nèi)網(wǎng)ip 公網(wǎng)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層負(fù)載均衡,需要一個LB,這里使用騰訊云的云負(fù)載均衡(實(shí)驗(yàn)環(huán)境可以使用nginx)

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

(2) 關(guān)閉selinux:

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

(3) 測試環(huán)境關(guān)閉防火墻或者開啟相應(yīng)端口,參考https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/references/

填坑備注:這里我的內(nèi)網(wǎng)是全部開了的,然而部署的時候有報錯,需要開放對應(yīng)端口讓服務(wù)器的公網(wǎng)ip可以訪問~(居然不走內(nèi)網(wǎng)ip,不知道是什么情況~)

2、Docker安裝及配置

正常安裝Docker,唯一注意的地方是:因?yàn)镃entOS的安全限制,通過RKE安裝K8S集群時候無法使用root賬戶。CentOS用戶使用非root用戶來運(yùn)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
# 為新用戶設(shè)置密碼
sudo passwd $NEW_USER
# 為新用戶添加sudo權(quán)限
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: 安裝必要的一些系統(tǒng)工具
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};
# 如果已經(jīng)安裝高版本Docker,可進(jìn)行降級安裝(可選)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把當(dāng)前用戶加入docker組
sudo usermod -aG docker $NEW_USER;
# 設(shè)置開機(jī)啟動
sudo systemctl enable docker;

(3) 修改Docker配置

daemon.json默認(rèn)位于/etc/docker/daemon.json,如果沒有可手動創(chuàng)建,基于systemd管理的系統(tǒng)都是相同的路徑。通過修改daemon.json來改過Docker配置,也是Docker官方推薦的方法。

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

2、配置存儲驅(qū)動
OverlayFS是一個新一代的聯(lián)合文件系統(tǒng),類似于AUFS,但速度更快,實(shí)現(xiàn)更簡單。Docker為OverlayFS提供了兩個存儲驅(qū)動程序:舊版的overlay,新版的overlay2(更穩(wěn)定)。

先決條件:

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

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

3、配置日志驅(qū)動
容器在運(yùn)行時會產(chǎn)生大量日志文件,很容易占滿磁盤空間。通過配置日志驅(qū)動來限制文件大小與文件的數(shù)量。 >限制單個日志文件為50M,最多產(chǎn)生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安裝程序,支持在裸機(jī)和虛擬化服務(wù)器上安裝Kubernetes。 RKE解決了Kubernettes社區(qū)中的一個常見問題,比如:安裝復(fù)雜性。RKE支持多種平臺運(yùn)行,比如MacOS,linux,windows。
這里在master1上安裝rke:

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

2、運(yùn)行一下命令測試:

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

4、安裝kubectl

kubectl是一個CLI命令行工具,用于運(yùn)行Kubernetes集群的命令。Rancher 2.x中的許多維護(hù)和管理都需要它。
這里在master1上安裝kubectl:

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

2、確保kubectl二進(jìn)制文件是可執(zhí)行文件。

chmod +x ./kubectl

3、將kubectl二進(jìn)制文件移動到PATH路徑下。

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

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

可以將此文件復(fù)制到$HOME/.kube/config


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

4、配置kubectl的shell補(bǔ)全

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

yum install bash-completion -y

運(yùn)行source <(kubectl completion bash)可將kubectl自動補(bǔ)全添加到當(dāng)前shell,要使kubectl自動補(bǔ)全命令自動加載:

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

二、安裝

1、配置負(fù)載均衡器

使用騰訊***云負(fù)載均衡,導(dǎo)入域名ssl證書(此處的域名須有后面配置訪問域名一致,我使用的是免費(fèi)一年的ssl證書?(^?^)),把10443端口綁定到master1,master2,master3的80端口即可~
備注:需要開通對應(yīng)的安全規(guī)則,即負(fù)載均衡的ip能訪問master1、2、3的80端口
Rancher(1),Rancher 2.x 生產(chǎn)環(huán)境HA(高可用)部署K8S

2、RKE安裝K8S

(1) 在master1上創(chuàng)建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 可以運(yùn)行docker命令的用戶
role 分配給節(jié)點(diǎn)的Kubernetes角色列表
internal_address 內(nèi)部集群通信的私有域名或IP地址
開啟了etcd的備份機(jī)制,每隔6小時備份一次,保存60天數(shù)據(jù)

(2) 創(chuàng)建K8S集群及測試

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

完成后,會創(chuàng)建一個文件kube_config_rancher-cluster.yml。這個文件包含kubectl和helm訪問K8S的憑據(jù)??梢詫⒋宋募?fù)制到$HOME/.kube/config,或者如果您正在使用多個Kubernetes集群,請將KUBECONFIG環(huán)境變量設(shè)置為kube_config_rancher-cluster.yml文件路徑。

備注:保存好kube_config_rancher-cluster.yml和rancher-cluster.yml,之后的維護(hù)和升級需要用到!

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

使用kubectl get nodes測試:

Rancher(1),Rancher 2.x 生產(chǎn)環(huán)境HA(高可用)部署K8S

3、安裝和配置Helm

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

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

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

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命名空間中創(chuàng)建ServiceAccount;創(chuàng)建ClusterRoleBinding以授予tiller帳戶對集群的訪問權(quán)限;helm初始化tiller服務(wù)

(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在解壓后的目錄中找到二進(jìn)制文件,并將其移動到所需的位置
mv linux-amd64/helm /usr/local/bin/helm && chmod +x /usr/local/bin/helm

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

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

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

4、Helm安裝Rancher

(1) 添加Chart倉庫地址

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

(2) 配置SSL并安裝Rancher Server

SSL證書使用騰訊云提供的一年免費(fèi)證書,自簽名證書參考官網(wǎng)

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(1),Rancher 2.x 生產(chǎn)環(huán)境HA(高可用)部署K8S

備注:
登陸后查看,system空間,若cattle-cluster-agent Pod和cattle-node-agent無法正常運(yùn)行,需要為其添加主機(jī)別名:

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI