缺省离线环境安装的ocp4的Operatorhub是没有内容的。详细离线文档参考官网文档

https://docs.openshift.com/container-platform/4.2/operators/olm-restricted-networks.html

我这里以amq-stream为例记录离线部署的过程, 如何批量导入的过程正在研究中。。。。

  • 访问路径拿出所有的package
$ curl https://quay.io/cnr/api/v1/packages?namespace=redhat-operators > packages.txt
  • 拼出amq-stream的链接后curl一下获取下载地址
bash-4.2$ curl https://quay.io/cnr/api/v1/packages/redhat-operators/amq-streams/4.0.0
[{"content":{"digest":"091168d8d6f9511404ffa1d69502c84144e1a83ceb5503e8c556f69a1af66a1e","mediaType":"application/vnd.cnr.package.helm.v0.tar+gzip","size":,"urls":[]},"created_at":"2019-10-24T09:09:26","digest":"sha256:d0707e2a688e64907ff4d287c5f95a35b45b08121f8a7d556b9f130840e39052","mediaType":"application/vnd.cnr.package-manifest.helm.v0.json","metadata":null,"package":"redhat-operators/amq-streams","release":"4.0.0"}]
  • 将Operator的内容存成一个tar.gz的包
curl -XGET https://quay.io/cnr/api/v1/packages/redhat-operators/amq-streams/blobs/sha256/091168d8d6f9511404ffa1d69502c84144e1a83ceb5503e8c556f69a1af66a1e \
-o amq-streams.tar.gz
建立路径并解压缩
$ mkdir -p manifests/
$ tar -xf amq-stream.tar.gz -C manifests/
  • 重新命名后tree一下结构
[root@localhost ~]# tree manifests/
manifests/
└── amq-streams
├── 1.0.
│   ├── amq-streams-kafkaconnect.crd.yaml
│   ├── amq-streams-kafkaconnects2i.crd.yaml
│   ├── amq-streams-kafka.crd.yaml
│   ├── amq-streams-kafkamirrormaker.crd.yaml
│   ├── amq-streams-kafkatopic.crd.yaml
│   ├── amq-streams-kafkauser.crd.yaml
│   └── amq-streams.v1.0.0.clusterserviceversion.yaml
├── 1.1.
│   ├── amq-streams-kafkaconnect.crd.yaml
│   ├── amq-streams-kafkaconnects2i.crd.yaml
│   ├── amq-streams-kafka.crd.yaml
│   ├── amq-streams-kafkamirrormaker.crd.yaml
│   ├── amq-streams-kafkatopic.crd.yaml
│   ├── amq-streams-kafkauser.crd.yaml
│   └── amq-streams.v1.1.0.clusterserviceversion.yaml
├── 1.2.
│   ├── amq-streams-kafkabridges.crd.yaml
│   ├── amq-streams-kafkaconnects2is.crd.yaml
│   ├── amq-streams-kafkaconnects.crd.yaml
│   ├── amq-streams-kafkamirrormakers.crd.yaml
│   ├── amq-streams-kafkas.crd.yaml
│   ├── amq-streams-kafkatopics.crd.yaml
│   ├── amq-streams-kafkausers.crd.yaml
│   └── amq-streams.v1.2.0.clusterserviceversion.yaml
├── 1.3.
│   ├── amq-streams-kafkabridges.crd.yaml
│   ├── amq-streams-kafkaconnects2is.crd.yaml
│   ├── amq-streams-kafkaconnects.crd.yaml
│   ├── amq-streams-kafkamirrormakers.crd.yaml
│   ├── amq-streams-kafkas.crd.yaml
│   ├── amq-streams-kafkatopics.crd.yaml
│   ├── amq-streams-kafkausers.crd.yaml
│   └── amq-streams.v1.3.0.clusterserviceversion.yaml
└── amq-streams.package.yaml

展开package.yaml看看

[root@localhost ~]# cat manifests/amq-streams/amq-streams.package.yaml
packageName: amq-streams
channels:
- name: stable
currentCSV: amqstreams.v1.3.0

当前指向为1.3.0目录,所以去1.3.0目录去更新amq-streams.v1.3.0.clusterserviceversion.yaml,具体是这么一堆标黑的。

              labels:
