Rancher 2.4.4-K8S(rancher证书)高可用集群HA部署-online insta

安装说明:这是Rancher v2.4.4版本的在线安装文档,证书采用rancher默认生成的自签名证书,此证书有效期10年,SSL一年,到期会自动续签。

文章目录

事先准备:
一、安装kubernetes
    1、初始化环境
        1.1、关闭相关服务
        1.2、主机名设置
        1.3、内核调优
        1.4、创建用户并分发秘钥
        1.5、安装docker
    2、使用rke安装K8S集群(在第一台机器(rancher0)执行)
        2.1、安装rke/kubectl/helm
        2.2、创建rke文件
        2.3、运行rke文件
    4、测试集群
    5、检查集群状态
    6、保存配置文件
二、安装rancher
    1、安装hemlkubectl
    2、添加 Helm Chart 仓库
    3、为 Rancher 创建 Namespace
    4、选择证书
    5、安装 cert-manager
    6、根据选择的 SSL 选项,通过 Helm 安装 Rancher
    7、验证 Rancher Server 是否已成功部署

事先准备

服务器规划
服务器使用本地的EXSI,虚拟机具体配置如下:

主机名称 系统版本 内网ip 配置 功能用途
rancher01 CentOS 7.8 172.16.7.201 2C/8g/300G rancher01服务器
rancher02 CentOS 7.8 172.16.7.202 2C/8g/300G rancher02服务器
rancher03 CentOS 7.8 172.16.7.203 2C/8g/300G rancher03服务器
rancher CentOS 7.8 172.16.7.200 1C/2g/300G 负载均衡器

1. 负载均衡器

nginx,作为负载均衡使用。nginx需要有stream模块
nginx安装过程略,可参考:https://www.showdoc.com.cn/963349270507135?page_id=5826127227251464
nginx配置文件如下:

[root@rancher ~]# cat /etc/nginx/nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

stream {
    upstream rancher_servers_http {
        least_conn;
        server 172.16.7.201:80 max_fails=3 fail_timeout=5s;
        server 172.16.7.202:80 max_fails=3 fail_timeout=5s;
        server 172.16.7.203:80 max_fails=3 fail_timeout=5s;
    }
    server {
        listen 80;
        proxy_pass rancher_servers_http;
    }

    upstream rancher_servers_https {
        least_conn;
        server 172.16.7.201:443 max_fails=3 fail_timeout=5s;
        server 172.16.7.202:443 max_fails=3 fail_timeout=5s;
        server 172.16.7.203:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers_https;
    }

}

2. 各主机配置如下

各主机配置如下:
# 172.16.7.200         #负载均衡器
[root@worker-01 ~]# cat /etc/hosts

172.16.7.204  worker-01.techzsun.com
127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.200  rancher.hzsun.com


# 172.16.7.201         # rancher1
[rancher@rancher01 ~]$ cat /etc/hosts

127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.201  rancher-01.techzsun.com
172.16.7.202  rancher-02.techzsun.com
172.16.7.203  rancher-03.techzsun.com
172.16.7.200  rancher.hzsun.com

# 172.16.7.202         # rancher2
[root@rancher02 ~]# cat /etc/hosts

127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.201  rancher-01.techzsun.com
172.16.7.202  rancher-02.techzsun.com
172.16.7.203  rancher-03.techzsun.com
172.16.7.200  rancher.hzsun.com

# 172.16.7.203         # rancher3
[root@rancher03 ~]# cat /etc/hosts

127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.201  rancher-01.techzsun.com
172.16.7.202  rancher-02.techzsun.com
172.16.7.203  rancher-03.techzsun.com
172.16.7.200  rancher.hzsun.com
# 172.16.7.204        # worker1
[root@worker-01 ~]# cat /etc/hosts

172.16.7.204   worker-01.techzsun.com
127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.200  rancher.hzsun.com

worker-02,worker-03与worker-01 相同。
????三台worker主机的/etc/hosts是否也需要添加另外两台机子的IP 与 主机名 对应关系进来。?????如果局域网内没有DNS服务器,是需要。

