2020-03-18-openshift4 operatorhub 离线部署
openshift4 console 页面集成了operator管理,并支持构建私有的operator仓库。
本篇主要介绍在离线环境下如何构建一个私有的operator仓库。
ocp4 console 页面,在 Operators -- OperatorHub 页面,看到一共有121个 operator, 前几天我看的时候还是30个,应该是联网自动下载了。因为其他朋友的文章里说离线部署初始应该是看到0个。 不过这都没关系,点开一个部署就会发现,没镜像,跑不起来。

以下记录如何手动添加一个operator 并能够成功运行,这样将能够帮助我们在离线环境下导入operator。
禁用默认的 OperatorSources
ocp4 安装完成后,默认安装了operatorhub, 并配置了默认源。 把他屏蔽掉。
然后 console 页面,operatorhub里面的内容都自动清空了。
创建私有 operatorhub
要获取默认OperatorSource的软件包列表,在可以联网的机器运行以下命令:
都是json格式的,可以用jq命令格式化一下方便看,或者使用在线工具 cat community-operators-packages.txt |jq
在线解析 https://www.json.cn/
导入一个traefik 试试,traefik 功能同ingress和ocp的router,用于应用流量的入口 建议测试的弄个etcd,这个traefikee后面发布比较麻烦,还需要license
这几个的区别我还不是很清楚,就选第一个来测试下。
bundle.yaml 内容有 data.clusterServiceVersiondata.customResourceDefinition和data.Package 三部分。 我们需要把他们切割成三个文件。
第一个文件 clusterserviceversion.yaml ,注意把 apiVersion 前面的 '-' 删除
第二个文件 customresourcedefinition.yaml , 同样 apiVersion 前面的 '-' 删除
第三个文件 package.yaml , 同样去掉前面的 '-'
在 traefikee-certified 下新建一个版本号的目录,把clusterserviceversion.yaml和customresourcedefinition.yaml放进去 最终目录结构如下
获取镜像,查看下 yaml 文件中定义的镜像,这个是dockerhub的镜像,我们需要把他下载来,推送到我们的私有仓库,并且在yaml文件中把image改成指向私有仓库
拉取镜像,改tag,推到私有仓库,docker.io 拉不动换成azure的加速器试试,嗖嗖的
这边是 Azure China docker 加速器,有docker.io gcr.io quay.io 下载不了的镜像可以替换试试
global
proxy in China
format
example
dockerhub(docker.io)
dockerhub.azk8s.cn
dockerhub.azk8s.cn/repo-name/image-name:version
dockerhub.azk8s.cn/microsoft/azure-cli:2.0.61dockerhub.azk8s.cn/library/nginx:1.15
gcr.io
gcr.azk8s.cn
gcr.azk8s.cn/repo-name/image-name:version
gcr.azk8s.cn/google_containers/hyperkube-amd64:v1.13.5
quay.io
quay.azk8s.cn
quay.azk8s.cn/repo-name/image-name:version
quay.azk8s.cn/deis/go-dev:v1.10.0
修改yaml 文件,把images: 改成指向私有仓库,或者 ImageContentSourcePolicy 把外部仓库地址指向内部,不过这个yaml images 里面缺省 了docker.io 不确定 ImageContentSourcePolicy 还是否有效,直接改yaml文件来的比较靠谱些。
在manifests 目录同级创建文件 custom-registry.Dockerfile
使用podman命令构建镜像,并推送仓库
如果出现这个错误,是clusterserviceversion.yaml customresourcedefinition.yaml这两个文件没有切割好
创建 my-operator-catalog.yaml 文件
正常情况应该这样。如果不正常看下文
如果看不到新的pod,而且 packagemanifest 也没有,检查下这里面的pod是否正常,不正常就把pod删了重启下
控制台 Operators - Installed Operators 里面 Package Server 的status "cannot update" ,不是issue。 https://access.redhat.com/solutions/4937981
然后看console 控制台,traefik出来了,安装试试 
traefik 介绍页 
安装参数页,不要选default,会在所有项目下创建 
这样,traefik operator装完了,后面如果要安装traefik,需要添加一个 kind: Traefikee 的资源 
Installed Operators 页面点开 Traefikee Operator,选Create Instance,创建之后才是真正创建了traefik,这边发现我选择的是traefik的企业版,还要搞license及一堆初始化动作,页面有提示。 license 页面打不开。。。 看下pod已经有了,到此为止。
一次添加多个operator及版本
一次添加多个的版本,在做镜像之前, manifests 目录里面可以写多个operator和多个版本,可以参照这个
https://www.openshift.com/blog/openshift-4-3-managing-catalog-sources-in-the-openshift-web-console
参考文档
https://www.cnblogs.com/ericnie/p/11777384.html?from=timeline&isappinstalled=0
https://github.com/wangzheng422/docker_env/blob/master/redhat/ocp4/4.2.disconnect.operator.md
关注我的github,后续更新会同步到github
Last updated