该教程主要针对docker命令下的单机部署提出的解决过程,由于本人在部署中碰到各种问题,结合网上的一些资料摸索出来的一套较为可用的方法。
相信大家带在部署集群中碰到的各种:

service “capi-webhook-service” not found
failed to request, dial tcp timeout
it doesn’t contain any IP SANs

按照这个部署思路将会解决这些问题

一 准备镜像

1 联网环境下的操作系统为windows,可以使用docker desktop 安装可视化版本的docker工具。
2.使用VMware Workstation部署一个linux系统的虚拟机,通过虚拟机中的docker进行下载镜像后再打包放入离线环境中

1.镜像源配置

安装好docker后,首先配置镜像源

vi /etc/docker/daemon.json

将下述粘贴至文件内容中

{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://mirror.baidubce.com",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://dockerproxy.com",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
    ]
}

2.下载、打包、上传

1.下载
docker pull rancher/rancher:v2.9.2
2.打包
docker save -o 2.9.2.tar rancher/rancher:v2.9.2
注:该打包命令可以将镜像的tag信息保存,不需要重新再docker tag命令重新标记
3.上传至离线环境中
4.导入镜像
docker load < 2.9.2.tar
5.查看镜像
在这里插入图片描述
6 下载对应rancher版本的完整镜像:
参照我的另一篇文章:【离线环境下的rancher搭建】一 批量下载多个需要的镜像,避免来回找镜像

二 注意!!!相信大部分前面都没问题,主要问题都出在离线环境下的启动后的各个报错,所以v2.9.2版本需先现针对local集群额外的一些操作

解决思路来自于:Docker run 启动 rancher,由于映射数据目录导致 rancher/mirrored-pause 无法拉取

1.为什么local集群需要先处理好?

local里面包含了使用整体rancher操作的功能,比如kubectl shell、rancher webhook,在创建其他集群时如果出现问题,也有很大可能是local集群中的问题并没有解决就直接创建了。

在local集群上面切换到所有命名空间可以看见是否正常
在这里插入图片描述

三 部署rancher

1.清理rancher环境

由于先前已经安装过一次,本着既然是教程,那么就直接从头再给大家演示一遍,使用下面的命令进行清理:

