最新版本容器編排工具rancher-v2.3.3的HA高可用部署


一、准備工作

1.1 操作系統版本

CentOS Linux release 7.6.1810 (Core)

1.2 節點信息

節點名稱 ip 安裝組件
node1 192.168.1.156 etcd, docker, k8s
node2 192.168.1.167 etcd, docker, k8s
node3 192.168.1.168 etcd, docker, k8s
nginx 192.168.1.178 nginx

 

1.3 軟件版本

  • rancher-2.3.3

  • kubernetes-1.13.5

  • rke-v0.2.2

  • kubectl-v1.13.5

  • helm-v2.13.1

  • tiller-v2.13.1

1.4 軟件准備

本次部署的包都放在百度網盤,下載之后部署,以保證部署過程的流暢。

鏈接:https://pan.baidu.com/s/1vIOU3LPRcCNyfxam4j7Y9g 提取碼:zwuj

1.5 架構示意圖

 

 

二、初始化環境

初始化操作在3台node節點都要執行。

2.1 關閉相關服務

1、關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

 

2、關閉selinux

$ sudo setenforce 0
$ grep SELINUX /etc/selinux/config
SELINUX=disabled

3、關閉swap

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

2.2 設置主機名

1、修改主機名,然后重新登陸

$ sudo hostnamectl set-hostname node1
$ sudo hostnamectl set-hostname node2
$ sudo hostnamectl set-hostname node3

 

2、設置主機名保存在/etc/hosts文件中

$ cat > /etc/hosts << EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.156 node1
192.168.1.167 node2
192.168.1.168 node3
EOF

 

2.3 操作系統內核參數調整

1、修改文件打開數

echo -e  "root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n"     >> /etc/security/limits.conf
sed -i 's#4096#65535#g' /etc/security/limits.d/20-nproc.conf

2、內核其他參數

cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
vm.swappiness=0
vm.max_map_count=655360
EOF

 

2.4 安裝基礎軟件

yum -y install wget ntpdate lrzsz curl yum-utils device-mapper-persistent-data lvm2 bash-completion && ntpdate -u cn.pool.ntp.org

2.5 創建用戶及免密登陸

1、創建用戶並添加到docker組

groupadd docker
useradd rancher -G docker
echo "123456" | passwd --stdin rancher

這一步非常重要,如果沒有操作,則后邊可能會有報錯等問題。

2、設置ssh免密登錄

node1服務器上執行下面的命令:

su - rancher
ssh-keygen
ssh-copy-id rancher@192.168.1.156
ssh-copy-id rancher@192.168.1.167
ssh-copy-id rancher@192.168.1.168

說明:

通過授權node1主機對三台主機的免密碼登陸,為后邊安裝k8s的步驟做好准備工作。

 

三、部署過程

3.1 安裝docker

需要在三台主機上一起安裝docker。

rke工具目前只支持docker v17.03.2,請務必保持版本一致,否則后續安裝會報錯。

1、安裝repo源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、卸載舊docker版本

yum remove -y docker \
            docker-client \
            docker-client-latest \
            docker-common \
            docker-latest \
            docker-latest-logrotate \
            docker-logrotate \
            docker-selinux \
            docker-engine-selinux \
            docker-engine \
            container*

3、安裝docker-ce-17.03.2

yum -y install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos

4、啟動docker

$ systemctl enable docker
$ systemctl start docker
$ systemctl status docker

 

5、添加國內加速代理

cat > /etc/docker/daemon.json << EOF
{
 "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://kw88y6eh.mirror.aliyuncs.com"],
 "insecure-registries":["192.168.1.153"],
   "storage-driver": "overlay2",
   "storage-opts": [
   "overlay2.override_kernel_check=true"
  ]
}
EOF
  • registry-mirrors:表示公網的加速器地址,可設置多個,地址需要添加協議頭(https或者http)

  • insecure-registries:表示內網的私服地址,地址不能添加協議頭(http)

  • storage-driver:表示使用OverlayFS的overlay2存儲驅動。

 

6、重啟docker

