缺省离线环境安装的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 Studio在代码重构中的妙用

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  2. Nuxt 学习资料

    Nuxt 学习资料 网址 官方网站 https://zh.nuxtjs.org/guide/installation

  3. 【Android Studio】 资源下载

    Gradle各版本集合 http://services.gradle.org/distributions/ Android Studio各版本集合 http://www.android-studio. ...

  4. hive中时间操作(一)

    转:https://blog.csdn.net/u012474716/article/details/78925319/ hive中常用的时间为时间戳和日期格式之间的转换 常用的函数为: to_dat ...

  5. 获取浏览器名称与版本checkbrowse()

    function checkbrowse() { var ua = navigator.userAgent.toLowerCase(); var is = (ua.match(/\b(chrome|o ...

  6. UI系统综述:iOS的图形绘制、动画与runloop

    一.一条业务pipeline: 一个连接核心:coreanimation 二.两个进程: 1.app进程: 2.render进程: 首先,由 app 处理事件(Handle Events),如:用户的 ...

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

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

  8. Splay&LCT

    Splay && LCT \(\text{Splay}\) 基本操作 1.\(Zig \& Zag\) 其思想是维护中序遍历不变 实现中我们不真的用\(Zig\)或\(Zag\ ...

  9. Python I/O编程 --读写文件、StringIO/ BytesIO

    I/O编程 Input/Output  输入/输出 Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水 Input Stream就是数据从外面(磁盘.网络)流进内存,Ou ...

  10. ImportError: No module named 'typing'

    k@ubuntu:~/Desktop/virtualenv$ python3 Python ( , ::) [GCC ] on linux Type "help", "c ...