您好,登錄后才能下訂單哦!
Rancher官方中文文檔:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/
本次實驗,為Ranche七層負載均衡Helm HA部署
服務器使用騰訊云的虛擬機具體配置如下:
主機名稱 | 系統版本 | 內網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,不知道是什么情況~)
正常安裝Docker,唯一注意的地方是:因為CentOS的安全限制,通過RKE安裝K8S集群時候無法使用root賬戶。CentOS用戶使用非root用戶來運docker。
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
# 定義用戶名
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;
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"
}
}
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
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
使用騰訊***云負載均衡,導入域名ssl證書(此處的域名須有后面配置訪問域名一致,我使用的是免費一年的ssl證書?(^?^)),把10443端口綁定到master1,master2,master3的80端口即可~
備注:需要開通對應的安全規則,即負載均衡的ip能訪問master1、2、3的80端口
#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天數據
#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測試:
Helm是Kubernetes首選的包管理工具。Helmcharts為Kubernetes YAML清單文檔提供模板語法。使用Helm,可以創建可配置的部署,而不僅僅是使用靜態文件。Helm有兩個部分:Helm客戶端(helm)和Helm服務端(Tiller)。
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服務
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
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更新索引。
helm repo add rancher-stable \
https://releases.rancher.com/server-charts/stable
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。