《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文使用 mirror-registry 开源项目安装一个单实例 RedHat Quay 环境。mirror-registry 开源项目是作为安装离线 OpenShift 使用的 Mirror Registry。
安装 Quay
注意:安装环境需要至少有 podman 3.0 以上软件,可以使用 root 用户运行以下命令安装 Quay 环境。
- 访问 https://github.com/quay/mirror-registry/releases 查看当前最新版本。
- 执行命令下载离线安装包。
$ QUAY_VERSION=1.1.0
$ curl -OL https://github.com/quay/mirror-registry/releases/download/${QUAY_VERSION}/mirror-registry-offline.tar.gz
$ tar -xvf mirror-registry-offline.tar.gz
- 由于安装使用的缺省 --quayHostname 参数会使用 “$(hostname -f)”,因此要不需要将 “$(hostname -f)” 和对应的 IP 加到 /etc/hosts 中,要不需要为 --quayHostname 参数设置可解析的主机名。本文将主机名 quay 和对应的 IP 加入到 /etc/hosts 中。
- 执行命令安装 mirror-registry。缺省会在 Quay 中创建名为 “init” 的用户,也可通过 --initUser 参数指定需要创建的用户。
$ QUAY_HOSTNAME=quay
$ ./mirror-registry install --initPassword r3dh4t1! --quayHostname ${QUAY_HOSTNAME} --targetUsername root -v
__ __
/ \ / \ ______ _ _ __ __ __
/ /\ / /\ \ / __ \ | | | | / \ \ \ / /
/ / / / \ \ | | | | | | | | / /\ \ \ /
\ \ \ \ / / | |__| | | |__| | / ____ \ | |
\ \/ \ \/ / \_ ___/ \____/ /_/ \_\ |_|
\__/ \__/ \ \__
\___\ by Red Hat
Build, Store, and Distribute your Containers
INFO[2022-04-10 08:13:13] Install has begun
DEBU[2022-04-10 08:13:13] Ansible Execution Environment Image: quay.io/quay/mirror-registry-ee:latest
DEBU[2022-04-10 08:13:13] Pause Image: registry.access.redhat.com/ubi8/pause:latest
DEBU[2022-04-10 08:13:13] Quay Image: registry.redhat.io/quay/quay-rhel8:v3.6.4
DEBU[2022-04-10 08:13:13] Redis Image: registry.redhat.io/rhel8/redis-6:1-25
DEBU[2022-04-10 08:13:13] Postgres Image: registry.redhat.io/rhel8/postgresql-10:1-161
INFO[2022-04-10 08:13:13] Found execution environment at /root/execution-environment.tar
INFO[2022-04-10 08:13:13] Loading execution environment from execution-environment.tar
DEBU[2022-04-10 08:13:13] Importing execution enviornment with command: /bin/bash -c sudo /usr/bin/podman image import \
--change 'ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' \
--change 'ENV HOME=/home/runner' \
--change 'ENV container=oci' \
--change 'ENTRYPOINT=["entrypoint"]' \
--change 'WORKDIR=/runner' \
--change 'EXPOSE=6379' \
--change 'VOLUME=/runner' \
--change 'CMD ["ansible-runner", "run", "/runner"]' \
- quay.io/quay/mirror-registry-ee:latest < /root/execution-environment.tar
。。。
。。。
FAILED_EVENTS=False -e ANSIBLE_HOST_KEY_CHECKING=False -e ANSIBLE_CONFIG=/runner/project/ansible.cfg --quiet --name ansible_runner_instance quay.io/quay/mirror-registry-ee:latest ansible-playbook -i root@quay, --private-key /runner/env/ssh_key -e "init_user=init init_password=r3dh4t1! quay_image=registry.redhat.io/quay/quay-rhel8:v3.6.4 redis_image=registry.redhat.io/rhel8/redis-6:1-25 postgres_image=registry.redhat.io/rhel8/postgresql-10:1-161 pause_image=registry.access.redhat.com/ubi8/pause:latest quay_hostname=quay:8443 local_install=true quay_root=/etc/quay-install" install_mirror_appliance.yml
PLAY [Install Mirror Appliance] ******************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************************************************************
ok: [root@quay]
TASK [mirror_appliance : Install Dependencies] ***************************************************************************************************************************************************************************************************************************
included: /runner/project/roles/mirror_appliance/tasks/install-deps.yaml for root@quay
。。。
。。。
PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************
root@quay : ok=47 changed=31 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
- 查看本地运行的的 container、pod 和系统服务。
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fbcdc27aead registry.access.redhat.com/ubi8/pause:latest 8 minutes ago Up 8 minutes ago 0.0.0.0:8443->8443/tcp ee29d638c8e6-infra
666800d74583 registry.redhat.io/rhel8/postgresql-10:1-161 run-postgresql 8 minutes ago Up 8 minutes ago 0.0.0.0:8443->8443/tcp quay-postgres
99d38cb14db1 registry.redhat.io/rhel8/redis-6:1-25 run-redis 8 minutes ago Up 8 minutes ago 0.0.0.0:8443->8443/tcp quay-redis
2ba875a1edd9 registry.redhat.io/quay/quay-rhel8:v3.6.4 registry 8 minutes ago Up 8 minutes ago 0.0.0.0:8443->8443/tcp quay-app
$ podman pod ps
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
ee29d638c8e6 quay-pod Running 7 minutes ago 3fbcdc27aead 4
$ systemctl list-units --type service | grep quay
quay-app.service loaded active running Quay Container
quay-pod.service loaded active exited Infra Container for Quay
quay-postgres.service loaded active running PostgreSQL Podman Container for Quay
quay-redis.service loaded active running Redis Podman Container for Quay
对 Quay 进行镜像操作
- 用浏览器访问 https://${QUAY_HOSTNAME}:8443/,然后登录进入 Quay 的控制台。
- 创建一个名为 busybox 的 Repository,可以是 Public 或 Private 类型。
- 如果是 Private 类型的 Repository 则需要登录 Quay。
$ podman login -u init -p r3dh4t1! ${QUAY_HOSTNAME}:8443 --tls-verify=false
Login Succeeded!
- 先从 docker 下载 busybox 镜像,然后推送到 Quay上,最后验证可以使用。
$ podman pull docker.io/library/busybox:latest
$ podman tag docker.io/library/busybox:latest ${QUAY_HOSTNAME}:8443/init/busybox:latest
$ podman push $(hostname -f):8443/init/busybox:latest --tls-verify=false
$ podman pull ${QUAY_HOSTNAME}:8443/init/busybox:latest --tls-verify=false
参考
https://github.com/quay/openshift-mirror-registry
https://docs.openshift.com/container-platform/4.10/installing/disconnected_install/installing-mirroring-creating-registry.html