目录
Rancher Server + Kubernets搭建云原生集群平台
Rancher 是一款开源的企业级容器管理平台,专注于简化 Kubernetes 集群的部署、运维及多环境管理,助力企业在混合云、多云及边缘计算场景中实现高效容器化应用交付。
Rancher 凭借图形化界面、跨平台兼容性及开箱即用的监控/日志功能,大幅降低了 Kubernetes 的使用门槛。其开源特性允许企业深度定制,而活跃的社区生态则持续提供功能迭代与问题支持。对于需要统一管理复杂容器环境的企业,Rancher 是实现高效运维与数字化转型的理想选择。
一、环境准备
1、软件准备
序号 | 环境名称 | 说明 | 版本号 |
---|---|---|---|
1 | Rancher Server | k8s运维平台 | v2.5.7 |
2、环境规划
序号 | IP | HostName | 操作系统 | K8s角色 | 说明 |
---|---|---|---|---|---|
1 | 192.168.255.141 | rancher | Anolis OS 8.9 x86 64位 | Rancher服务 | Kubernetes 管理平台 |
2 | 192.168.255.142 | master | Anolis OS 8.9 x86 64位 | 控制节点 | Kubernetes Master |
3 | 192.168.255.143 | worker01 | Anolis OS 8.9 x86 64位 | 工作节点 | Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器 |
4 | 192.168.255.144 | worker02 | Anolis OS 8.9 x86 64位 | 工作节点 | Kubernetes Worker |
3、挂载数据盘
** 注意: **
- 1、该步骤不是必须的,如果需要将【系统盘】与【数据盘】进行分离,并且【数据盘】是独立的一块磁盘的话,是需要执行该步骤进行挂载到系统中的;(非必要执行)
- 2、下面的命令需要在 [192.168.255.141]、 [192.168.255.142]、 [192.168.255.143] 和 [192.168.255.144] 4台服务器上都执行
(1)、分区
对新磁盘【/dev/sdb】(根据lsblk命令输出得知新磁盘目录的)进行执行分区
[root@localhost ~]# lsblk
[root@localhost ~]# df -h
[root@localhost ~]# fdisk /dev/sdb
输入命令符
n # 创建新分区
p # 选择主分区
# 选择分区号(如果提示)
# 指定起始位置
# 指定分区大小
w # 保存并退出fdisk
(2)、格式化
对新磁盘【/dev/sdb1】(根据lsblk命令输出得知新磁盘目录的)进行执行格式化
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /data
(3)、挂载
临时挂载,立即生效,但是系统重启后会失效,重启系统后需要重新执行命令或【永久挂载】方式修改配置文件
[root@localhost ~]# mount /dev/sdb1 /data
永久挂载,系统每次重启后会读取配置文件/etc/fstab中的配置
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /data ext4 defaults 0 2
二、虚拟机初始化基础配置(所有节点都需要操作)
1、执行时间服务器脚本(包括配置hostName主机名)
(1)、创建init文件夹
[root@rancher ~]# mkdir init
[root@rancher ~]# cd init
(2)、创建文件传输,上传后,为文件添加执行权限后执行
[root@rancher init]# vim init.sh
init.sh文件内容
#配置主机名和host文件
echo "正在配置你的主机名..."
echo
read -p "请输入你的主机名:" host
hostname(){
hostnamectl set-hostname $host
}
hostname host && echo -e "主机名设置成功!!"
#echo "正在配置你的hosts文件..."
# ip=$(ip a | grep ens33 |grep inet |awk '{print $2}' | awk -F"/" '{print $1}')
# echo "$ip $host" >> /etc/hosts
# echo "hosts配置完成!!!"
# 防火墙设置
echo "关闭防火墙和selinux中...."
echo
systemctl stop firewalld && systemctl disable firewalld &> /dev/null && setenforce 0 && sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
if [ $? -eq 0 ];then
echo "防火墙和selinux已经成功关闭....."
else
echo "防火墙和selnux关闭失败,请手动关闭!!!"
fi
echo
#外网检测
echo "正在检测网络是否能上外网......"
echo
ping -c 2 www.baidu.com &> /dev/null
if [ $? -eq 0 ];then
echo "网络正常"
else
echo "网络不可达!"
fi
echo
# 配置yum源-这里选用阿里源
#echo
# echo "修改为国内yum源"
# mkdir /etc/yum.repos.d/bak
# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum clean all && yum makecache
# 修改时区
echo "修改时区中......"
timedatectl set-timezone Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "修改时区成功......"
# 时间同步
echo
echo "时间同步中……"
yum install -y ntpdate &> /dev/null
ntpdate 172.26.251.1 &> /dev/null
file=$(who | head -1 | cut -d" " -f1)
echo "* */1 * * * /usr/sbin/ntpdate 172.26.251.1" > /var/spool/cron/$file
if [ $? -eq 0 ];then
echo "时间同步成功!!!"
echo "unset MAILCHECK" >> /etc/profile
source /etc/profile &> /dev/null
else
echo "时间同步失败!!!"
fi
# 修改字符编码
echo
echo "修改字符编码中……"
echo 'LANG="en_US.UTF-8"' > /etc/locale.conf
echo "修改字符成功......"
echo "----配置ssh禁用反向解析----"
echo 'UseDNS=no' >> /etc/ssh/sshd_config
echo "----允许通过密码ssh远程登录----"
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
systemctl restart sshd
echo "----设置ssh,20分钟登录无操作自动退出,服务器每120秒心跳包测试客户端,三次不成功断开----"
echo 'export TMOUT=1200' >> /etc/profile
source /etc/profile
echo "----查看历史操作记录,并加时间戳----"
echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile
source /etc/profile
#内核优化
echo "----内核优化----"
grep 'net.ipv6.conf.all.disable_ipv6' /etc/sysctl.conf > /dev/null 2>&1
if [ $? -ne 0 ];then
# 关闭ipv6
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf
#允许系统打开的端口范围,不建议从1024开始,因为某些端口会存在10000以内。一般情况下已够用。
echo 'net.ipv4.ip_local_port_range = 10000 65000' >> /etc/sysctl.conf
echo 'net.core.somaxconn = 32768 >> /etc/sysctl.conf'
fi
(3)、执行初始化
#为文件添加执行权限
[root@rancher init]# chmod +x ./init.sh
[root@rancher init]# ./init.sh
正在配置你的主机名...
请输入你的主机名:
(4)、执行完后重启系统
[root@rancher init]# reboot
2、配置hosts文件
[root@rancher ~]# vim /etc/hosts
打开hosts文件点击键盘i进行插入,下面配置copy到hosts
192.168.255.141 rancher
192.168.255.142 master
192.168.255.143 worker01
192.168.255.144 worker02
3、配置各节点免密登录
#rancher
#生成ssh密钥
[root@rancher init]# ssh-keygen
输入后 敲击3下enter键盘 即可生成成功
访问连接各节点ssh
#复制密钥到其他节点(每个节点都要执行)
[root@rancher]# ssh-copy-id root@rancher
[root@rancher]# ssh-copy-id root@master
[root@rancher]# ssh-copy-id root@worker01
[root@rancher]# ssh-copy-id root@worker02
三、在每个节点安装docker
1、配置docker-ce国内yum源(阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、安装docker依赖包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker-ce
yum install docker-ce -y
** 备注:**
- 如果出现 【try to add ‘–allowerasing’ to command line to replace conflicting packages or ‘–skip-broken’ to skip uninstallable packages or ‘–nobest’ to use not only best candidate packages】,则执行下面命令
yum install docker-ce -y --allowerasing
4、启动docker服务并设置开机自启
systemctl start docker && systemctl enable docker
5、查看docker运行状态
systemctl status docker
6、查看docker版本信息
docker version
7、开启包转发功能和修改内核参数
modprobe br_netfilter
cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
8、加载并应用 /etc/sysctl.d/docker.conf 文件中的配置
sysctl -p /etc/sysctl.d/docker.conf
9、配置阿里云镜像
创建 /etc/docker 目录
sudo mkdir -p /etc/docker
创建docker镜像配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://ox288s4f.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"http://mirror.azure.cn",
"https://dockerpu11.org",
"https://dockerhub.icu",
"https://hub.rat.dev",
"https://proxy.1panel.live",
"https://docker.1panel.top",
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.ketches.cn"
]
}
EOF
10、重启docker
立即生效
sudo systemctl daemon-reload
重启docker
sudo systemctl restart docker
四、部署rancher
1、在rancher节点下载rancher镜像
[root@rancher ~]# docker pull rancher/rancher:v2.5.7
2、通过docker运行rancher服务器的容器
命令描述
-d: 在后台(detached mode)运行容器,即使终端关闭也保持运行。
--restart=unless-stopped: 容器退出时,除非明确停止,否则会自动重启。这个选项确保 Rancher 服务在意外关闭后能够自动恢复运行。
-p 80:80 -p 443:443: 将容器内部的端口映射到宿主机上,使得宿主机的 80 端口和 443 端口可以访问 Rancher 服务器提供的服务。例如,可以通过 `http://宿主机IP` 和 `https://宿主机IP` 访问 Rancher Web UI。
--privileged: 赋予容器全部的 Linux capabilities,这在某些情况下可能是必要的,例如需要访问设备或执行特权操作时。
--name rancher: 指定容器的名称为 `rancher`,这样可以通过该名称管理和操作这个容器。
rancher/rancher:v2.5.7: 指定要运行的 Docker 镜像,这里是 Rancher 服务器的镜像版本为 `v2.5.7`。
(1)、创建rancher数据挂载文件夹
mkdir -p /data/d/rancher/data
(2)、启动rancher容器
[root@rancher ~]# docker run -d --restart=always -p 80:80 -p 443:443 -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -v /data/d/rancher/data:/var/lib/rancher --privileged=true --user=root --name rancher rancher/rancher:v2.5.7
(3)、查看rancher容器信息
docker ps -a|grep rancher
五、登录Rancher平台
1、再浏览器访问Rancher节点IP ,由于未使用授信证书,会有报警,忽略即可
2、设置密码
3、至此Rancher安装完成
4、登录后可点击右下角语言选项选择中文
5、设置Rancher默认镜像仓库
把系统设置里面的 ”system-default-registry” value设置为
registry.cn-hangzhou.aliyuncs.com
六、创建集群
1、点击全局选择添加集群
2、填写集群名称,选择kubernetes版本点击保存
3、勾选Etcd、control,复制此命令,在每个master节点执行命令
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.5.7 --server https://192.168.255.141 --token ndkzstpnht7z5lvftkhmbc7wvgsgrxlq6s2r64ttqk9gxjgrnmjp75 --ca-checksum b5cb4d97b8be287df94db3736d7b7b58f8b2cfcb2758d91fb06c78afbf7b5bcd --etcd --controlplane
4、勾选worker复制此命令在每个worker节点执行命令
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.5.7 --server https://192.168.255.141 --token ndkzstpnht7z5lvftkhmbc7wvgsgrxlq6s2r64ttqk9gxjgrnmjp75 --ca-checksum b5cb4d97b8be287df94db3736d7b7b58f8b2cfcb2758d91fb06c78afbf7b5bcd --worker
备注:
- worker命令在主机worker01和worker02上执行
5、等待服务安装完成
此过程将耗时较长时间(拉取镜像时间较长),本文3台节点初始化完成用了近3个小时
点击主机查看监控
七、部署nginx服务
1、配置nginx点击进入集群tyzwkj-cloud选择Default
(1)、点击部署服务
(2)、拉取nginx镜像,填写配置;点击启动
(3)、等待nginx启动
2、配置负载均衡
(1)、进入【负载均衡】画面
(2)、新增ingress映射,点击保存
(3)、设置完成后会生成一个域名
(4)、验证nginx服务
点击nginx-ingress地址(上图中80/http)
备注:
如果点击nginx-ingress地址无法解析域名时,需要修改一下本地hosts文件,将xip.io域名解析到master节点ip
- 本例中master节点的ip是192.168.255.142,下面是在hosts文件中添加的配置
192.168.255.142 xip.io
(5)、验证负载均衡
点击上图nginx进入点击pods查看日志
【第一步】进入第一个nginx容器,查看第一个nginx容器的日志
【第二步】进入第二个nginx容器画面,查看第一个nginx容器的日志
【第三步】每访问一次
八、kubectl 命令行工具设置
1 、使用rancher安装的k8s集群,服务器里面的kubectl 工具不能正常使用,如果需要在服务器执行kubectl命令的话,需要配置一下上下文
(1)、 kubectl 配置命令自动补全
yum install -y bash-completion
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
(2)、搜索根目录文件名为 kubectl 的文件或目录是否存在,不存在则自己创建
find / -name kubectl
mkdir kubectl
(3)、查看/var/lib/rancher/下的文件获取要创建链接的源文件或目录
cd /var/lib/rancher/
执行下面命令查看是否可以获取到pod列表
v1.25.12-rke2r1-15557ace5a8f/bin/kubectl get pod -A
(4)、然后替换掉v1.25.12-rke2r1-15557ace5a8f/bin/kubectl换成自己的版本;执行然后执行下面软链接的命令
/usr/bin/kubectl为目标路径,来访问实际的 kubectl 可执行文件
ln -s /var/lib/rancher/rke/data/v1.25.12-rke2r1-15557ace5a8f/bin/kubectl /usr/bin/kubectl
2、从rancher页面获取Kubectl工具连接k8s集群所需的配置文件kubeconfig,如下图所示
(1)、创建目录
mkdir ${HOME}/.kube/
(2)、把下载的kubeConfig上传到服务器.重命名为config放到 ${HOME}/.kube/目录下
查看安装的版本
kubectl version
九、监控配置
1、进入监控配置画面
2、启用监控
点击【启用监控】按钮
3、部署监控服务
进入【集群】->System画面后,会发现新增了加【cattle-prometheus】命名空间及相关服务,这就是监控服务,只需等待一段时间就会自动部署好
4、验证
待上一步【cattle-prometheus】命名空间下的所有服务全部部署完成并状态为【Active】后,即可进入【集群】画面后,会看到下图所示的监控面板
点击上图Grafana按钮就会进入对应监控画面,如下图所示
十、重新安装
说明:
执行重复安装,需要清除所有记录再执行安装
docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \
/etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/pods \
/var/run/calico
结束,以上就是通过RancherServer搭建k8s的全部内容。