用Rancher部署高可用k8s集群
用Rancher RKE部署高可用k8s集群
1. 主机配置
先配置4台最小化安装的主机,其中3台使用RKE配置k8s集群,然后在这个集群上配置高可用Rancher
| 主机IP | 主机名 | 配置 | 角色 |
|---|---|---|---|
| 172.21.0.12 | k8s-node01 | 4核8G | controlplane,etcd,worker |
| 172.21.0.15 | k8s-node02 | 4核8G | controlplane,etcd,worker |
| 172.21.0.16 | k8s-node03 | 4核8G | controlplane,etcd,worker |
| 172.21.0.4 | nginx | 4核8G | nginx负载均衡 |
1.1 新建虚拟主机
系统:CentOS Linux release 7.7
直接在腾讯云上买的主机,4核8G。安装完之后开始一些初始化配置
1.2 主机初始化配置
下面这些操作,是在每台主机上都要进行的。
安装一些必要的安装包
yum -y install epel-release
yum -y install lrzsz vim gcc glibc openssl openssl-devel net-tools wget curl
yum -y update # 更新一下软件包版本和内核版本
安全设置
在测试环境,先把firewalld和selinux关闭
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s@SELINUX=enforcing@SELINUX=disabled@g /etc/selinux/config
如果是在生产环境,建议关闭selinux,firewalld或iptables根据需要自定义
ntp时钟同步
安装ntp相关服务
yum -y install ntp
systemctl start ntpd # 启动时钟同步服务
systemctl enable ntpd # 设置开机启动
ntpq -p # 查看时钟同步状态
如果在局域网环境中有ntp时钟服务器,尽量用本地的
内核参数调优
Kernel参数调优,执行命令
cat >> /etc/sysctl.conf <<EOF
vm.swappiness=0
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
EOF
使内核参数生效执行
modprobe br_netfilter # 要先执行这个命令,要不然会报错
sysctl -p
hostname修改
分别在4台主机上修改主机名
hostnamectl set-hostname nginx
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
hostnamectl set-hostname k8s-node03
在/etc/hosts文件中添加配置
cat >> /etc/hosts << EOF
172.21.0.4 nginx
172.21.0.12 k8s-node01
172.21.0.15 k8s-node02
172.21.0.16 k8s-node03
EOF
注意:下面的这些步骤在nginx主机上可以不操作。
关闭swap分区
swapoff -a
然后修改/etc/fstab,把swap分区相关的配置注释掉
加载ipvs相关模块
由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:
在所有的Kubernetes节点执行以下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
#执行脚本
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
命令查看是否已经正确加载所需的内核模块。
接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。
yum install ipset ipvsadm -y
2. docker配置
注意:下面的这些安装docker的步骤在nginx主机上不需要操作。
2.1 安装docker
参考:https://developer.aliyun.com/article/110806
使用阿里云的安装源
# 安装一些必要的系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新并安装docker-ce
yum makecache fast
yum -y install docker-ce # 直接安装是安装的最新版本
systemctl start docker
systemctl enable docker
指定docker-ce版本安装
# 查看可以安装的版本
yum list docker-ce.x86_64 --showduplicates |sort -r
# 指定版本安装
yum install -y docker-ce-18.09.7-3.el7
systemctl start docker
systemctl enable docker
2.2 配置docker
指定镜像源,修改docker cgroup driver为systemd
根据文档CRI installation中的内容,对于使用systemd作为init system的Linux的发行版,使用systemd作为docker的cgroup driver可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上docker的cgroup driver为systemd。
mkdir /etc/docker/
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://3x8fih0m.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
systemctl status docker # 确认docker是否正常启动
docker info # 确认镜像源配置是否生效


上面的操作,是在每台主机上都要执行的,如果想简单一些,可以做成脚本。
2.3 配置普通用户加入docker组
把nginx主机当做主控机,其它主机的ops用户互信它的ops用户。
nginx主机操作
useradd ops
usermod -G docker ops
ssh-keygen生成密钥对
k8s节点主机操作
在另外3台主机上配置
useradd ops
usermod -G docker ops
mkdir -pv /home/ops/.ssh/
chmod 700 /home/ops/.ssh/
chown -R ops.ops /home/ops/
chmod 600 /home/ops/.ssh/authorized_keys
vim /home/ops/.ssh/authorized_keys # 添加第一个节点的密钥
测试用ssh连接。从nginx主机上,通过ops用户都能正常ssh连接到三台要部署k8s的主机。

配置参考:
https://www.kubernetes.org.cn/5551.html
https://www.cnblogs.com/tylerzhou/p/10971336.html
注意:完成以上全部操作之后,需要重启主机,有些配置参数重置主机后才会生效。
3. 使用RKE搭建k8s集群
3.1 下载RKE
首先从官网下载RKE,下载地址:https://github.com/rancher/rke/releases/tag/v1.0.11
下载好之后,上传到/home/ops/目录下,并添加执行权限

3.2 生成集群配置文件
配置文件生成可以用命令

cluster.yml配置如下:
nodes:
- address: 172.21.0.12
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: ops
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {
}
taints: []
- address: 172.21.0.15
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: ops
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {
}
taints: []
- address: 172.21.0.16
port: "22"
internal_address:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