systemctl daemon-reload
systemctl restart docker

3.2 安裝nginx

在192.168.1.178機器上安裝nginx,用於rancher-server負載均衡。

1、安裝nginx軟件

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
sudo systemctl enable nginx.service

 

2、修改nginx配置文件

user nginx;
worker_processes 4;
worker_rlimit_nofile 40000;
events {
  worker_connections 8192;
}
http {
   # Gzip Settings
  gzip on;
  gzip_disable "msie6";
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  gzip_vary on;
  gzip_static on;
  gzip_proxied any;
  gzip_min_length 0;
  gzip_comp_level 8;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml application/font-woff text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobjectfont/woff2 image/x-icon image/png image/jpeg;
  server {
      listen         80;
      return 301 https://$host$request_uri;
  }
}
stream {
  upstream rancher_servers {
      least_conn;
      server 192.168.1.156:443 max_fails=3 fail_timeout=5s;
      server 192.168.1.167:443 max_fails=3 fail_timeout=5s;
      server 192.168.1.168:443 max_fails=3 fail_timeout=5s;
  }
  server {
      listen     443;
      proxy_pass rancher_servers;
  }
}

 

3、啟動nginx

sudo systemctl restart nginx.service

 

3.3 Rancher集群部署

3.3.1、安裝必要工具

以下操作只在192.168.1.156(即node1節點)上執行即可。

1、安裝rke

su - root
wget https://www.cnrancher.com/download/rke/rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/bin/rke

2、安裝kubectl

wget https://www.cnrancher.com/download/kubectl/kubectl_amd64-linux
chmod +x kubectl_amd64-linux
mv kubectl_amd64-linux /usr/bin/kubectl

 

3、安裝helm

wget https://www.cnrancher.com/download/helm/helm-linux.tar.gz
tar xf helm-linux.tar.gz
mv linux-amd64/helm /usr/bin/helm
mv linux-amd64/tiller /usr/bin/tiller
rm -rf helm-linux.tar.gz linux-amd64/

其他工具下載地址:

https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/download/

 

3.3.2 安裝k8s

1、切換到rancher用戶

su - rancher

注意:必須使用普通用戶操作,否則后邊的操作會報下面的錯誤

Please check if the configured user can execute `docker ps` on the node, and if the SSH server version is at least version 6.7 or higher. If youare using RedHat/CentOS, you can't use the user `root`. Please refer to the documentation for more instructions. Error: ssh: rejected: administratively prohibited (open failed)

2、創建rancher集群配置文件

cat > rancher-cluster.yml << EOF
nodes:
 - address: 192.168.1.156
  user: rancher
  role: [controlplane,worker,etcd]
 - address: 192.168.1.167
  user: rancher
  role: [controlplane,worker,etcd]
 - address: 192.168.1.168
  user: rancher
  role: [controlplane,worker,etcd]
services:
etcd:
  snapshot: true
  creation: 6h
  retention: 24h
EOF

參數說明:

  • address:公共域名或IP地址

  • user:可以運行docker命令的用戶,需要是普通用戶。

  • role:分配給節點的Kubernetes角色列表

  • ssh_key_path:用於對節點進行身份驗證的SSH私鑰的路徑(默認為~/.ssh/id_rsa)

 

3、啟動集群

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

完成后,它應顯示:Finished building Kubernetes cluster successfully。 並且已經創建了一個文件kube_config_rancher-cluster.yml。這個文件包含kubectl和helm訪問K8S的憑據。

4、配置環境變量

切找到root用戶

su - root
vi /etc/profile
export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml

保存,並執行使配置生效:

source /etc/profile

保存kube_config_rancher-cluster.ymlrancher-cluster.yml文件的副本,后期維護和升級Rancher實例時將會用到。

 

5、通過kubectl測試您的連接,並查看您的所有節點是否處於Ready狀態

先配置一下kubectl的命令補全功能。

$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ source ~/.bashrc
$ su - rancher
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ source ~/.bashrc

然后查看節點狀態

