背景
之前介绍过使用containerd作为底层runtime,但是环境中有很多底层是docker,没有切换到containerd,所以需要做一下适配。
docker版本:19.03.15
k8s版本:1.20.15,单节点
步骤
参考官方文档:https://d7y.io/zh/docs/setup/runtime/docker/ ,
https://d7y.io/zh/docs/setup/install/helm-charts
官方文档中需要为http代理生成CA证书,并挂载到dfdaemon的/etc/dragonfly/dfget.yaml
文件中,即dragonfly-dfdaemon
的configmap。但是我这个版本是支持私有仓库的,就不用生成证书了。亲测加不加证书效果是一样的。
修改values.yaml
启用docker,不重启docker服务,不自动注入hosts,开启insecure,registryDomains中和commonName都改为harbor的域名。cacert其他的可以不改。
禁用containerd。
根据实际情况修改scheduler,manager,seedPeer的副本数。
修改storageClass
vim charts/mysql/values.yaml
vim charts/redis/values.yaml
修改manager svc
改为NodePort,方便后面连接harbor。
安装
k create ns dragonfly
helm install dragonfly-n dragonfly .
配置Docker daemon
在文件中添加下面的配置,开启live-restore
是为了重启docker不重启容器。
vim /etc/docker/daemon.json
{
"insecure-registries": ["your.private.registry"],
"live-restore": true
}
设置代理
设置dfdaemon为docker daemon的HTTP_PROXY和HTTPS_PROXY代理:
mkdir /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:65001"
Environment="HTTPS_PROXY=http://127.0.0.1:65001"
拉取镜像
docker pull your.private.registry/namespace/image:latest
进入容器查看日志:
k exec -it -n dragonfly dragonfly-dfdaemon-rl5gf -- sh
cd /var/log/dragonfly/daemon/
grep 'peer task done' core.log
拉取成功。
坑
1.无需生成证书
官方文档可能很久都没有维护了,设置docker的http代理不需要添加ca证书,也不需要在dfdaemon的配置文件中添加hijackHTTPS
的配置
2.dfdaemon卡在init状态。
describe没有有效信息。登录到pod所在的节点,查看update-docker-config
容器日志,有如下的报错信息:
cp: cant't create '/host/etc/dragonfly-ca/cakey.pem': No such file or directory
解决
查看statefulset配置文件中update-docker-config
容器的启动命令,发现没有创建/host/etc/dragonfly-ca/
目录的步骤,且只挂载了/etc目录到/host/etc目录。所以这里可以在本地创建etc/dragonfly-ca/
目录,也可以在容器中创建/host/etc/dragonfly-ca/
目录。
再次启动,容器日志输出正常。
3.dfdaemon无法启动
没有任何日志输出。只能看到启动dfdaemon容器失败了。
解决
查看dfdaemon的Dockerfile:
容器会映射本地的65001端口,values.yaml文件中也定义了hostPort为65001,节点上65001端口未在监听,猜测可能是hostPort未生效。我这里网络插件为calico,k8s是用rke搭建的。
根据官方文档修改hostNetwork为true。再次启动可以正常启动。
4.拉取镜像失败
报错无法解析harbor的域名。
解决
我这里本地已经添加了harbor的域名解析,但并没有生效。所以这里添加容器内host解析。
hostAliases:
- ip: "1.1.1.1"
hostnames:
- "harbor.harbor.com"
重启服务,镜像可以正常拉取。