RKE搭建k8s集群&Helm3部署Rancher高可用 – 记忆角落

RKE搭建k8s集群&Helm3部署Rancher高可用

/ 1评 / 0

RKE搭建k8s集群&Helm3部署Rancher高可用

此次是:RKE的方式快速部署K8S集群(https://199604.com/2400)的进一步文章

运行环境

机器需要满足以下几个条件:

  1. 一台或多台机器,操作系统CentOS7.x-86_64(个人选择CentOS7.9)
  2. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  3. 集群中所有机器之间网络互通
  4. 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  5. 禁止swap分区,可参考之前二进制部署k8s的前提环境

服务器整体规划

名称 IP 组件
srs103 10.80.210.103 controlplane、worker、etcd、rancher、rke、kubectl
srs104 10.80.210.104 controlplane、worker、etcd
srs105 10.80.210.105 controlplane、worker、etcd

软件环境

软件 版本
docker 20.10.18
操作系统 centos 7.9

初始化环境准备

所有机器执行

#根据规划设置主机名
hostnamectl set-hostname <hostname> #分别设置为 srs103、srs104、srs105
hostname #确认是否配置生效

# 关闭防火墙 如果是minimal安装,默认没有装 firewalld
systemctl stop firewalld
systemctl disable firewalld

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

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

#文件数设置
ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF

#在master添加hosts
cat >> /etc/hosts << EOF
10.80.210.103 srs103
10.80.210.104 srs104
10.80.210.105 srs105
EOF


#将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式【重要】
net.bridge.bridge-nf-call-iptables=1
#开启网桥模式【重要】
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
# 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.swappiness=0
# 不检查物理内存是否够用
vm.overcommit_memory=1
# 开启 OOM
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
#关闭ipv6【重要】
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

# 加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否成功加载
lsmod | grep br_netfilter
# 重新刷新配置
sysctl -p /etc/sysctl.d/k8s.conf


#时间同步
yum install ntpdate -y
ntpdate time.windows.com
#或者配置crontab执行:
`crontab -e`
0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com

echo "0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com" >> /var/spool/cron/root

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

安装Docker

步骤忽略:参考之前自己的部署笔记

Docker:https://199604.com/2011

Docker-compose(不需要可忽略):https://199604.com/2039

添加创建普通用户

为了安全起见,能不使用 root 账号操作就不使用,因此要添加专用的账号进行 docker 操作。

需要在每个节点重复该操作添加账号

创建 rancher 用户,添加到 docker 组

useradd rancher

usermod -aG docker rancher

passwd rancher

RKE所在主机上创建密钥

RKE所在主机srs103创建ssh-key,执行

#生成的密钥
ssh-keygen

#将所生成的密钥的公钥分发到各个节点
ssh-copy-id rancher@srs103
ssh-copy-id rancher@srs104
ssh-copy-id rancher@srs105

重启每台机器

最好重启一下机器。以免带来不必要的麻烦(如果无法重启,可忽略)

RKE工具下载

srs101服务器执行

具体最新版本可看github

curl -L "https://github.com/rancher/rke/releases/download/v1.3.14/rke_linux-amd64" -o /usr/local/bin/rke
chmod +x /usr/local/bin/rke
ln -s /usr/local/bin/rke /usr/bin/rke
rke -v
#rke version v1.3.14

初始化配置文件(编写配置文件)

srs101服务器执行

编写rancher-cluster.yml(执行服务器ip:X.X.140.17 ):

nodes:
  - address: 10.80.210.103
    internal_address: 10.80.210.103
    user: rancher
    role: [controlplane,worker,etcd]
    docker_socket: /var/run/docker.sock
    ssh_key_path: ~/.ssh/id_rsa
  - address: 10.80.210.104
    internal_address: 10.80.210.104
    user: rancher
    role: [controlplane,worker,etcd]
    docker_socket: /var/run/docker.sock
    ssh_key_path: ~/.ssh/id_rsa
  - address: 10.80.210.105
    internal_address: 10.80.210.105
    user: rancher
    role: [controlplane,worker,etcd]
    docker_socket: /var/run/docker.sock
    ssh_key_path: ~/.ssh/id_rsa

services:
  etcd:
    backup_config:
      # 设置true启用ETCD自动备份,设置false禁用
      enabled: true
      # 快照创建间隔时间,单位小时
      interval_hours: 6
      # 快照保留天数(以天为单位)
      retention: 30
  kubelet:
    extra_args:
      max-pods: "250"
kubernetes_version: v1.24.4-rancher1-1

请参考RKE 版本说明,获取您当前使用的 RKE 支持的 Kubernetes 版本号。

也可以输入:rke config --list-version --all,快速获取支持的版本号

部署集群

执行命令

srs101服务器执行

rke up

# rke up
.....
INFO[0699] [ingress] ingress controller nginx deployed successfully
INFO[0699] [addons] Setting up user addons
INFO[0699] [addons] no user addons defined
INFO[0699] Finished building Kubernetes cluster successfully

如果报错则进一步排查。可以往下拉错误集那有没有和我遇到的错误一致

执行成功后当前目录下将会多出以下文件

[root@srs103 rancher]# tree
.
├── kube_config_rancher-cluster.yml
├── rancher-cluster.rkestate
└── rancher-cluster.yml

使用kubectl命令查看集群

srs101服务器执行

下载kubectl命令工具

kubectl版本需要与k8s版本一致

curl -L "https://storage.googleapis.com/kubernetes-release/release/v1.24.4/bin/linux/amd64/kubectl" -o /usr/local/bin/kubectl
chmod +x /usr/local/bin/kubectl
ln -s /usr/local/bin/kubectl /usr/bin/kubectl
kubectl version --client

配置连接文件

mkdir ~/.kube
cd /data/rancher
cp kube_config_cluster.yml /root/.kube/
mv /root/.kube/kube_config_cluster.yml /root/.kube/config

查看集群状态

[root@srs103 rancher]# kubectl get nodes -o wide
NAME            STATUS   ROLES                      AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
10.80.210.103   Ready    controlplane,etcd,worker   22h   v1.24.4   10.80.210.103   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://20.10.18
10.80.210.104   Ready    controlplane,etcd,worker   22h   v1.24.4   10.80.210.104   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://20.10.18
10.80.210.105   Ready    controlplane,etcd,worker   22h   v1.24.4   10.80.210.105   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://20.10.18


[root@srs103 rancher]# kubectl get cs -o wide
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
etcd-0               Healthy   {"health":"true","reason":""}
etcd-2               Healthy   {"health":"true","reason":""}
etcd-1               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok
controller-manager   Healthy   ok

Helm3安装Rancher高可用

安装Helm3

下载安装helm3

srs101服务器执行

curl -L https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz -o /usr/local/src/helm-v3.10.0-linux-amd64.tar.gz
cd /usr/local/src && tar -zxvf helm-v3.10.0-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/local/bin/helm && chmod +x /usr/local/bin/helm
ln -s /usr/local/bin/helm /usr/bin/helm
helm version

Helm3安装Rancher集群

参考官网步骤:https://docs.rancher.cn/docs/rancher2/installation/install-rancher-on-k8s/_index

srs101服务器执行

使用helm repo add命令添加Rancher chart仓库地址

# 国内用户,可以使用放在国内的 Rancher Chart 加速安装
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
# 官网地址
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

为 Rancher 创建 Namespace

我们需要定义一个 Kubernetes Namespace,在 Namespace 中安装由 Chart 创建的资源。这个命名空间的名称为cattle-system

kubectl create namespace cattle-system

选择您的 SSL 选项

参考官网,有以下三种:

  1. Rancher 生成的自签名证书
  2. Let's Encrypt
  3. 自签证书

因中国技术团队建议使用自签证书,所以也才有此方式。其他两种可参考官网步骤

生成自签证书

自签证书脚本-官方生成脚本:https://docs.rancher.cn/docs/rancher2.5/installation/resources/advanced/self-signed-ssl/_index/#41-%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90-ssl-%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E8%84%9A%E6%9C%AC

mkdir -p /data/rancher/ca && cd /data/rancher/ca

./create_self-signed-cert.sh --ssl-domain=www.rancher.local --ssl-size=2048 --ssl-date=3650

添加 自签证书

使用 kubectl 创建 tls 类型的密文。

kubectl -n cattle-system create secret tls tls-rancher-ingress \
  --cert=tls.crt \
  --key=tls.key

拷贝 CA 证书到名为 cacerts.pem 的文件,使用 kubectl 命令在 cattle-system 命名空间中创建名为 tls-ca 的密文。

kubectl -n cattle-system create secret generic tls-ca \
  --from-file=cacerts.pem=./cacerts.pem

helm安装rancher

helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=www.rancher.local \
  --set bootstrapPassword="rancher" \
  --set ingress.tls.source=secret \
  --set privateCA=true \
  --set replicas=2

检查安装进度:

[root@srs103 ca]# kubectl -n cattle-system get all
NAME                                   READY   STATUS    RESTARTS        AGE
pod/rancher-7cdf6968fd-86ph7           1/1     Running   1 (5h20m ago)   7h6m
pod/rancher-7cdf6968fd-vdspc           1/1     Running   4 (5h15m ago)   7h7m
pod/rancher-webhook-66dcd7db66-strqs   1/1     Running   0               6h52m

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/rancher           ClusterIP   10.43.19.253    <none>        80/TCP,443/TCP   7h11m
service/rancher-webhook   ClusterIP   10.43.2.238     <none>        443/TCP          6h52m
service/webhook-service   ClusterIP   10.43.193.244   <none>        443/TCP          6h52m

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/rancher           2/2     2            2           7h11m
deployment.apps/rancher-webhook   1/1     1            1           6h52m

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/rancher-7cdf6968fd           2         2         2       7h11m
replicaset.apps/rancher-webhook-66dcd7db66   1         1         1       6h52m

到此,我们已经安装完了!

由于域名是自定义的,我们需要在自己的windows上配置hosts:

image-20221025172854914

遇到问题

1.遇到告警Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress

最初使用k8s版本是1.20+,遇到ingress无法负载均衡的问题

于是测试demo发现是新版本的语法错误导致的

image-20221025173254017

image-20221025173322633

image-20221025173331712

修改文件请参考官方文档:

Kubernetes version 1.20+ introduces the networking.k8s.io API version as stable. If you have ingresses that predate K3S 1.20, you have until Kubernetes 1.22 to update them. Until then, if you use old-style ingress definitions, you will receive a warning like Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress when you apply the ingress to a cluster.

部署过程参考:

  1. https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/_index
  2. https://www.cnblogs.com/zoujiaojiao/p/15011469.html

《“RKE搭建k8s集群&Helm3部署Rancher高可用”》 有 1 条评论

  1. 大雄说道:

    太几把强了,大佬我想跟你学k8s

发表评论

您的电子邮箱地址不会被公开。