[root@node1 ~]$ su - rancher
[rancher@node1 ~]$ kubectl get node
NAME           STATUS   ROLES                     AGE   VERSION
192.168.111.3   Ready   controlplane,etcd,worker   10m   v1.13.5
192.168.111.4   Ready   controlplane,etcd,worker   10m   v1.13.5
192.168.111.5   Ready   controlplane,etcd,worker   10m   v1.13.5

由於需要聯網下載docker鏡像文件,所以需要一段時間才能安裝好,10-30分鍾左右。

 

6、檢查集群Pod的運行狀況

[rancher@node1 ~]$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                     READY   STATUS     RESTARTS   AGE
ingress-nginx   default-http-backend-78fccfc5d9-j8v5h     1/1     Running     0         9m45s
ingress-nginx   nginx-ingress-controller-cpb9t            1/1     Running     0         9m16s
ingress-nginx   nginx-ingress-controller-fzcdl            1/1     Running     0         9m16s
ingress-nginx   nginx-ingress-controller-n2f5b            1/1     Running     0         9m36s
kube-system     canal-9vzxn                               2/2     Running     0         9m59s
kube-system     canal-p8t59                               2/2     Running     0         9m59s
kube-system     canal-v8nhz                               2/2     Running     0         9m59s
kube-system     kube-dns-58bd5b8dd7-dp8nk                 3/3     Running     0         9m55s
kube-system     kube-dns-autoscaler-77bc5fd84-t2jht       1/1     Running     0         9m54s
kube-system     metrics-server-58bd5dd8d7-pr6nh           1/1     Running     0         9m50s
kube-system     rke-ingress-controller-deploy-job-qh82s   0/1     Completed   0         9m46s
kube-system     rke-kube-dns-addon-deploy-job-g95sp       0/1     Completed   0         9m56s
kube-system     rke-metrics-addon-deploy-job-mmk57        0/1     Completed   0         9m51s
kube-system     rke-network-plugin-deploy-job-b75ds       0/1     Completed   0         10m

保存kube_config_rancher-cluster.yml和rancher-cluster.yml文件的副本,以后將需要這些文件來維護和升級Rancher實例。

 

3.3.3 Helm

Helm有兩個部分:Helm客戶端(helm)和Helm服務端(Tiller)。

使用Helm在集群上安裝tiller服務以管理charts,由於RKE默認啟用RBAC, 因此我們需要使用kubectl來創建一個serviceaccount,clusterrolebinding才能讓tiller具有部署到集群的權限。

1、在kube-system命名空間中創建ServiceAccount:

kubectl -n kube-system create serviceaccount tiller

2、創建ClusterRoleBinding以授予tiller帳戶對集群的訪問權限:

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

3、安裝Helm Server(Tiller)

helm init --service-account tiller   --tiller-image registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

4、安裝Tiller金絲雀版本

helm init --service-account tiller --canary-image

需要修改成國內鏡像(可能需要delete再重新init)

kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1

3.3.4 helm安裝rancher

1、添加Chart倉庫地址

使用helm repo add命令添加Rancher chart倉庫地址,訪問Rancher tag和Chart版本 替換為您要使用的Helm倉庫分支(即latest或stable)。

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

2、安裝證書管理器

  • 1、只有Rancher自動生成的證書和LetsEncrypt頒發的證書才需要cert-manager。如果是你自己的證書,可使用ingress.tls.source=secret參數指定證書,並跳過此步驟。

helm install stable/cert-manager \
--name cert-manager \
--namespace kube-system
  • 2、Rancher自動生成證書

默認情況下,Rancher會自動生成CA根證書並使用cert-manager頒發證書以訪問Rancher server界面。

唯一的要求是將hostname配置為訪問Rancher的域名地址,使用這種SSL證書配置方式需提前安裝證書管理器。

helm install rancher-stable/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=rancher.com

rancher.com就是后面訪問rancher的域名,需要在/etc/hosts文件中添加關聯(所有主機):