name: amq-streams-cluster-operator
strimzi.io/kind: cluster-operator
spec:
serviceAccountName: strimzi-cluster-operator
containers:
- name: cluster-operator
image: registry.redhat.ren/amq7/amq-streams-operator:1.3.

args:
- /opt/strimzi/bin/cluster_operator_run.sh
env:
- name: STRIMZI_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.annotations['olm.targetNamespaces']
- name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
value: ""
- name: STRIMZI_OPERATION_TIMEOUT_MS
value: ""
- name: STRIMZI_DEFAULT_ZOOKEEPER_IMAGE
value: registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
value: registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_DEFAULT_TLS_SIDECAR_KAFKA_IMAGE
value: registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_DEFAULT_TLS_SIDECAR_ZOOKEEPER_IMAGE
value: registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE
value: registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_KAFKA_IMAGES
value: |
2.2.=registry.redhat.io/amq7/amq-streams-kafka-:1.3.
2.3.=registry.redhat.io/amq7/amq-streams-kafka-:1.3.
- name: STRIMZI_KAFKA_CONNECT_IMAGES
value: |
2.2.=registry.redhat.io/amq7/amq-streams-kafka-:1.3.

下载镜像,然后再推送到自己的位置那些就不说了

我因为只修改了上面那个operator的后面的没有修改和导入导致后来拉镜像有问题,不说了。。。。

  • 建立一个 custom-registry.Dockerfile
[root@helper operator]# cat custom-registry.Dockerfile
FROM registry.redhat.io/openshift4/ose-operator-registry:v4.2.0 AS builder COPY manifests manifests RUN /bin/initializer -o ./bundles.db;sleep #FROM scratch #COPY --from=builder /registry/bundles.db /bundles.db
#COPY --from=builder /bin/registry-server /registry-server
#COPY --from=builder /bin/grpc_health_probe /bin/grpc_health_probe EXPOSE ENTRYPOINT ["/bin/registry-server"] CMD ["--database", "/registry/bundles.db"]

如果按照官方文档来搞, 此处有个n大坑

  • 运行完initializer后说找不到bundles.db文件,实际上运行完后需要sleep一下,让文件形成
  • bundles.db位置不对,在/registry下,而不是在/build下
  • registry-server的位置不对,在/bin下,而不是在/build/bin/下
  • 如果FROM scratch的话,形成的镜像因为格式问题无法运行。

耽误时间3个钟头以上。。。。。

$ oc patch OperatorHub cluster --type json \
-p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
  • 构建镜像
podman build -f custom-registry.Dockerfile  -t registry.redhat.ren/ocp4/custom-registry 

podman push registry.redhat.ren/ocp4/custom-registry 
  • 创建一个my-operator-catalog.yaml文件
[root@helper operator]# cat my-operator-catalog.yaml
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: my-operator-catalog
namespace: openshift-marketplace
spec:
displayName: My Operator Catalog
sourceType: grpc
image: registry.redhat.ren/ocp4/custom-registry:latest

然后

oc create -f my-operator-catalog.yaml 

正常情况下看到的是

[root@helper operator]# oc get pods -n openshift-marketplace
NAME READY STATUS RESTARTS AGE
marketplace-operator-5c846b89cb-k5827 / Running 2d4h
my-operator-catalog-8jt25 / Running 4m53s
[root@helper operator]# oc get catalogsource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
my-operator-catalog My Operator Catalog grpc 5m5s

[root@helper operator]# oc get packagemanifest -n openshift-marketplace
NAME CATALOG AGE
amq-streams My Operator Catalog 5m11s

我的中间过程有点问题,后来发现是因为各个节点解析不到registry.redhat.ren这个外部镜像仓库地址,后手工在/etc/hosts中加上。

  • 切换到openshift界面。

建立一个新的项目安装

