Bootstrap

云原生系列(一)一rancher高可用部署

重要写在开头,我的教程更多是记录过程,如果你不看各类开源软件的官方文档,不对linux有所了解,我的文档对你的帮助是很有限的。

重要写在开头,我的教程更多是记录过程,如果你不看各类开源软件的官方文档,不对linux有所了解,我的文档对你的帮助是很有限的。

重要写在开头,我的教程更多是记录过程,如果你不看各类开源软件的官方文档,不对linux有所了解,我的文档对你的帮助是很有限的。

云原生系列(一)一rancher高可用部署-CSDN博客

云原生系列(二)—单节点多盘位minio部署-CSDN博客

云原生系列(三)一rancher备份-CSDN博客

云原生系列(四)—快速创建k8s生产集群-CSDN博客

云原生系列(五)—metallb安装及layer-2负载配置_metallb 安装-CSDN博客

云原生系列(六)—longhorn分布式存储部署_longhorn 存储-CSDN博客

云原生系列(七)—在k8s部署trident对接ontap的nfs存储并创建动态存储类-CSDN博客

rancher是目前市面为数不多的功能齐全且开源的k8s管理平台。

rancher官方推荐架构

下游集群,是运行你自己的应用和服务的下游 Kubernetes 集群。

如果你通过 Docker 安装了 Rancher,运行 Rancher Server 的节点应该与你的下游集群分开。

如果你需要使用 Rancher 管理下游 Kubernetes 集群,那么运行 Rancher Server 的 Kubernetes 集群也应该与下游集群分开。

rancher安装集群,我们这次依然使用rke2进行部署

运行 Rancher Management Server 的 RKE Kubernetes 集群的架构

rancher的安装架构如下

在 Kubernetes 集群中安装 Rancher,并使用四层负载均衡器,SSL 终止在 Ingress Controller 中

上述内容以及图片来自rancher官方文档

连接:架构推荐 | Rancher

环境规划:

操作系统:ubuntu22.04

网关:10.10.109.1

主机名ip地址配置角色
rancher0110.10.109.23/248C/16G/100G/master01、etcd01、worker01
rancher02  10.10.109.24/248C/16G/100G/master02、etcd02、worker02
rancher0310.10.109.25/248C/16G/100G/master03、etcd03、worker03
rancher-lb0110.10.109.21/24

VIP

10.10.109.20/24

2C/2G/100G负载均衡
rancher-lb0210.10.109.22/242C/2G/100G

环境准备

按照表里修改主机名(所有主机执行)

hostnamectl set-hostname 主机名

更新系统(所有主机执行)

apt update && apt upgrade -y

所有主机关闭防火墙

systemctl stop ufw && systemctl disable ufw

rancher三个节点执行

apt install net-tools curl telnet wget vim ntpdate ipvsadm -y
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
cat <<EOF >>  /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.conf

lb的两个节点执行

apt install net-tools curl telnet wget vim ntpdate nginx keepalived -y

负载均衡配置

rancher-lb01执行

编辑keepalived配置文件

vi /etc/keepalived/keepalived.conf 

配置文件内容如下

vrrp_instance VI_20 {
    state MASTER # 在备机服务器上设置为 BACKUP
    interface ens192 # 例如ens192,具体看网卡信息
    virtual_router_id 20
    priority 100 # 在备机上设置为 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass WCbgfFuU6pdSzzd8 #vrrp验证密码
    }
    virtual_ipaddress {
        10.10.109.20/24 # 你的虚拟IP地址
    }
}

保存配置文件

rancher-lb02执行

vi /etc/keepalived/keepalived.conf 

配置文件内容如下 

vrrp_instance VI_20 {
    state BACKUP # 在备机服务器上设置为 BACKUP
    interface ens192 # 例如ens192,具体看网卡信息
    virtual_router_id 20
    priority 99 # 在备机上设置为 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass WCbgfFuU6pdSzzd8 #vrrp验证密码
    }
    virtual_ipaddress {
        10.10.109.20/24 # 你的虚拟IP地址
    }
}

 保存配置文件

rancher-lb01和rancher-lb02执行

systemctl enable keepalived
systemctl restart keepalived

rancher-lb01和rancher-lb02配置nginx转发

创建配置文件目录(rancher-lb01和rancher-lb02在执行)

mkdir -p /etc/nginx/stream.conf.d  

编写配置文件(rancher-lb01和rancher-lb02在执行)

mkdir -p vi /etc/nginx/stream.conf.d
vi /etc/nginx/stream.conf.d/load_balancer.conf 
upstream kubernetes_api {
        server 10.10.109.20:6443 max_fails=3 fail_timeout=30s;
    }
upstream rke2 {
        server 10.10.109.20:9345 max_fails=3 fail_timeout=30s;
    }
server {
        listen 6443;
        proxy_pass kubernetes_api;
    }
server {
        listen 9345;
        proxy_pass rke2;
    }

保存配置文件(rancher-lb01和rancher-lb02在执行)

 配置nginx.conf 调用转发(rancher-lb01和rancher-lb02在执行)

vi /etc/nginx/nginx.conf

在http块配置后面加上如下代码,放在配置文件最后面也行(rancher-lb01和rancher-lb02在执行)

stream {
    include /etc/nginx/stream.conf.d/load_balancer.conf;
}

重启nginx并设置开机自动启动(rancher-lb01和rancher-lb02在执行)

systemctl restart nginx
systemctl enable nginx

rancher01、rancher02、rancher03主机开始配置rke2的k8s集群

