Infrastructure Setup
Required: - [ ] Bastion (RHEL9) - [ ] haproxy - [ ] httpd - [ ] bind (?) - [ ] bind-utils Binaries Required: - [ ] mirror-registry - [ ] oc cli - [ ] oc-mirror - [ ] openshift-install - [ ] bind-utils (for nslookup and dig -- for troubleshooting) - [ ] 3x Control Plane (CoreOS) - [ ] 1x Bootstrap (CoreOS)
DNSes
-
api.clustername.baseDomain--> haproxy host -
api-int.clustername.baseDomain--> haproxy host -
*.apps.clustername.baseDomain--> haproxy host -
bootstrap.clustername.baseDomain -
controlPlane_n.clustername.baseDomain
Firewall Ports
The following ports need to be opened on the HAProxy/LB.
- [ ]
# Allow ports permanently in the public zone
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=22623/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
# For httpd
sudo firewall-cmd --permanent --add-port=81/tcp
# Reload firewall to apply changes
sudo firewall-cmd --reload
# (Optional) Verify that the ports are open
sudo firewall-cmd --list-ports
Dependencies Install
-
sudo dnf install -y haproxy httpd bind-utils
HAProxy config
-
global log 127.0.0.1 local2 pidfile /var/run/haproxy.pid maxconn 4000 daemon defaults mode http log global option dontlognull option http-server-close option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 listen api-server-6443 bind *:6443 mode tcp balance roundrobin server bootstrap discobootstrap.discoshift.pond.local:6443 verify none check check-ssl inter 10s fall 2 rise 3 backup server master1 discophrog1.discoshift.pond.local:6443 weight 1 check inter 10s fall 2 rise 3 server master2 discophrog2.discoshift.pond.local:6443 weight 1 check inter 10s fall 2 rise 3 server master3 discophrog3.discoshift.pond.local:6443 weight 1 check inter 10s fall 2 rise 3 listen machine-config-server-22623 bind *:22623 mode tcp server bootstrap discobootstrap.discoshift.pond.local:22623 check inter 1s backup server master1 discophrog1.discoshift.pond.local:22623 check inter 1s server master2 discophrog2.discoshift.pond.local:22623 check inter 1s server master3 discophrog3.discoshift.pond.local:22623 check inter 1s listen ingress-router-443 bind *:443 mode tcp balance source server compute1 discophrog1.discoshift.pond.local:443 check inter 1s server compute2 discophrog2.discoshift.pond.local:443 check inter 1s server compute3 discophrog3.discoshift.pond.local:443 check inter 1s listen ingress-router-80 bind *:80 mode tcp balance source server compute1 discophrog1.discoshift.pond.local:80 check inter 1s server compute2 discophrog2.discoshift.pond.local:80 check inter 1s server compute3 discophrog3.discoshift.pond.local:80 check inter 1s
Quay
SSL Certs for Quay
- SSL cert needs to be setup via OpenSSL. Do not use self-signed certs.
openssl req -newkey rsa:4096 -nodes -keyout quay.key -x509 -days 365 -out quay.crt \ -subj "/CN=mirror.discoshift.mlopslab.ncs" \ -addext "subjectAltName=DNS:mirror.discoshift.mlopslab.ncs"\
openssl req -newkey rsa:4096 -nodes -keyout quay.key -x509 -days 365 -out quay.crt -subj "/CN=mirror.discoshift.mlopslab.ncs" --addext "subjectAltName=DNS:mirror.discoshift.mlopslab.ncs"
Mirror Registry Setup
- To setup the mirror registry,
mirror-registrybinary must be in the machine already. -
sudo ./mirror-registry install --quayHostname mirror.discoshift.mlopslab.ncs --quayRoot /root/ocInstall-files/quay/ --sslCert /root/ocInstall-files/quay/certs/quay.crt --sslKey /root/ocInstall-files/quay/certs/quay.key --initPassword P@ssw0rd -
Acquire the pull secrets from Hybrid Cloud Console (To mirror from RedHat to Local Machine)
-
cd <path to install>/secrets mkdir -p $XDG_RUNTIME_DIR/containers \ cat <dir-to-rh-pull-secret>/pull-secret | jq . > $XDG_RUNTIME_DIR/containers/auth.json -
From 1, use the initPassword and initUser to create an entry to the
auth.jsonfile you just created in 2. -
echo -n "init:password" | base64 -w0 Output: **aW5pdDpwYXNzd29yZGhlcmU==**
vi $XDG_RUNTIME_DIR/containers/auth.json
"auths": {
"<mirror_registry_url>": {
"auth": "**aW5pdDpwYXNzd29yZGhlcmU==**",
"email": "you@example.com" #Anything works here.
},
.#Other stuff
.
.
.
}
Useful to jq the .json to check for validity.
jq . ./pull.json
2. ImageSetConfig
The ImageSetConfig.yaml is the input configuration file for the oc-mirror tool, and tells what OpenShift release and operators to mirror.
- [ ]
``` yaml #Base Image
apiVersion: mirror.openshift.io/v2alpha1
kind: ImageSetConfiguration
mirror:
platform:
channels:
- name: stable-4.18
type: ocp
minVersion: "4.18.17"
maxVersion: "4.18.17"
graph: false
additionalImages: []
operators: []
-
catalog: registry.redhat.io/redhat/certified-operator-index:v4.18 packages:
- name: gpu-operator-certified
channels:
- name: v25.3
- name: nutanixcsioperator
channels:- name: stable-3.x
- name: gpu-operator-certified
channels:
-
catalog: registry.redhat.io/redhat/community-operator-index:v4.18 packages:
- name: grafana-operator
channels:
- name: v5
- name: grafana-operator
channels:
-
catalog: registry.redhat.io/redhat/redhat-operator-index:v4.18 packages:
- name: serverless-operator
channels:- name: stable
- name: cluster-logging
channels:
- name: stable-6.2
- name: loki-operator
channels:
- name: stable-6.2
- name: quay-operator
channels:
- name: stable-3.14
- name: compliance-operator
channels:
- name: stable
- name: nfd
channels:
- name: stable
- name: rhacs-operator
channels:
- name: stable
- name: cluster-observability-operator
channels:
- name: stable
``` sh # For the operators and additional images field, you can check the release channel and packages if required: podman login -u registry.redhat.io # Core Red Hat operators oc mirror list operators \ --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.18 # Community-sourced operators oc mirror list operators \ --catalog=registry.redhat.io/redhat/community-operator-index:v4.18 # ISV-certified operators oc mirror list operators \ --catalog=registry.redhat.io/redhat/certified-operator-index:v4.18
- name: stable
- name: serverless-operator
3. Mirroring to Local Disk
Before pushing the image to the mirror registry, 1. Mirror OCP images to local directory: - [ ]
nohup oc-mirror -c <path_to_imageSetConfig.yaml> file://<path_to_mirror_dest> --authfile --v2 &
root/prod41817/metaTest/ is the directory where the tarball will be mirrored to.
4. Mirroring from Local Disk to Mirror Registry (Quay)
Once the images have been mirrored locally, it can then be pushed to the mirror registry.
- Mirror from Local to Quay:
-
oc-mirror --from=file:///home/ocInstall/ docker://registry.local.jackhww.me:8443 --dest-tls-verify=false --v2 --config=/home/install/imageSetConfig.yaml --authfile=... -
Once successful, the
ImageDigestMirrorSetandImageTagMirrorSetwill be stored in/root/prod41817/metaTest/working-dir/cluster-resources -
In a true disconnected environment, if facing issues with
dial tcp lookup... pinging container registry registry.redhat.io..., amend /etc/containers/registry.conf with the following entries:[[registry]] prefix = "registry.redhat.io" location = "registry.local.jackhww.me:8443" insecure = true -
If facing issues with
Error 413: entity too large...vi /etc/systemd/system/quay-app.service -e MAX_REQUEST_BODY_SIZE=524288000 sudo systemctl daemon-reload sudo systemctl restart quay-app - This will be used in the
install-config.yamllater on when igniting the install-config.output: 2025/06/25 23:59:17 [INFO] : === Results === 2025/06/25 23:59:17 [INFO] : β 189 / 189 release images mirrored successfully 2025/06/25 23:59:17 [INFO] : β 147 / 147 operator images mirrored successfully 2025/06/25 23:59:17 [INFO] : π¦ Preparing the tarball archive... 2025/06/26 00:47:41 [INFO] : π΅ going to discover the necessary images... 2025/06/26 00:47:41 [INFO] : π collecting release images... 2025/06/26 00:47:41 [INFO] : π collecting operator images... 2025/06/26 00:47:42 [INFO] : π collecting additional images... 2025/06/26 00:47:42 [INFO] : π collecting helm images... 2025/06/26 00:47:42 [INFO] : π Start copying the images... 2025/06/26 00:47:42 [INFO] : π images to copy 336 2025/06/26 01:28:20 [INFO] : === Results === 2025/06/26 01:28:20 [INFO] : β 189 / 189 release images mirrored successfully 2025/06/26 01:28:20 [INFO] : β 147 / 147 operator images mirrored successfully 2025/06/26 01:28:20 [INFO] : π Generating IDMS file... 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/idms-oc-mirror.yaml file created 2025/06/26 01:28:20 [INFO] : π Generating ITMS file... 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/itms-oc-mirror.yaml file created 2025/06/26 01:28:20 [INFO] : π Generating CatalogSource file... 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cs-certified-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cs-community-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cs-redhat-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : π Generating ClusterCatalog file... 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cc-certified-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cc-community-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/cc-redhat-operator-index-v4-18.yaml file created 2025/06/26 01:28:20 [INFO] : π Generating Signature Configmap... 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/signature-configmap.json file created 2025/06/26 01:28:20 [INFO] : /root/prod41817/metaTest/working-dir/cluster-resources/signature-configmap.yaml file created 2025/06/26 01:28:20 [INFO] : mirror time : 54m19.39647969s 2025/06/26 01:28:20 [INFO] : π Goodbye, thank you for using oc-mirror
5. Preignition
Customize the install-config.yaml file to your needs accordingly.
SSH Key Generation
ssh-keygen -t ed25519
apiVersion: v1
baseDomain: pond.local
compute:
- hyperthreading: Enabled
name: worker
replicas: 0
controlPlane:
hyperthreading: Enabled
name: master
replicas: 3
metadata:
name: discoshift
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
networkType: OVNKubernetes
serviceNetwork:
- 172.30.0.0/16
platform:
none: {}
fips: false
pullSecret: '{"auths":{"registry.local.jackhww.me:8443": {"auth": "aW5pdDpQQHNzdzByZA=","email": "jack@local.jackhww.me"}}}'
sshKey: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYCby3Sy+QKj2KfdoOpmTylaDADhS9fprW9EIpv4oh6 root@registry.local.jackhww.me'
additionalTrustBundle: |
-----BEGIN CERTIFICATE-----
MIIFTzCCAzegAwIBAgIUYB69NpcFhD0LNmfNAYw3Tbogz9QwDQYJKoZIhvcNAQEL
BQAwJDEiMCAGA1UEAwwZcmVnaXN0cnkubG9jYWwuamFja2h3dy5tZTAeFw0yNTA3
MDEwMjU3MzVaFw0yNjA3MDEwMjU3MzVaMCQxIjAgBgNVBAMMGXJlZ2lzdHJ5Lmxv
Y2FsLmphY2tod3cubWUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDD
mnaMatTTDT/IoqYcTN0c1HmdQYTOILhgKTfvy1RFWN3D8evFfFQKKxFsEHzhZ7N3
2eq3BWcR8aHZrx4TVIa4yXdcg/I6Xtd6EjYPd0QLxERqWaps5vn3HMqBNkykKtCT
pkWN5LJPYUbzjwU8vjG1zX7LCvcY7wMz+esqxZ7y28wof18vrjj6lrewZkFpMzmQ
BGE9fAbvxUIxXV1R1sVRevEdWPxGIlj8IaHBwdMiD05rv6evSZ/yRSUa8ObWLG65
gvla04S2KAwz/fR0tPJDcpeQ7TXvRABSXmFFYhBQQ7SWqNNjT332kNyF+wBXdYmb
VGqf8a77gFw/gzi2x/9KSN5hwSMWYaR3Sb2cqL+GHlJb90uRPNZh4MvblBJoApBV
ewTnkoYCKhQxGLh4CJ1jQwMw8Jai7IEp4HsXqKyaE/jVWlB0UjYReh0EevRzVX5T
FJb8pmt6LYhLFcLPhZ80OyHIpbbmZZAu4mldcW2z8MopCGFfDVxhQQplpMScwVvN
4eWPBPJC5lmTLEsomXErsWE/h3VaT3J50oYeXVbSZ+NnY+NCu81+My6xsnacLTyy
39CKIBIi8SwjUWOfvxHm/nJndXVD/dk6X2hILpgi0TGRfXt19rSrksAH+JG8H7cz
lkUfjFZ6PRpxFC+AkBiKsnY7uZXyLpcP33nUUYmy2wIDAQABo3kwdzAdBgNVHQ4E
FgQU04aeQe0a3rsrsJEdSvLopr7b3F4wHwYDVR0jBBgwFoAU04aeQe0a3rsrsJEd
SvLopr7b3F4wDwYDVR0TAQH/BAUwAwEB/zAkBgNVHREEHTAbghlyZWdpc3RyeS5s
b2NhbC5qYWNraHd3Lm1lMA0GCSqGSIb3DQEBCwUAA4ICAQA+6g7uv7tp3Rd98gkQ
X6SKfWCV0Qs+6n0h9SFscTNFiqpKyrJWaTuNfTGQcW9FPzJ7q09vT+bpVQKYd6V1
FIgUl/1IzFPosUW92RlzohAN1PTTzTBieaYtFGk39oTnnXYsA+MGnayqWaISu6Ab
XYHtGeADLhJ4GoYUyl/fX4zXN7E1Y2qObF5dZv8chYQFQBns+WXp6v/AXPIl7y39
VjAgNoMch3/vxhXNbrlo0bzj2WcOwv/whvR7AZehRzaqbPfNrDjhmA7EcJD7IEnR
uV0gqCxdoHyR2O1+qimYGTwISwQiWXv0+fCtpMaovOdfu3t8ICGZCzfeWtrw1Hry
MPUJyoi1m3rfAq1IMOC0LdViSf4rCVi7Tw04G5HvREP3pTSNy83ip7eLQyN3acpk
M6Loz7d8+kmKoBeYP8rHBY6qETVo30MHzOIO7o4/pjhwWfdA+EPmF61aoy5FduQt
q7foh7J4XAP8K07ptOAE2jK+FPhQajXF78RbsXwSmYHH4/x/BuUAlyjpTwsC0N+P
DRu3g4sKA/B1GQo+8c1mbEDhrlmOMXFjpwyo37OHhmcfSaudZXjb2GjN/YlAfdya
9volar/xT0RLt1qlGngfcl4nQIml8K0LevYjyai0aP06ltI1mWjsojXnD3KnvghP
IuZKPtbdfygo82F1VAr/+U1Kkg==
-----END CERTIFICATE-----
imageContentSources:
- mirrors:
- registry.local.jackhww.me:8443/openshift/release-images
source: quay.io/openshift-release-dev/ocp-release
- mirrors:
- registry.local.jackhww.me:8443/openshift/release
source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
- mirrors:
- registry.local.jackhww.me:8443/nvidia/cloud-native
source: nvcr.io/nvidia/cloud-native
- mirrors:
- registry.local.jackhww.me:8443/sig-storage
source: registry.k8s.io/sig-storage
- mirrors:
- registry.local.jackhww.me:8443/openshift-serverless-1
source: registry.redhat.io/openshift-serverless-1
- mirrors:
- registry.local.jackhww.me:8443/cluster-observability-operator
source: registry.redhat.io/cluster-observability-operator
- mirrors:
- registry.local.jackhww.me:8443/rhel8
source: registry.redhat.io/rhel8
- mirrors:
- registry.local.jackhww.me:8443/openshift-service-mesh
source: registry.redhat.io/openshift-service-mesh
- mirrors:
- registry.local.jackhww.me:8443/nvidia/k8s
source: nvcr.io/nvidia/k8s
- mirrors:
- registry.local.jackhww.me:8443/advanced-cluster-security
source: registry.redhat.io/advanced-cluster-security
- mirrors:
- registry.local.jackhww.me:8443/compliance
source: registry.redhat.io/compliance
- mirrors:
- registry.local.jackhww.me:8443/ubi8
source: registry.access.redhat.com/ubi8
- mirrors:
- registry.local.jackhww.me:8443/grafana
source: ghcr.io/grafana
- mirrors:
- registry.local.jackhww.me:8443/grafana
source: docker.io/library/grafana
- mirrors:
- registry.local.jackhww.me:8443/nutanix
source: registry.connect.redhat.com/nutanix
- mirrors:
- registry.local.jackhww.me:8443/nvidia
source: nvcr.io/nvidia
- mirrors:
- registry.local.jackhww.me:8443/quay
source: registry.redhat.io/quay
- mirrors:
- registry.local.jackhww.me:8443/nvidia
source: registry.connect.redhat.com/nvidia
- mirrors:
- registry.local.jackhww.me:8443/openshift4
source: registry.redhat.io/openshift4
- mirrors:
- registry.local.jackhww.me:8443/openshift-logging
source: registry.redhat.io/openshift-logging
- mirrors:
- registry.local.jackhww.me:8443/community-operator-pipeline-prod
source: quay.io/community-operator-pipeline-prod
6. Ignition
- Create ignition config files from the install-config.yaml:
Ignition files will be consumed upon creating the manifests. Make sure to create a backup.
./openshift-install create manifests --dir . - Ensure that Masters are schedulable if doing a 3 Node install - or according to requirements.
<installation_directory>/manifests/cluster-scheduler-02-config.yml - Create the ignition files once all is in order:
./openshift-install create ignition-configs --dir <installation_directory>
7. cronyd
- Create a .bu file
99-worker-chrony.buvariant: openshift version: 4.18.0 metadata: name: 99-master-chrony #Replace with Master if 3 Node labels: machineconfiguration.openshift.io/role: worker #Replace with Master if 3 nodes storage: files: - path: /etc/chrony.conf mode: 0644 overwrite: true contents: inline: | pool 0.rhel.pool.ntp.org iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony -
Specify an octal value mode for theΒ
modeΒ field in the machine config file. After creating the file and applying the changes, theΒmodeΒ is converted to a decimal value. You can check the YAML file with the commandΒoc get mc <mc-name> -o yaml -
Generate the
.yaml config filebutane 99-worker-chrony.bu -o 99-worker-chrony.yaml -
Add it into the
<installation_directory>/openshiftdirectory.
8. HTTP Server
- Install httpd. If not installed:
sudo dnf install -y httpd -
# Change the listening port to 81: vi /etc/httpd/conf/httpd.conf # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # Change this to Listen on a specific IP address, but note that if # httpd.service is enabled to run at boot time, the address may not be # available when the service starts. See the httpd.service(8) man # page for more information. #Listen 12.34.56.78:80 Listen 81 # --> Change to whatever port - Once up, copy the
.ignfiles over to the html serving directory:/var/www/html/ignitemkdir /var/www/html/ignite cd <installation_dir>/ignite/ mv *.ign /var/www/html/ignite - Ensure you can curl it with another machine:
curl -v <server>:81/ignite/bootstrap.ign - If errored out due to Permission denied:
sudo chcon -Rt httpd_sys_content_t /var/www/html/ignite
9. Bootstrapping
On your bootstrap cluster, ensure the prerequisites: - [ ] Network configured: - [ ] DNS - [ ] Gateway - [ ] Hostname - [ ] Reverse DNS lookup - [ ] IPv6 Disabled (Can cause host to be unreachable if trying to SSH into core@bootstrap. Ping them after rebooting.) - [ ] LB configured: - [ ] Warnings are expected before bootstrapping, but ensure that the service is running and the LB is able to resolve the Masters/Workers - [ ] Complete 1. On the bootstrap CLI:
sudo coreos-installer install /dev/sda --ignition-url http://registry.local.jackhww.me:81/ignition/bootstrap.ign --copy-network --insecure-ignition
- On the master CLI:
sudo coreos-installer install /dev/sda --ignition-url http://registry.local.jackhww.me:81/ignition/master.ign --copy-network --insecure-ignition - At this stage, take a snapshot of the machines so that rollback is easier and the commands are saved.
- Once done, reboot the machines and ensure it boots to
/dev/sda.- To prevent X509 Cert not yet valid/expired errors, make sure to reboot the Master nodes first before the bootstrap node. This ensures that the master's time in case of time desync is always ahead of the bootstrap.
- On the Bastion, you can then check the bootstrap process:
./openshift-install --dir . wait-for bootstrap-complete --log-level=info - On the Bootstrap, you can check the process:
#On Bastion: ssh core@bootstrap.local journalctl -b -f -u release-image.service -u bootkube.service - Once Kubernetes API is up, you can then copy the
kubeconfigto~/.kube/config. - Wait for the output to tell you that the bootstrap resources can be removed before shutting down the Bootstrap machine.
Post Install
Disabling the internet sources of OperatorHub
oc patch operatorhub cluster \
--type merge \
-p '{"spec":{"disableAllDefaultSources":true}}'
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: redhat-operators
namespace: openshift-marketplace
spec:
sourceType: grpc
image: registry.local.jackhww.me:8443/olm/redhat-operator-index:v4.18
displayName: Red Hat Operators (Disconnected)
publisher: Local Registry
updateStrategy:
registryPoll:
interval: 30m
oc-mirror error
- Failing due to:
error mirroring image registry.redhat.io/ubi9/ubi@sha256:20f695d2a91352d4eaa25107535126727b5945bff38ed36a3e59590f495046f0 error: copying image 1/4 from manifest list: writing blob: uploading layer chunked: StatusCode: 413, "<html>\r\n<head><title>413 Request Entity Too Large<..." error mirroring image docker://docker.io/rocm/device-metrics-exporter@sha256:6c946c6ca10d5c0f40e67b5759759f12d51c45e3b934cb1af912821d5fd76e6e (Operator bundles: [amd-gpu-operator.v1.3.2] - Operators: [amd-gpu-operator]) error: writing blob: uploading layer chunked: StatusCode: 413, "<html>\r\n<head><title>413 Request **Entity Too Large**<..." error mirroring image docker://registry.connect.redhat.com/amd/gpu-operator-v1@sha256:8a92a0d18a5ae6a837ca6590c2beb65d889cd744a098c22d3f01d2fffdc4dc57 error: skipping operator bundle docker://registry.connect.redhat.com/amd/gpu-operator-v1@sha256:8a92a0d18a5ae6a837ca6590c2beb65d889cd744a098c22d3f01d2fffdc4dc57 because one of its related images failed to mirror- Fix:
sudo podman cp quay-app:/quay-registry/conf/nginx/nginx.conf /tmp/nginx.conf sudo vi /tmp/nginx.conf # Add the following lines to port 8443 or the guilty port: client_max_body_size 0; proxy_request_buffering off; proxy_read_timeout 3600; proxy_send_timeout 3600; client_body_buffer_size 512k; sudo podman cp /tmp/nginx.conf quay-app:/quay-registry/conf/nginx/nginx.conf sudo podman restart quay-app
- Fix:
Copy Paste Ignition
Bootstrap
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.14/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
nmcli con up Wired\ connection\ 1
sudo hostnamectl hostname discobootstrap.discoshift.mlopslab.ncs
sudo coreos-installer install /dev/vda --ignition-url=http://192.168.1.50:8080/ignite/bootstrap.ign --copy-network --insecure-ignition
Master 01
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.11/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
sudo hostnamectl hostname discomaster01.discoshift.mlopslab.ncs
nmcli con up Wired\ connection\ 1
sudo coreos-installer install /dev/vda --ignition-url=http://192.168.1.50:8080/ignite/master.ign --copy-network --insecure-ignition
Master 02
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.12/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
nmcli con up Wired\ connection\ 1
sudo hostnamectl hostname discomaster02.discoshift.mlopslab.ncs
sudo coreos-installer install /dev/vda --ignition-url=http://192.158.1.50:8080/ignite/master.ign --copy-network --insecure-ignition
Master 03
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.13/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
nmcli con up Wired\ connection\ 1
sudo hostnamectl hostname discomaster03.discoshift.mlopslab.ncs
sudo coreos-installer install /dev/vda --ignition-url=http://192.168.1.50:8080/ignite/master.ign --copy-network --insecure-ignition
Worker Nodes
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.15/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
nmcli con up Wired\ connection\ 1
sudo hostnamectl hostname amd01.discoshift.mlopslab.ncs
sudo coreos-installer install /dev/vda --ignition-url=http://192.168.1.50:8080/ignite/worker.ign --copy-network --insecure-ignition
Draining nodes
oc adm drain <node> \
--ignore-daemonsets \
--delete-emptydir-data \
--force \
oc patch vm discobootstrap \
--type=json \
-p='[
{
"op": "add",
"path": "/spec/template/spec/nodeSelector",
"value": {
"kubernetes.io/hostname": "bmgpu-01.ocp.mlopslab.ncs"
}
}
]'
eno8303 8403
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.12/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.13/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled
sudo coreos-installer install /dev/vda --ignition-url=http://120.1.1.120:8080/ignite/worker.ign --copy-network --insecure-ignition
nmcli con mod Wired\ connection\ 1 ipv4.addresses 192.168.1.15/24 ipv4.gateway "192.168.1.10" ipv4.dns "120.1.1.100" ipv4.method manual ipv6.method disabled