然后建立kafka集群然后查看Pod,我因为没有镜像所以都image pullbackoff..... :-(

大功告成!

OpenShift 4.2环境离线部署Operatorhub的更多相关文章

  1. 数据仓库006 - MySQL 5.6.x - Linux最佳生产环境离线部署

    一.离线安装包 文件准备 这里以mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz为例,记一次MySQL 5.6.x 的生产环境离线部署过程.使用SecureCRT连接 ...

  2. 已完成的python项目-环境离线部署

    python环境离线部署 当前生产环境中,有很多基于python开发的工具需要使用. 由于python工具往往涉及到很多依赖,在线状态下,可以通过pip requirements来管理安装. 但有时候 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  4. 在OpenShift 3.11环境开启多网络平面

    1.整体架构 Multus CNI是OpenShift的容器网络接口(CNI)插件,可将多个网络接口附加到Pod. 通常,在OpenShift中,每个Pod仅具有一个网络接口(除了回送),Multus ...

  5. 招商银行 KubeVela 离线部署实践

    招商银行云平台开发团队自 2021 年开始接触 KubeVela,并探索 KubeVela 在招商银行云平台的落地实践,借此提升云原生应用交付与管理能力.同时因为金融保险行业的特殊性,网络安全管控措施 ...

  6. arcgis api for js入门开发系列一arcgis api离线部署

    在我的GIS之家QQ群里,很多都是arcgis api for js开发的新手,他们一般都是GIS专业的学生,或者从计算机专业刚刚转向来的giser,他们难免会遇到各种webgis开发的简单问题,由于 ...

  7. Node服务一键离线部署

    背景说明 项目测试通过,到了上线部署阶段.部署的机器安全限制比较严格,不允许访问外网.此外,没有对外网开放ssh服务,无法通过ssh远程操作. 针对上面提到的两条限制条件,通过下面方式解决: 无法访问 ...

  8. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

  9. arcgis api 4.x for js 离线部署

    在我的GIS之家群里,经常遇到 webgis 开发新手们提问 arcgis api for js 如何本地离线部署,而不是直接调用在线的,因为在线模式依赖互联网以及网速环境因素,受到的限制影响比较大. ...

随机推荐

  1. 这是一份非常适合收藏的Android进阶/面试重难点整理

    写在前面 记得我大二时“不务正业”地自学Android并跟了老师做项目,到大三开始在目前的公司实习,至今毕业已有几年多,学习Android已经6.7年多了!但总感觉知识点很零散,并且不够深入,遇到瓶颈 ...

  2. springboot集成ftp

    目录 springboot集成ftp pom依赖包 ftp登录初始化 ftp上传文件 ftp读取文件,并转成base64 ftp下载文件 ftp客户端与服务端之间数据传输,主动模式和被动模式 spri ...

  3. [转]etcdctl v2 v3 使用指南

    原文:https://blog.csdn.net/kozazyh/article/details/79586530 ------------------------------------------ ...

  4. 如何显示隐藏的文件在win7系统中

    点左下角“开始”菜单,再点击“计算机”. 点击窗口顶部靠左位置的“组织”菜单,选择其中的“文件夹和搜索选项”. 在弹出的窗口里点击切换到“查看”选项卡.   在窗口中部位置下拉滚动条,找到“显示隐藏的 ...

  5. Elasticsearch 日期类型的自动监测,官方文档

    资料 网址 Elasticsearch Reference [7.3] » Mapping » Field datatypes » Date datatype https://www.elastic. ...

  6. 音视频RTP数据包封装

    对于语音通信而言,语音码率较低,添加适当冗余是对抗网络丢包的常见方式.冗余方式有多种,包括RED,FEC等都是冗余的一种,如果冗余份数较多,可以采取交织的方式实现.RFC 3350是RTP的基础标准协 ...

  7. 使用Postman做接口测试

    Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和 ...

  8. POJ1321-棋盘问题-(dfs)

    http://poj.org/problem?id=1321 解题: dfs中,两种情况,某一行摆不摆?某一列摆不摆? #include<stdio.h> #include<iost ...

  9. Xml解析作业与Xml建模andXml建模作业

    作业:config.xml解析 1.获取所有action中的type的值 public static void main(String[] args) throws Exception { Input ...

  10. codeblocks异常退出

    ExceptionAn exception has been raised! The application encountered an error atC:\CB1312\src\sdk\conf ...