创建rke2配置目录(rancher01、rancher02、rancher03执行)

mkdir -p /etc/rancher/rke2/

设置环境变量(rancher01、rancher02、rancher03执行)

cat >> /etc/profile << EOF
export PATH=/var/lib/rancher/rke2/bin:$PATH
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
EOF
 
source /etc/profile

 新建配置文件(rancher01执行)

vim /etc/rancher/rke2/config.yaml

配置文件内容如下

token: "6B4ZCLxBtYMdsPdKxPN4yAEy2Wax1txu"    #这里自己生成一个随机的字段
tls-san:
  - "10.10.109.20" #这里填写负载均衡ip                  
cni: "calico"    #使用calico网络插件

安装rke2(rancher01、rancher02、rancher03执行)

curl -sfL https://get.rke2.io | sh -     #这个地址有时候不通,不通的话就用下面的地址
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -   #中国用户最佳选择安装方式

 rancher01节点开始初始化

systemctl enable rke2-server.service
systemctl start rke2-server.service

 初始化完成后修改rancher01的配置文件

vim /etc/rancher/rke2/config.yaml

内容如下 

token: "6B4ZCLxBtYMdsPdKxPN4yAEy2Wax1txu"    #tonken不能动
tls-san:
  - "10.10.109.20"                   
server: "https://10.10.109.20:9345"
cni: "calico"

 重启rancher01节点的服务并设置开机自动启动

systemctl restart rke2-server.service

使用命令可以看到当前集群运行状态

kubectl get nodes

效果如图

 rancher02和rancher03加入集群

编辑配置文件(rancher02和rancher03执行)

vim /etc/rancher/rke2/config.yaml

 配置内容如下

token: "6B4ZCLxBtYMdsPdKxPN4yAEy2Wax1txu"   #token要与第一个节点一致
tls-san:
  - "10.10.109.20"                   
server: "https://10.10.109.20:9345"
cni: "calico"

设置rke2开机自启以及加入集群

systemctl enable rke2-server.service
systemctl start rke2-server.service

等待节点加入完成后,任一节点执行命令

kubectl get nodes

如图所示

集群已经部署完成,接下来安装helm3

下载helm(rancher01、rancher02、rancher03执行)

wget https://get.helm.sh/helm-v3.14.3-linux-amd64.tar.gz

 解压helm的包并cp到对应目录(rancher01、rancher02、rancher03执行)

tar -zxvf helm-v3.14.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

helm3已经安装完成,测试命令

helm version

如图所示 

通过helm安装rancher(rancher01、rancher02、rancher03任何一个节点执行即可)

添加helm仓库

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

helm repo update

 创建命名空间

kubectl create namespace cert-manager
kubectl create namespace cattle-system
wget https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.crds.yaml
#这一步有时候会无法直接下载,可以在电脑浏览器打开这个连接进行下载,然后上传到服务器
 kubectl apply -f cert-manager.crds.yaml
helm install cert-manager --namespace cert-manager --version v1.14.4 jetstack/cert-manager

 这里需要自己设定一个域名

helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=指定一个域名 \   

安装完成如图所示

 因为是rke2创建的k8s集群并安装rancher

自动会生成rancher的ingress配置

使用命令可查看ingress配置

kubectl get ingress -A

如图所示

修改负载均衡器配置(rancher-lb01和rancher-lb02执行)

vi /etc/nginx/stream.conf.d/load_balancer.conf

内容修改如下

upstream kubernetes_api {
        server 10.10.109.23:6443 max_fails=3 fail_timeout=30s;
        server 10.10.109.24:6443 max_fails=3 fail_timeout=30s;
        server 10.10.109.25:6443 max_fails=3 fail_timeout=30s;
    }
upstream rke2 {
        server 10.10.109.23:9345 max_fails=3 fail_timeout=30s;
        server 10.10.109.24:9345 max_fails=3 fail_timeout=30s;
        server 10.10.109.25:9345 max_fails=3 fail_timeout=30s;
    }
upstream rancherhttps {
        server 10.10.109.23:443 max_fails=3 fail_timeout=30s;
        server 10.10.109.24:443 max_fails=3 fail_timeout=30s;
        server 10.10.109.25:443 max_fails=3 fail_timeout=30s;
    }
upstream rancherhttp {
        server 10.10.109.23:80 max_fails=3 fail_timeout=30s;
        server 10.10.109.24:80 max_fails=3 fail_timeout=30s;
        server 10.10.109.25:80 max_fails=3 fail_timeout=30s;
    }
server {
        listen 6443;
        proxy_pass kubernetes_api;
    }
server {
        listen 9345;
        proxy_pass rke2;
    }
server {
        listen 443;
        proxy_pass rancherhttps;
    }
server {
        listen 80;
        proxy_pass rancherhttp;
    }
vi /etc/nginx/nginx.conf

 注释掉下面两行配置

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

重启nginx

systemctl restart nginx

如果你有dns服务器,只需要将安装rancher时指定的域名(通过helm安装rancher)这一步,把对应的域名解析到你的dns服务器即可,注意,域名解析的ip是你负载均衡器的ip地址。如果没有,在你的电脑的hosts文件写入特定解析也可以;

我是在电脑里面写入hosts的。

10.10.109.20 rancher2.XXXX.com

接着浏览器打开域名,注意这里是要用https打开

 

复制框子里的内容,到rancher01、rancher02、rancher03任何一个节点运行,即可获取初始密码。

至此,开始rancher的使用吧。enjoy

;