Rancher官方中文文檔:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/
本次實驗,爲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端口
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測試:
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
安裝成功後,輸入之前配置的域名即可~
備註:
登陸後查看,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