一、安装kubernets

1、初始化环境

1.1、关闭相关服务

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

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

# 关闭selinux 
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 关闭邮件服务
systemctl stop postfix && systemctl disable postfix

1.2 主机名设置

cat > /etc/hosts << EOF
127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4
::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.7.201  rancher01
172.16.7.202  rancher02
172.16.7.203  rancher03
172.16.7.200  rancher.hzsun.com
EOF

1.3 内核调优

# 文件打开数
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

# kernel
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

1.4 安装 docker

在 rancher1,rancher2,rancher3 机器上都要安装docker。
docker安装过程略,可参考:https://www.showdoc.com.cn/557523996513244?page_id=3839601638128520

添加 国内 rancher 源 和 加速源

cat >> /etc/docker/daemon.json<<EOF
{
  "oom-score-adjust": -1000,
  "insecure-registries": ["registry.cn-hangzhou.aliyuncs.com"],
  "registry-mirrors" : ["https://dekn3ozn.mirror.aliyuncs.com"],
  "storage-driver": "overlay2",
  "storage-opts": ["overlay2.override_kernel_check=true"]
}
EOF

说明:
OOMScoreAdjust=-1000:防止docker服务OOM
registry-mirrors:公网的加速器地址,可以设置多个,地址需要添加协议头(https或者http)
storage-driver:使用OverlayFS的overlay2存储驱动。(OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定))
重启docker服务:

systemctl restart docker

1.5 创建用户并分发秘钥

# 1、在所有机器都操作创建用户rancher
useradd rancher
echo "rancher:123456" | chpasswd
usermod -aG docker rancher

# 2、在所有机器授权
[root@rancher1 ~]# vim /etc/sudoers +100
rancher ALL=(ALL)       NOPASSWD:ALL

# 3、以下在rancher1机器执行即可
su - rancher
ssh-keygen

ssh-copy-id rancher@172.16.7.201
ssh-copy-id rancher@172.16.7.202
ssh-copy-id rancher@172.16.7.203

2. 使用rke安装K8S集群

说明:在 rancher1 执行
下载 rancher 相关软件 可以使用国内源:http://mirror.cnrancher.com/

2.1 安装rke/kubectl/helm

下载rke文件并移动到/usr/sbin

[rancher@rancher01 ~]# wget https://github.com/rancher/rke/releases/download/v1.1.2/rke_linux-amd64 \
&& chmod +x rke_linux-amd64 \
&& mv rke_linux-amd64 /usr/bin/rke

安装kubectl

[rancher@rancher01 ~]# wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl \
&&  chmod +x linux-amd64-v1.18.3-kubectl \
&&  mv linux-amd64-v1.18.3-kubectl /usr/bin/kubectl

# kubectl命令补全
## CentOS需要安装bash-completion软件包
[rancher@rancher01 ~]# yum install -y bash-completion
# root 使用kubectl补全功能
[rancher@rancher01 ~]# echo 'source <(kubectl completion bash)' >> /root/.bashrc
# rancher使用kubectl补全功能
[rancher@rancher01 ~]# echo 'source <(kubectl completion bash)' >> /home/rancher/.bashrc

# 验证补全命令
退出,重新登录一下即可。命令实例示例:
# kubectl desc<TAB> no<TAB> node<TAB>

安装helm

[rancher@rancher01 ~]# wget http://rancher-mirror.cnrancher.com/helm/v3.4.1/helm-v3.4.1-linux-amd64.tar.gz \
&&   tar -zxvf helm-v3.4.1-linux-amd64.tar.gz  \
&&   cd linux-amd64 \
&&   mv helm  /usr/sbin/

2.2 创建rke文件

su - rancher
vim rancher-cluster.yml

rancher-cluster.yml内容如下:

nodes:
  - address: 172.16.7.201
    internal_address: 172.16.7.201 # 节点内网 IP
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/rancher/.ssh/id_rsa
  - address: 172.16.7.202
    internal_address: 172.16.7.202
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/rancher/.ssh/id_rsa
  - address: 172.16.7.203
    internal_address: 172.16.7.203
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/rancher/.ssh/id_rsa
services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h

