
离线环境下以docker方式部署单机Rancher 2.9.2【其他高版本也可参照此方法】
该教程主要针对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镜像
首先停止rancherdocker 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操作,建议是对新建集群,再集群设置中设置镜像源就可以,如下图
创建集群时再给集群单独设置镜像仓库地址
更多推荐
所有评论(0)