[root@node1 ~]$ echo "192.168.1.178 rancher.com" >> /etc/hosts
[root@node2 ~]$ echo "192.168.1.178 rancher.com" >> /etc/hosts
[root@node3 ~]$ echo "192.168.1.178 rancher.com" >> /etc/hosts
[root@nginx ~]$ echo "192.168.1.178 rancher.com" >> /etc/hosts

由於我們通過hosts文件來添加映射,所以需要為Agent Pod添加主機別名(/etc/hosts):

kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
  "spec": {
      "template": {
          "spec": {
              "hostAliases": [
                  {
                      "hostnames":
                      [
                          "rancher.com"
                      ],
                          "ip": "192.168.1.178"
                  }
              ]
          }
      }
  }
}'

這一步如果馬上執行,可能會報錯:Error from server (NotFound): deployments.extensions "cattle-cluster-agent" not found,這個deployment是上一步install時創建的,比較慢,耐心等待一下,這個時候也可以先跳過這里,去到后邊,簡單配置一下,訪問一下rancher的界面。

kubectl -n cattle-system patch  daemonsets cattle-node-agent --patch '{
  "spec": {
      "template": {
          "spec": {
              "hostAliases": [
                  {
                      "hostnames":
                      [
                          "rancher.com"
                      ],
                          "ip": "192.168.1.178"
                  }
              ]
          }
      }
  }
}'

3.3.5 登錄rancher管理端

  • 1、同樣將剛剛的域名映射關系寫入到Windows主機的hosts文件。

192.168.1.178 rancher.com

輸入:admin/admin,進入首頁界面。

報這個問題的原因就是剛剛創建的cattle-cluster-agent還沒有被創建成功,同樣耐心等待即可。這個時候可以隨便點點看看先。這個過程與自己的網絡有關,這時也可以在node1主機上,通過如下命令進行一個監控。

[rancher@node1 ~]$ kubectl get -n cattle-system pod -w
NAME                     READY   STATUS   RESTARTS   AGE
rancher-bdf49fb9-7qhgp   1/1     Running   1         12m
rancher-bdf49fb9-hf6tm   1/1     Running   0         12m
rancher-bdf49fb9-xmbv7   1/1     Running   1         12m
cattle-cluster-agent-7b54db4bc8-r4blg   0/1   Pending   0     0s
cattle-cluster-agent-7b54db4bc8-r4blg   0/1   Pending   0     0s
cattle-cluster-agent-7b54db4bc8-r4blg   0/1   ContainerCreating   0     0s
cattle-node-agent-mskmb   0/1   Pending   0     0s
cattle-node-agent-2cmww   0/1   Pending   0     0s
cattle-node-agent-kkpvn   0/1   Pending   0     0s
cattle-node-agent-mskmb   0/1   ContainerCreating   0     0s
cattle-node-agent-kkpvn   0/1   ContainerCreating   0     0s
cattle-node-agent-2cmww   0/1   ContainerCreating   0     0s

在我這里,等了十分鍾左右,才開始正式的部署。這個時候,可以返回到上邊,將那兩條命令導入進去。操作之后,然后再看rancher,就不會報連接問題了。

到這里,基本上安裝步驟也就完成了。

 

 

四、高可用測試

1、關閉node1節點

[root@node1 ~]# init 0 

2、觀察rancher的訪問 從下圖所我們可以看到,rancher依然可以正常訪問,從而實現高可用目的。

 

 

 

五、排錯

1、在執行rke up --config ./rancher-cluster.yml報認證失敗

 

解決方法:

docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \
      /etc/cni \
      /etc/kubernetes \
      /opt/cni \
      /opt/rke \
      /run/secrets/kubernetes.io \
      /run/calico \
      /run/flannel \
      /var/lib/calico \
      /var/lib/etcd \
      /var/lib/cni \
      /var/lib/kubelet \
      /var/lib/rancher/rke/log \
      /var/log/containers \
      /var/log/pods \
      /var/run/calico

 

六、引用

1、http://www.eryajf.net/2723.html

2、https://docs.rancher.cn/rancher2x/


免責聲明!

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



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