# 当使用外部 TLS 终止,并且使用 ingress-nginx v0.22或以上版本时,必须。
ingress:
  provider: nginx
  options:
    use-forwarded-headers: "true"

2.3 运行rke文件

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

如何安装过程中有报错,可以重复执行此命令,重新安装。
完成后,它应该以这样一行结束: Finished building Kubernetes cluster successfully.

4 测试集群

4.1 配置环境变量

# 配置 kubectl
[rancher@rancher1 ~]$ mkdir -p /home/rancher/.kube
[rancher@rancher1 ~]$ cp kube_config_rancher-cluster.yml  $HOME/.kube/config

### 4.2 通过kubectl测试您的连接,并查看你所有节点是否处于`Ready`状态
[rancher@rancher01 ~]$ kubectl get nodes
NAME           STATUS   ROLES                      AGE   VERSION
172.16.7.201   Ready    controlplane,etcd,worker   10h   v1.17.6
172.16.7.202   Ready    controlplane,etcd,worker   10h   v1.17.6
172.16.7.203   Ready    controlplane,etcd,worker   10h   v1.17.6

5 检查集群状态

[rancher@rancher01 ~]$ kubectl get pod  --all-namespaces 
NAMESPACE     NAME                                     READY  STATUS     RESTARTS  AGE
ingress-nginx default-http-backend-67cf578fc4-5vn4f    1/1    Running    1         10h
ingress-nginx nginx-ingress-controller-8k2m2           1/1    Running    1         10h
ingress-nginx nginx-ingress-controller-tpr6v           1/1    Running    1         10h
ingress-nginx nginx-ingress-controller-zk74g           1/1    Running    1         10h
kube-system   canal-9vr2d                              2/2    Running    2         10h
kube-system   canal-gx5qd                              2/2    Running    2         10h
kube-system   canal-vkbrp                              2/2    Running    2         10h
kube-system   coredns-7c5566588d-5hn8v                 1/1    Running    1         10h
kube-system   coredns-7c5566588d-w86xx                 1/1    Running    1         10h
kube-system   coredns-autoscaler-65bfc8d47d-qzczj      1/1    Running    1         10h
kube-system   metrics-server-6b55c64f86-zlz67          1/1    Running    1         10h
kube-system   rke-coredns-addon-deploy-job-nk6r2       0/1    Completed  0         10h
kube-system   rke-ingress-controller-deploy-job-7nmkt  0/1    Completed  0         10h
kube-system   rke-metrics-addon-deploy-job-hjq6v       0/1    Completed  0         10h
kube-system   rke-network-plugin-deploy-job-5jkgp      0/1    Completed  0         10h

等待它完成,需要一点时间。
重复快速多次执行此命令,检查集群是否稳定,如果主机未优化,可能会出现查询结果不稳定的情况。
说明:
Pod 是Running或Completed状态。
STATUS 为 Running 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。
STATUS 为 Completed的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1。

6 保存配置文件

将以下文件的副本保存在安全的位置,后期将需要这些文件来维护和升级Rancher实例。
rancher-cluster.yml: RKE 集群配置文件。
kube_config_rancher-cluster.yml: 集群的Kubeconfig 文件,此文件包含用于访问集群的凭据。
rancher-cluster.rkestate: Kubernetes 集群状态文件,此文件包含用于完全访问集群的凭据。

二、安装rancher

1 安装heml和kubectl

参考:2.1 安装rke/kubectl/helm

2、添加 Helm Chart 仓库

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

3、为 Rancher 创建 Namespace

kubectl create namespace cattle-system

4、选择证书

这次选 rancher 默认生成的证书
说明:
用rancher默认产生的证书有效期是10年,rancher可以使用一年,一年后,rancher自己会续期。即:
CA 10年
SSL 1年,但过期自动续签

5、安装 cert-manager

5.1 安装 CustomResourceDefinition 资源

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

