生产环境迁移——harbor篇

这些年环境迁移干了很多,但是没有总结,想想还是记录一下,以前是下属做,自己统筹就行,现在就剩下孤家寡人了,只好都自己做。还是完整记录下来,供有缘人参考。其实我也是搭了个草台班子。

1 安装docker

很多人都是简单直接安装docker,其实是不对的,因为首先知道那个目录的磁盘空间较大,否则磁盘满了,还得费二遍事。下面是我的磁盘情况,各位可能是不同,需要注意这一点。

命令如下

bash 复制代码
yum -y install yum-utils device-mapper-persistent-data lvm2
# 这个是我的磁盘目录,不要照抄
mkdir -p /home/docker
#
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install docker-ce docker-ce-cli containerd.io -y

# 更改配置
vi /lib/systemd/system/docker.service

在下图位置添加--data-root /home/docker,再次强调这里你们自己的目录,这个是docker文件目录。

启动docker

bash 复制代码
systemctl daemon-reload
# 启动命令
systemctl start docker
# 开机启动
systemctl enable docker

由于docker19.03.8已经下载不了了,

bash 复制代码
# 源服务器是centos,使用yumdownloader将docker的rpm包下载下来。
yum install -y yum-utils
sudo yumdownloader docker-ce-19.03.8-3.el7 docker-ce-cli-19.03.8-3.el7 containerd.io

2 rsync文件同步

在源和目标的服务器都需要安装上rsync

bash 复制代码
yum install rsync -y

exsi主机比较容易,之前在线迁移就行,但是物理机就不行。先查看源服务器上内容,

执行同步命令,这种复制文件方式都需要思考,源服务器有啥就复制啥。

bash 复制代码
# 同步docker-compose文件
rsync -avz docker-compose root@10.101.10.2:/home/harbor
# 同步harbor安装相关文件
rsync -avz harbor root@10.101.10.2:/home/harbor

下面是harbor目录的内容

直接同步harbor的数据文件,这个时候就需要思考harbor数据文件是在哪里指定的,很显然就是harbor.yml中。

3 安装docker-compose

bash 复制代码
chmod +x docker-compose
cp -a docker-compose /usr/bin
docker-compose  -v

4 harbor恢复

上面是直接使用rsync做的文件级别同步,如何将harbor恢复呢?

更改hostname和http端口,因为之前使用exsi做的虚拟机,80和443端口可以随便,但是现在是物理机,就不能这么干了。注意下面hostname配置的是es2,那么其他节点就都需要在/etc/hosts中配置es2对应的ip

更改数据目录

新增daemon.json配置,下面的配置现在可能docker有什么限制下载不下来,可以参考Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request cancele 报错

bash 复制代码
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://2b5ean3t.mirror.aliyuncs.com"],
  "insecure-registries": ["10.101.12.2", "10.101.12.200"],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 10,
  "log-driver": "json-file",
  "log-level": "info",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

有些情况下修改了daemon配置可以启动不了,一个可能是文件拼写错误,一个是docker版本不同参数页不同,这个是否执行journalctl -u docker.service --no-pager,查看详细的错误日

harbor的开启关闭如下:

bash 复制代码
# 启动
cd /home/harbor/harbor
# 首次需要执行./prepare,后面就不需要了
./prepare 
# 启动
docker-compose up -d
# 关闭
docker-compose down

安装过程如下

启动之后就可以看到端口变为了8081

登录到界面,可以看到镜像已经还原了。

5 Jenkins关联更改

5.1 harbor镜像的全局路径配置

在configure system中自定义全局变量docker_repository

这个跟自己发布程序有关,可以看到py脚本如下,下面的代码在拼接。

5.2 jenkins访问harbor权限

打包发现访问异常。

需要在jenkins中需要daemon.json中文件中添加需要连接harbor的ip:port,因为我已经把端口改成8081,不再是80,所以需要显式写明。

另外需要在此台机器上做一下登录docker login 10.101.12.2:8081,再次编译harbor上传成功。

5.3 生产的jenkins

为了避免打包直接发布生产环境,造成不可估量的后果,于是就有了另外一个jenkins,这个jenkins从测试harbor中拉取镜像,然后再推到生产的harbor中,最后再进行部署。

迁移总是不是很顺利,因为有的环境我并不熟悉,也没有人问了,于是只好自己摸索着来。部署的时候可以看到下面的错误,为什么呢?可以看到下面的2:8081,写成了2.8081,改成过啦即可

6 k8s关联更改

虽然镜像已经推送到harbor中,但因为自动化部署脚本是通过k8s提供的api,故而k8s的环境也需要更改。从下图可以看到harbor镜像pull失败。

6.1 kuboard连接docker仓库配置

这个是原来的配置

,将这个删掉重新创建

再k8s集群节点执行下面的提示

bash 复制代码
[root@master1 ~]# docker login 10.101.12.2:8081
Username: admin
Password: 
Error response from daemon: Get http://10.101.12.2:8081/v2/: Get http://es2:8081/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry: dial tcp: lookup es2 on 223.5.5.5:53: no such host

于是再/etc/hosts将对应的的地址添加进去即可。

k8s可以通过imagePullSecrets获取harbor私库的凭证认证。下面的脚本需要在k8s的主节点执行

bash 复制代码
# 这个跟上面的jenkins一样,把harbor的ip:port写入到insecure-registries,这样内部访问就不需要SSL了
vi /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker

查看secret,之前已经有harbor-cert,可以先删掉旧的,然后再kuboard中添加新的

bash 复制代码
[root@master1 ~]# kubectl get secrets -n test
NAME                  TYPE                                  DATA   AGE
default-token-bjbzb   kubernetes.io/service-account-token   3      153d
harbor-cert           kubernetes.io/dockerconfigjson        1      147d


# 执行下面的命令可以看到harbor-cert的详细信息
kubectl get secret harbor-cert -n test -o jsonpath="{.data.\.dockerconfigjson}" | base64 --decode

# 删除旧的harbor-cert
kubectl delete secret harbor-cert -n test

6.2 worker节点配置更改

更改了harbor-cert,发现还是无法pull镜像

于是做相同的操作,在/etc/hosts中添加es2对应的ip,因为上面harbor.yml配置的是es2,另外在/ect/docker/daemon.json中更改insecure-registries,把ip:8081添加进去。

至此问题解决。

相关推荐
Echo flower5 天前
jenkins harbor安装
云原生·harbor
秋意零20 天前
Harbor安装、HTTPS配置、修改端口后不可访问?
运维·云计算·harbor·harbor相关
lwprain25 天前
安装支持ssl的harbor 2.1.4 docker 19.03.8 docker-compose 1.24.0
网络协议·ssl·harbor
lu云之东1 个月前
Harbor2.11.1生成自签证和配置HTTPS访问
网络协议·http·docker·https·harbor
空城.依旧2 个月前
快速学习开源 Docker 镜像仓库 Harbor
学习·docker·开源·harbor
丁总学Java3 个月前
docker -私有镜像仓库 - harbor安装
运维·docker·容器·harbor
塔克拉玛攻城狮4 个月前
containerd:配置https私有镜像仓库的最新方法
containerd·harbor
一个在高校打杂的4 个月前
解决ssl certificates updated-生成环境中的实例
linux·ssl·harbor
rainsc4 个月前
k8s新版本使用container而不是docker导致创建pod一直提示证书问题
k8s·harbor·container