RKE搭建k8s集群&Helm3部署Rancher高可用
此次是:RKE的方式快速部署K8S集群(https://199604.com/2400)的进一步文章
运行环境
机器需要满足以下几个条件:
- 一台或多台机器,操作系统CentOS7.x-86_64(个人选择CentOS7.9)
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
- 禁止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
rancher-cluster.yml
:RKE 集群的配置文件。kube_config_cluster.yml
:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。rancher-cluster.rkestate
:Kubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
使用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 选项
参考官网,有以下三种:
- Rancher 生成的自签名证书
- Let's Encrypt
- 自签证书
因中国技术团队建议使用自签证书
,所以也才有此方式。其他两种可参考官网步骤
生成自签证书
自签证书脚本-官方生成脚本: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:
遇到问题
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发现是新版本的语法错误导致的
修改文件请参考官方文档:
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.
部署过程参考:
https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/_index
https://www.cnblogs.com/zoujiaojiao/p/15011469.html