5.2 为 cert-manager 创建命名空间

kubectl create namespace cert-manager

5.3 添加 Jetstack Helm 仓库

helm repo add jetstack https://charts.jetstack.io

5.4 更新本地 Helm chart 仓库缓存

helm repo update

5.5 安装 cert-manager Helm chart

helm install \
 cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --version v0.15.0

安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:

 kubectl get pods --namespace cert-manager

等待它完成,需要一点时间。

6、根据选择的 SSL 选项,通过 Helm 安装 Rancher

方式 A:使用 Rancher 生成的自签名证书

helm install rancher rancher-stable/rancher \
 --namespace cattle-system \
 --set hostname=rancher.hzsun.com \
 --version 2.4.4

输出

 WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/rancher/.kube/config
NAME: rancher
LAST DEPLOYED: Wed Nov 25 08:17:53 2020
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.

NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued and Ingress comes up.

Check out our docs at https://rancher.com/docs/rancher/v2.x/en/

Browse to https://rancher.hzsun.com

Happy Containering!

命令很快执行完毕,需要等待较长一段时间才能访问URL。

7 验证 Rancher Server 是否已成功部署

7.1 检查 Rancher Server 是否运行成功:

kubectl -n cattle-system rollout status deploy/rancher

7.2 通过运行以下命令来检查 deployment 的状态:

[rancher@rancher01 ~]$ kubectl -n cattle-system get deploy rancher
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
rancher   3/3     3            3           6h

7.3 错误解决

本地电脑host映射后,访问:https://rancher.hzsun.com 完成登录
若出现以下错误:

解决办法:
由于我们通过 hosts 文件来添加映射,所以需要为 Agent Pod 添加主机别名(/etc/hosts):
(1)直接执行下面命令进行修改 cattle-cluster-agent

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

(2)可以直接修改YAML,再重新部署应用,也能解决。
在81行与82行之间(未添加前的行数,可能稍有差别)添加如下四行内容:

   hostAliases:
   - hostnames:
     - rancher.hzsun.com
     ip: 172.16.7.200

(3)直接执行下面命令进行修改 cattle-node-agent

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

(4)可以直接修改YAML,再重新部署应用,也能解决。
在72行与73行之间左右(未添加前的行数,可能稍有差别)添加如下四行内容:

      hostAliases:
      - hostnames:
        - rancher.hzsun.com
        ip: 172.16.7.200

8 创建user-cluster集群

8.1 配置 rancher 国内源

登录rancher
选择 “Global/settings/advanced settings 标签页中,找到 system-default-registry,编辑并输入下面内容:

registry.cn-hangzhou.aliyuncs.com

8.2 给user-cluster集群添加worker主机

worker节点安装时,需要开通的端口如下:

firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --reload

8.3 主机需配置hosts文件

把域名加入到所有主机的 /etc/hosts 文件中,

echo '172.16.7.200   rancher.hzsun.com' >> /etc/hosts

8.4 前三台worker主机添加为

etcd,Control Palne,Worker

复制命令,在各worker节点上执行。等待完成,需要好长一段时间,请耐心等待。

8.5 若出现 7.3 步中的错误

在user-cluster/system的Namespace:cattle-system下的应用cattle-cluster-agent报错如下:

解决办法:(如图)
采用 7.3步骤 的命令方法不成功,改用这种方法:
(1)选择user-cluster/system,在Namespace:cattle-system下的应用:cattle-cluster-agent右边菜单中选择:View/Edis YAML 菜单进入
(2)在81行与82行之间(未添加前的行数,可能稍有差别)添加如下四行内容

   hostAliases:
   - hostnames:
     - rancher.hzsun.com
     ip: 172.16.7.200
  • 注意格式对齐。

(3)重新部署应用即可。

其它:

1、在所有机器都操作创建用户rancher

1.1 此处的命令,等同前面的命令。

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

1.2 下面两行命令相似

echo "rancher:123456" | chpasswd

等于

echo "123456" | passwd --stdin rancher