INTRO
RHOCP를 구축 후 Operator를 이용하여 원하는 SW를 설치 시 OperatorHub가 사용됩니다.
기본 설정은 인터넷이 되는 환경에서 동작합니다. 보통 RHOCP를 운영하는 환경은 인터넷이 되지 않는 폐쇄망일 경우가 높기 때문에 Disconnected OperatorHub를 구성해야 합니다.
Registry Image를 미러링 할 때 사용되는 oc-mirror에 대한 자세한 내용은 아래의 글을 참고 바랍니다.
oc-mirror 플러그인을 이용하여 Private Registry로 미러링할 때 아래의 문서를 보고 참고하였습니다.
Disconnected OperatorHub 구성
RedHat에서 기본적으로 제공하는 OperatorHub의 CatalogSource를 비활성화하는 작업을 합니다.
# oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
# oc get operatorhub cluster -o jsonpath={.spec."disableAllDefaultSources"}
true
Image Registry 서버가 Docker로 구성된 경우 podman 명령을 실행 시 docker 명령어가 수행될 수 있게 alias 작업을 해줍니다. (podman으로 설치되어 있을 경우 아래의 alias 작업을 하지 않아도 됨)
oc-mirror 명령어 수행 시 docker가 아닌 podman으로 실행되기 때문에 Alias 작업은 필수로 해야 됩니다.
# alias podman='docker'
oc-mirror plugin을 설치합니다.
※oc-mirror: 레지스트리 이미지를 미러링 할 때 사용하는 OpenShit CLI Tool
# curl -LO https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/oc-mirror.tar.gz
# tar xzf oc-mirror.tar.gz
# chmod +x ./oc-mirror
# mv ./oc-mirror /usr/local/bin/
RedHat Registry에서 사용할 수 있는 Image Catalog를 조회합니다.
# podman login registry.redhat.io
# oc-mirror list operators --catalogs --version=4.13
Available OpenShift OperatorHub catalogs:
OpenShift 4.13:
registry.redhat.io/redhat/redhat-operator-index:v4.13
registry.redhat.io/redhat/certified-operator-index:v4.13
registry.redhat.io/redhat/community-operator-index:v4.13
registry.redhat.io/redhat/redhat-marketplace-index:v4.13
RedHat OperatorHub의 Image Catalog에서 사용 가능한 Operator 리스트를 파일로 저장합니다.
# oc-mirror list operators --catalog=harbor.example.com:443/ocp4/redhat-operator-index:v4.13 > package.out
<Disconnected 환경으로 옮기기>
# podman login harbor.example.com:443
# podman pull registry.redhat.io/redhat/redhat-operator-index:v4.13
# podman save -o redhat-operator-index_v4.13.tar
# podman load -i redhat-operator-index_v4.13.tar
# podman tag registry.redhat.io/redhat/redhat-operator-index:v4.13 harbor.example.com:443/ocp4/redhat-operator-index:v4.13
# podman push harbor.example.com:443/ocp4/redhat-operator-index:v4.13
필요한 Operator를 grep 명령어를 통해 조회합니다.
# egrep -i "NAME|cluster-logging|servicemesh|jaeger|OpenShift\ Virtualization|elastic|odf-operator|metallb|gitops|pipelines|NMState|kiali|sriov" package.out
NAME DISPLAY NAME DEFAULT CHANNEL
cluster-logging Red Hat OpenShift Logging stable
elasticsearch-operator OpenShift Elasticsearch Operator stable
jaeger-product Red Hat OpenShift distributed tracing platform stable
kubernetes-nmstate-operator Kubernetes NMState Operator stable
kubevirt-hyperconverged OpenShift Virtualization stable
metallb-operator MetalLB Operator stable
odf-operator OpenShift Data Foundation stable-4.13
openshift-gitops-operator Red Hat OpenShift GitOps latest
openshift-pipelines-operator-rh Red Hat OpenShift Pipelines latest
servicemeshoperator Red Hat OpenShift Service Mesh stable
kiali-ossm Kiali Operator stable
sriov-network-operator SR-IOV Network Operator stable
앞에서 조회한 Operator의 이름과 Channel 버전을 기반으로 Image Config yaml을 작성합니다.
Operator에 포함되는 Image를 미러링할 때 정의 파일입니다.
설정 | 설명 |
skipTLS | TLS 검증 건너뜀 (사설 인증서 사용시 true) |
name | Operator 이름 |
Channels.name | Operator Channel 버전 |
# mkdir /root/olm_image
# cat << EOF > /root/olm_image/imageset-config.yaml
apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
registry:
imageURL: harbor.example.com:443/olm/metadata
skipTLS: true
mirror:
operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:v4.13
packages:
- name: cluster-logging
channels:
- name: stable
- name: elasticsearch-operator
channels:
- name: stable
- name: sriov-network-operator
channels:
- name: stable
- name: servicemeshoperator
channels:
- name: stable
- name: kiali-ossm
channels:
- name: stable
- name: jaeger-product
channels:
- name: stable
- name: kubernetes-nmstate-operator
channels:
- name: stable
- name: kubevirt-hyperconverged
channels:
- name: stable
- name: metallb-operator
channels:
- name: stable
- name: openshift-pipelines-operator-rh
channels:
- name: latest
- name: openshift-gitops-operator
channels:
- name: latest
- name: ocs-client-operator
channels:
- name: stable-4.13
- name: odf-operator
channels:
- name: stable-4.13
EOF
앞에서 작성한 ImageSetConfiguration yaml을 기반으로 Reigstry로 미러링을 시작합니다.
# cd /root/olm_image
# oc mirror --config=/root/olm_image/imageset-config.yaml docker://harbor.example.com:443/olm --dest-skip-tls
미러링이 완료되면 mirror log를 열어서 Mirroring completed를 확인합니다
# cat /root/olm_image/.oc-mirror.log
..(생략)
sha256:e5dc6c93de956ad1d090f48062336b029409ccee19f7f0306df35f089cd6bf61 harbor.example.com:443/olm/openshift-pipelines/pipelines-rhel8-operator
sha256:4f7ff99b3caee122bc067e780552c08a2503788ce9e91e55177a3b287d7514c9 harbor.example.com:443/olm/openshift-pipelines/pipelines-rhel8-operator:4a5241cb
info: Mirroring completed in 17m22.22s (51.88MB/s)
Rendering catalog image "harbor.example.com:443/olm/redhat/redhat-operator-index:v4.13" with file-based catalog
Writing image mapping to oc-mirror-workspace/results-1689178009/mapping.txt
Writing CatalogSource manifests to oc-mirror-workspace/results-1689178009
Writing ICSP manifests to oc-mirror-workspace/results-1689178009
ImageContentSourcePolicy를 적용하기 위해 이전에 위의 로그에서 확인한 "/root/ocp_image/oc-mirror-workspace/results-1689178009" 경로에서 ImageContentSourcePolicy.yaml 파일을 적용합니다.
※ ImageContentSourcePolicy: Public 이미지 레지스트리에서 Private Registry로 맵핑할때 사용하는 정책
# oc create -f /root/olm_image/oc-mirror-workspace/results-1689178009/imageContentSourcePolicy.yaml
CatalogSource를 확인하여 Operator Catalog Image가 Private Registy의 이미지가 맞는지 확인하고 metadata.name을 변경하여 Display name 이름을 지정할 수 있습니다.
# vi /root/olm_image/oc-mirror-workspace/results-1689178009/catalogSource-redhat-operator-index.yaml
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: redhat-operator-index-ocptb
namespace: openshift-marketplace
spec:
image: harbor.example.com:443/olm/redhat/redhat-operator-index:v4.13
sourceType: grpc
CatalogSource를 반영합니다.
# oc create -f /root/olm_image/oc-mirror-workspace/results-1689178009/catalogSource-redhat-operator-index.yaml
CatalogSource와 Operator 목록이 정상적으로 반영되었는지 확인합니다.
# oc get catalogsource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
redhat-operator-index-ocptb grpc 2m11s
# oc get packagemanifest -n openshift-marketplace
NAME CATALOG AGE
odf-operator 2m21s
openshift-pipelines-operator-rh 2m21s
ocs-operator 2m21s
ocs-client-operator 2m21s
servicemeshoperator 2m21s
mcg-operator 2m21s
metallb-operator 2m21s
elasticsearch-operator 2m21s
cluster-logging 2m21s
sriov-network-operator 2m21s
jaeger-product 2m21s
openshift-gitops-operator 2m21s
kubevirt-hyperconverged 2m21s
kiali-ossm 2m21s
kubernetes-nmstate-operator 2m21s
odf-csi-addons-operator 2m21s
웹 콘솔에 접속하여 OperatorHub를 확인합니다. 이전에 적용한 CatalogSource 이름을 확인할 수 있습니다.
'Linux > OpenShift' 카테고리의 다른 글
RHOCP) OVN-Kubernetes Architecture (0) | 2023.07.31 |
---|---|
RHOCP) Infra node 구성과 워크로드 격리 (0) | 2023.07.29 |
RHOCP) Machine Config를 이용한 Chrony 설정 (0) | 2023.07.26 |
RHOCP) Machine Config Operator (MCO) (0) | 2023.07.26 |
RHOCP) OpenShift ID Provider 생성 및 kubeadmin 계정 제거 (0) | 2023.07.26 |