docker stop $(docker ps -aq) #停止所有容器
docker rm $(docker ps -aq) #删除所有容器
docker system prune -f
docker volume rm $(docker volume 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 \
/var/lib/rancher  #你本地的rancher目录映射

2 启动必备镜像准备

这里已经针对v2.9.2的rancher中local集群中所需要镜像做一个梳理了,这些镜像是local集群里安装使用的默认也是最新的版本。

rancher/shell:v0.2.1
rancher/mirrored-pause:3.6
rancher/mirrored-coredns-coredns:1.10.1
rancher/gitjob:v0.9.8
rancher/mirrored-cluster-api-controller:v1.7.3
rancher/rancher-webhook:v0.5.2
rancher/kubectl:v1.29.2
rancher/fleet:v0.10.2
rancher/fleet-agent:v0.10.2 
rancher/rancher-agent:v2.9.2

这些镜像是rancher启动后,通过helm去安装应用所需要使用的,local集群中的失败的pod也是因为缺少这些镜像,按照下述命令打包:

注意!!!
先打包除了fleet和fleet-agent外的包
(原因见下面的 5 额外的问题汇总)

下面是打包命令


mkdir -p /var/lib/rancher #你的rancher本地映射目录
cd /var/lib/rancher
mkdir -p k3s/agent/images #local集群的镜像地址
cd  k3s/agent/images 
#将上面列的镜像打包成名称k3s-airgap-images.tar的tar包
docker save -o k3s-airgap-images.tar rancher/shell:v0.2.1 rancher/mirrored-pause:3.6 rancher/mirrored-coredns-coredns:1.10.1  rancher/gitjob:v0.9.8 rancher/mirrored-cluster-api-controller:v1.7.3 rancher/rancher-webhook:v0.5.2 rancher/kubectl:v1.29.2 rancher/rancher-agent:v2.9.2

镜像名字必须为:rancher/xxx:xxx 格式,因为tar包中的repository会保存该信息,rancher安装会找包是否有需要镜像,所以必须镜像的tag必须为这个格式,不要带任何镜像源前缀!!

打包后的镜像
在这里插入图片描述

3.启动命令准备


docker run --privileged -d --restart=unless-stopped \
-p 8880:80 \
-p 8443:443  \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY='' \
-e CATTLE_SYSTEM_CATALOG=bundled \
-v /var/lib/rancher/:/var/lib/rancher/ \
--name rancher rancher/rancher:v2.9.2

这里需要解释的一点:
-v /var/lib/rancher/:/var/lib/rancher/:本地目录映射,方便持久化保存rancher数据
CATTLE_SYSTEM_CATALOG:使用 System Charts的本地副本,而不是尝试从 GitHub 获取 Chart
CATTLE_SYSTEM_DEFAULT_REGISTRY:这一点最需要注意,我命令上是传入了一个空字符串,等同于使用默认值,有的教程会建议使用本地搭建的harbor镜像地址,但是我试过了,无论这里是写入ip+port还是主机名+port,在local集群安装拉取镜像时都会出问题。

用ip+port:local集群拉取镜像会报 because it doesn’t contain any IP SANs
用主机名+port:local集群拉取镜像会报 rancher failed to request dial tcp: your hostname lookup

所以启动的时候,传入空字符串或者不传入这个参数

4.首次启动rancher

正常的话会比较慢,因为rancher会检测几个服务,没检测到就会反复重启几次
进入界面,按照界面提示获取密码
在这里插入图片描述
设置密码、服务器URL为ip+port形式
在这里插入图片描述
进入主界面
在这里插入图片描述

进入local集群查看pod状态:
在这里插入图片描述
在这里插入图片描述
可以看见有的pod已经安装完成,有的还未完成(未完成是fleet和fleet-agent的镜像还没放进来)
再进入应用中查看:
在这里插入图片描述
可以看见,除了fleet,已经成功安装完成。

6.第二次启动rancher

注意:
在2.11.1版本的rancher中,博主尝试了可以不需要重启,直接添加镜像即可,如果大家发现不重启添加镜像 rancher的local集群安装还是不行的话,建议还是重启。

这一步主要处理还没打包进来的fleet和fleet-agent镜像
首先停止rancher
docker stop container-id
再用命令打包

mkdir -p /var/lib/rancher #你的rancher本地映射目录
cd /var/lib/rancher
mkdir -p k3s/agent/images #local集群的镜像地址
cd  k3s/agent/images 
#将上面列的镜像打包成名称k3s-airgap-images.tar的tar包
docker save -o k3s-airgap-images.tar rancher/shell:v0.2.1 rancher/mirrored-pause:3.6 rancher/mirrored-coredns-coredns:1.10.1  rancher/gitjob:v0.9.8 rancher/mirrored-cluster-api-controller:v1.7.3 rancher/rancher-webhook:v0.5.2 rancher/kubectl:v1.29.2  rancher/rancher-agent:v2.9.2  rancher/fleet:v0.10.2 rancher/fleet-agent:v0.10.2 

打包完成后
在这里插入图片描述

启动rancher,等待一段时间可以进入界面
docker start container-id
进入local集群的应用中,可以看见fleet已经安装完成:
在这里插入图片描述

如果等待一段时间发现pod没啥动静,可以去deployment和statefulset中,查看是否非running状态的服务,然后点击重新部署,过一会儿就没问题了。
在这里插入图片描述
可以看到所有pod正在running,整个local集群也没有报错
接下来就可以部署自己的集群了
在这里插入图片描述

6.额外问题汇总

1.如果在先启动后rancher后,进入界面登录,再将镜像打包到目录中,可能会出现pod安装pending,一直不往前执行
在这里插入图片描述
2.镜像打包时,如果不按照步骤来的话,把全部包都打好,虽然过一会pod启动都已经没有问题了
在这里插入图片描述
但是已安装应用显示还是pending-installing(猜测是这时候已经安装完成,但是由于rancher中在重启导致pod发送安装成功信号失败,应用这边就以为pod还在安装中)
在这里插入图片描述
3.最好不要设置全局镜像源:system-default-registry ,设置后新版本local集群会检测到改配置变化,从而对应用进行upgrade操作,建议是对新建集群,再集群设置中设置镜像源就可以,如下图
在这里插入图片描述
创建集群时再给集群单独设置镜像仓库地址

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