June 24, 2026
Building SNO — Single Node Openshift Cluster
Last weekend, I was setting up a test cluster and didn’t want to spin up three masters and two workers just to check one thing. that’s when…

By Manohar Shetty
13 min read
Last weekend, I was setting up a test cluster and didn't want to spin up three masters and two workers just to check one thing. that's when i remembered sno, single node openshift, where the whole cluster runs on one machine, master and worker combined. i'd heard about it before but never actually tried it, so this felt like the right time. gave it the minimum cpu and ram it needed, kicked off the install, and went to make coffee. came back and it was just sitting there, running, like it wasn't a big deal at all. took me a minute to actually believe it worked on the first try.
this post is basically me writing down what happened, what i'd double check next time, and why i think more people testing openshift at home should just start here instead of overcomplicating it with a full cluster.
SNO setup configuration:
| Server | Hostname | IP Address | Purpose |
| -------------- | ------------------ | ------------- | ------------------------------------------ |
| DNS Server | dns.manohar.in | 192.168.0.200 | DNS resolution for OpenShift |
| Bastion Server | bastion.manohar.in | 192.168.0.201 | OpenShift installer, oc client, SSH access |
| SNO Cluster | sno.manohar.in | 192.168.0.250 | Single Node OpenShift cluster || Server | Hostname | IP Address | Purpose |
| -------------- | ------------------ | ------------- | ------------------------------------------ |
| DNS Server | dns.manohar.in | 192.168.0.200 | DNS resolution for OpenShift |
| Bastion Server | bastion.manohar.in | 192.168.0.201 | OpenShift installer, oc client, SSH access |
| SNO Cluster | sno.manohar.in | 192.168.0.250 | Single Node OpenShift cluster |OpenShift DNS Records
| Record | IP |
| ---------------------- | ------------- |
| sno.manohar.in | 192.168.0.250 |
| api.sno.manohar.in | 192.168.0.250 |
| api-int.sno.manohar.in | 192.168.0.250 |
| *.apps.sno.manohar.in | 192.168.0.250 || Record | IP |
| ---------------------- | ------------- |
| sno.manohar.in | 192.168.0.250 |
| api.sno.manohar.in | 192.168.0.250 |
| api-int.sno.manohar.in | 192.168.0.250 |
| *.apps.sno.manohar.in | 192.168.0.250 |Important URLs
| Component | URL |
| ----------------- | -------------------------------------------------------------------------------------------------------------- |
| OpenShift Console | [https://console-openshift-console.apps.sno.manohar.in](https://console-openshift-console.apps.sno.manohar.in) |
| OAuth | [https://oauth-openshift.apps.sno.manohar.in](https://oauth-openshift.apps.sno.manohar.in) |
| API Endpoint | [https://api.sno.manohar.in:6443](https://api.sno.manohar.in:6443) |
| Internal API | [https://api-int.sno.manohar.in:6443](https://api-int.sno.manohar.in:6443) || Component | URL |
| ----------------- | -------------------------------------------------------------------------------------------------------------- |
| OpenShift Console | [https://console-openshift-console.apps.sno.manohar.in](https://console-openshift-console.apps.sno.manohar.in) |
| OAuth | [https://oauth-openshift.apps.sno.manohar.in](https://oauth-openshift.apps.sno.manohar.in) |
| API Endpoint | [https://api.sno.manohar.in:6443](https://api.sno.manohar.in:6443) |
| Internal API | [https://api-int.sno.manohar.in:6443](https://api-int.sno.manohar.in:6443) |Versions
| Component | Version |
| ----------------- | ------- |
| OpenShift | 4.21.19 |
| Kubernetes | 1.34.8 |
| RHCOS | 4.21.0 |
| openshift-install | 4.21.19 |
| oc client | 4.21.19 || Component | Version |
| ----------------- | ------- |
| OpenShift | 4.21.19 |
| Kubernetes | 1.34.8 |
| RHCOS | 4.21.0 |
| openshift-install | 4.21.19 |
| oc client | 4.21.19 |
Download CoreOS ISO
4.21.0 Edit description
Download RHCOS 4.21 Live ISO
curl -O https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.21/4.21.0/rhcos-4.21.0-x86_64-live-iso.x86_64.isocurl -O https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.21/4.21.0/rhcos-4.21.0-x86_64-live-iso.x86_64.isoVerify
ls -lh rhcos-4.21.0-x86_64-live-iso.x86_64.isols -lh rhcos-4.21.0-x86_64-live-iso.x86_64.isoExample output:
-rw-r--r-- 1 root root 1.8G Jun 23 20:00 rhcos-4.21.0-x86_64-live-iso.x86_64.iso-rw-r--r-- 1 root root 1.8G Jun 23 20:00 rhcos-4.21.0-x86_64-live-iso.x86_64.isoBuilt DNS Server on Centos 9
Setting up DNS on CentOS Stream 9 — for Openshift Cluster This post walks through everything you pasted and explains it command by command so you know what each step does, why…
Add DNS entries
Assume:
- Cluster Name:
sno - Base Domain:
manohar.in - SNO IP:
192.168.0.250
Forward Zone
api.sno.manohar.in. IN A 192.168.0.250
api-int.sno.manohar.in. IN A 192.168.0.250
*.apps.sno.manohar.in. IN A 192.168.0.250api.sno.manohar.in. IN A 192.168.0.250
api-int.sno.manohar.in. IN A 192.168.0.250
*.apps.sno.manohar.in. IN A 192.168.0.250If your DNS server does not support wildcard entry, add records as applications are created.
Reverse Zone
250.0.168.192.in-addr.arpa. IN PTR api.sno.manohar.in.250.0.168.192.in-addr.arpa. IN PTR api.sno.manohar.in.or
250 IN PTR sno.manohar.in.250 IN PTR sno.manohar.in.Verify
dig api.sno.manohar.in
dig api-int.sno.manohar.in
dig oauth-openshift.apps.sno.manohar.in
dig -x 192.168.0.250dig api.sno.manohar.in
dig api-int.sno.manohar.in
dig oauth-openshift.apps.sno.manohar.in
dig -x 192.168.0.250All should resolve to 192.168.0.50 (and the reverse lookup should return the PTR name you configured).
[root@bastion ~]# dig api.sno.manohar.in
dig api-int.sno.manohar.in
dig oauth-openshift.apps.sno.manohar.in
dig -x 192.168.0.250
; <<>> DiG 9.16.23-RH <<>> api.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61114
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: db8a032202debd94010000006a3ac677bf04da5869c991fd (good)
;; QUESTION SECTION:
;api.sno.manohar.in. IN A
;; ANSWER SECTION:
api.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 91
; <<>> DiG 9.16.23-RH <<>> api-int.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9346
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 52f8187aaad82e7a010000006a3ac67785d3235629c9f50b (good)
;; QUESTION SECTION:
;api-int.sno.manohar.in. IN A
;; ANSWER SECTION:
api-int.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 2 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 95
; <<>> DiG 9.16.23-RH <<>> oauth-openshift.apps.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12267
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 55fe711f3cade39d010000006a3ac6776ee39cd5683838b6 (good)
;; QUESTION SECTION:
;oauth-openshift.apps.sno.manohar.in. IN A
;; ANSWER SECTION:
oauth-openshift.apps.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 108
; <<>> DiG 9.16.23-RH <<>> -x 192.168.0.250
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39823
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 452e33bd5176746a010000006a3ac677a21fec1d44b0ca7c (good)
;; QUESTION SECTION:
;250.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
250.0.168.192.in-addr.arpa. 86400 IN PTR sno.manohar.in.
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 111
[root@bastion ~]# dig api.sno.manohar.in
dig api-int.sno.manohar.in
dig oauth-openshift.apps.sno.manohar.in
dig -x 192.168.0.250
; <<>> DiG 9.16.23-RH <<>> api.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61114
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: db8a032202debd94010000006a3ac677bf04da5869c991fd (good)
;; QUESTION SECTION:
;api.sno.manohar.in. IN A
;; ANSWER SECTION:
api.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 91
; <<>> DiG 9.16.23-RH <<>> api-int.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9346
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 52f8187aaad82e7a010000006a3ac67785d3235629c9f50b (good)
;; QUESTION SECTION:
;api-int.sno.manohar.in. IN A
;; ANSWER SECTION:
api-int.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 2 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 95
; <<>> DiG 9.16.23-RH <<>> oauth-openshift.apps.sno.manohar.in
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12267
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 55fe711f3cade39d010000006a3ac6776ee39cd5683838b6 (good)
;; QUESTION SECTION:
;oauth-openshift.apps.sno.manohar.in. IN A
;; ANSWER SECTION:
oauth-openshift.apps.sno.manohar.in. 86400 IN A 192.168.0.250
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 108
; <<>> DiG 9.16.23-RH <<>> -x 192.168.0.250
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39823
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 452e33bd5176746a010000006a3ac677a21fec1d44b0ca7c (good)
;; QUESTION SECTION:
;250.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
250.0.168.192.in-addr.arpa. 86400 IN PTR sno.manohar.in.
;; Query time: 1 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)
;; WHEN: Tue Jun 23 23:16:31 IST 2026
;; MSG SIZE rcvd: 111
Prepare the OpenShift Installation Workspace
Create a dedicated working directory to store all OpenShift installation files, ignition files, pull secrets, and configuration artifacts.
mkdir sno
cd ~/snomkdir sno
cd ~/snoDownload OpenShift Installation Utilities
Download the OpenShift Installer and OpenShift Client packages that match the target OpenShift version.
# Install Openshift Install
curl -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-4.21/openshift-install-linux.tar.gz
# Install Openshift Client
curl -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-4.21/openshift-client-linux.tar.gz# Install Openshift Install
curl -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-4.21/openshift-install-linux.tar.gz
# Install Openshift Client
curl -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-4.21/openshift-client-linux.tar.gzExtract the Installation Packages
Extract the downloaded archives to obtain the required binaries.
tar -xvf openshift-install-linux.tar.gz
tar -xvf openshift-client-linux.tar.gztar -xvf openshift-install-linux.tar.gz
tar -xvf openshift-client-linux.tar.gzThis extracts the following tools:
openshift-install– Creates installation assets and ignition files.oc– OpenShift command-line interface.kubectl– Kubernetes command-line utility.
Verify Installed Versions
Confirm that the installer and client versions match the intended OpenShift release.
./openshift-install version
./oc version --client./openshift-install version
./oc version --clientExpected output:
openshift-install 4.21.x
Client Version: 4.21.xopenshift-install 4.21.x
Client Version: 4.21.xInstall the Binaries System-Wide
Make the binaries executable and place them in a directory available in the system PATH.
chmod +x openshift-install oc kubectl
mv openshift-install oc kubectl /usr/local/bin/chmod +x openshift-install oc kubectl
mv openshift-install oc kubectl /usr/local/bin/Verify Binary Availability
Confirm that the commands are accessible from anywhere on the system.
openshift-install version
oc version --client
kubectl version --clientopenshift-install version
oc version --client
kubectl version --clientAt this stage, the bastion host is prepared with all required OpenShift installation utilities and is ready for generating the install-config.yaml file and Single Node OpenShift installation assets.
Generate OpenShift Installation Assets
After creating the install-config.yaml file and placing the pull secret and SSH public key in it, generate the installation assets.
Create the installation configuration:
openshift-install create install-configopenshift-install create install-configvi install-config.yaml
apiVersion: v1
baseDomain: manohar.in
metadata:
name: sno
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 1
networking:
networkType: OVNKubernetes
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16
platform:
none: {}
bootstrapInPlace:
installationDisk: /dev/sda
pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"a3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfMzgzNTRmOTBhMGUzNDA4MDg5ODRkOGM0ZDU2YWE4NjA6M1lWSFA5MEs0S0FJRU5WMDBXSUdJRU42TlNPTFhUQVdSV1JTUlVKSEI3RDc3U1UwSkdPWUdWSkdCM1E1NlZCUg==","email":"tradingcontentdrive@gmail.com"},"quay.io":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfMzgzNTRmOTBhMGUzNDA4MDg5ODRkOGM0ZDU2YWE4NjA6M1lWSFA5MEs0S0FJRU5WMDBXSUdJRU42TlNPTFhUQVdSV1JTUlVKSEI3RDc3U1UwSkdPWUdWSkdCM1E1NlZCUg==","email":"tradingcontentdrive@gmail.com"},"registry.connect.redhat.com":{"auth":"fHVoYy1wb29sLTU1MTkyYjE2LWJjNDgtNGQ4OC1hOWI2LWFkNWVkZWVjMTgxYjpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSXhNemszTVRNM016bGtNbVEwTVRSbE9EZGpZMlU0TTJSbU4ySTBaVFJoT1NKOS5sOE9XNjhYYTdOYmlWR1pCWlVvcGlkYnh5bU90cmpzUXZacFVYQjg3MTdvLUcwQjdMZy1vRG1sb2ZxLUxwLWtMcHdQdzVsejZydDZjTUlWZ0ZTOXZXeUJ6a0l3bjEzTlo4RlppT0MzaWZOMlZCVW9xVVVORkNlYU0xVVVfWmtrWXVhZ09ET0ZRYUZIUkVyd0x0RGxvMEZ4VW5zc0txQUM3cnpEdHhiR0xacUd6c0RjdDg5bXVIZ1lHZHMzdzd0am0xd3V0VTQxdGZzdWd2RFlUTEdfYTVCUy0waW9WSnlrMm9jbS1OYU53X1ljRGhNWGJnMEJIVHg2YURtM3laYlJETE1qM3ZJNVM3M21BSU5iY3dvbEVTZHU2UEI5bzN3emo2ZFA3WjJjQXNVSTZ6RmxwaFZVa2ZZYU9kNE9KcFJROVlTUl8wR1F0SkNvYzFVRkZOWUQ4eXJaZUNySXZOYllnQmhocnFtSFJ0NFhBRHl5NkM2bVlTNXN3QUJJR0syMWlUY2FjNWJFN3RqNEh5NG1kdHJISTV3clI2dkxWeXN2TzRoMzJjV1JNR0hOLWgzMGkwRVVEQkRGQzNGbjU0TFZIWWpTNGhNQlBsYzNOWUVlNUtINWVLYTUySXlOTUlnSHlvLVhpSEdsZFZBRnhjTmNVV1hQdmMyUGVvd3JTOWpncXJ1ODl5LWJNNnN6cHY2dFpXLWhpYVN1aUFVT3lOU2lKbWVoblZkSkhSeVVIaFgxN2NBVk83YVJMa2N5VU5pWGc4QlJUSi1BQTAyWFEwRWhQcG91LTNhZGdvbkotRXpkNmxncERzS25rbWtsSjhBbWVUbTkxRHBvcWdNdTFMdElQVlZSU3BOLVBKbFR5NzZlM19aSlcxX2hiTTJZOHYtNWkzSU5Qa29BWDR2OA==","email":"tradingcontentdrive@gmail.com"},"registry.redhat.io":{"auth":"fHVoYy1wb29sLTU1MTkyYjE2LWJjNDgtNGQ4OC1hOWI2LWFkNWVkZWVjMTgxYjpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSXhNemszTVRNM016bGtNbVEwTVRSbE9EZGpZMlU0TTJSbU4ySTBaVFJoT1NKOS5sOE9XNjhYYTdOYmlWR1pCWlVvcGlkYnh5bU90cmpzUXZacFVYQjg3MTdvLUcwQjdMZy1vRG1sb2ZxLUxwLWtMcHdQdzVsejZydDZjTUlWZ0ZTOXZXeUJ6a0l3bjEzTlo4RlppT0MzaWZOMlZCVW9xVVVORkNlYU0xVVVfWmtrWXVhZ09ET0ZRYUZIUkVyd0x0RGxvMEZ4VW5zc0txQUM3cnpEdHhiR0xacUd6c0RjdDg5bXVIZ1lHZHMzdzd0am0xd3V0VTQxdGZzdWd2RFlUTEdfYTVCUy0waW9WSnlrMm9jbS1OYU53X1ljRGhNWGJnMEJIVHg2YURtM3laYlJETE1qM3ZJNVM3M21BSU5iY3dvbEVTZHU2UEI5bzN3emo2ZFA3WjJjQXNVSTZ6RmxwaFZVa2ZZYU9kNE9KcFJROVlTUl8wR1F0SkNvYzFVRkZOWUQ4eXJaZUNySXZOYllnQmhocnFtSFJ0NFhBRHl5NkM2bVlTNXN3QUJJR0syMWlUY2FjNWJFN3RqNEh5NG1kdHJISTV3clI2dkxWeXN2TzRoMzJjV1JNR0hOLWgzMGkwRVVEQkRGQzNGbjU0TFZIWWpTNGhNQlBsYzNOWUVlNUtINWVLYTUySXlOTUlnSHlvLVhpSEdsZFZBRnhjTmNVV1hQdmMyUGVvd3JTOWpncXJ1ODl5LWJNNnN6cHY2dFpXLWhpYVN1aUFVT3lOU2lKbWVoblZkSkhSeVVIaFgxN2NBVk83YVJMa2N5VU5pWGc4QlJUSi1BQTAyWFEwRWhQcG91LTNhZGdvbkotRXpkNmxncERzS25rbWtsSjhBbWVUbTkxRHBvcWdNdTFMdElQVlZSU3BOLVBKbFR5NzZlM19aSlcxX2hiTTJZOHYtNWkzSU5Qa29BWDR2OA==","email":"tradingcontentdrive@gmail.com"}}}'
sshKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6IRCMyxnuc1XXNjcrwmCysbktAH9u7OQZSy+hQOu5y root@bastion"apiVersion: v1
baseDomain: manohar.in
metadata:
name: sno
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 1
networking:
networkType: OVNKubernetes
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16
platform:
none: {}
bootstrapInPlace:
installationDisk: /dev/sda
pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"a3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfMzgzNTRmOTBhMGUzNDA4MDg5ODRkOGM0ZDU2YWE4NjA6M1lWSFA5MEs0S0FJRU5WMDBXSUdJRU42TlNPTFhUQVdSV1JTUlVKSEI3RDc3U1UwSkdPWUdWSkdCM1E1NlZCUg==","email":"tradingcontentdrive@gmail.com"},"quay.io":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfMzgzNTRmOTBhMGUzNDA4MDg5ODRkOGM0ZDU2YWE4NjA6M1lWSFA5MEs0S0FJRU5WMDBXSUdJRU42TlNPTFhUQVdSV1JTUlVKSEI3RDc3U1UwSkdPWUdWSkdCM1E1NlZCUg==","email":"tradingcontentdrive@gmail.com"},"registry.connect.redhat.com":{"auth":"fHVoYy1wb29sLTU1MTkyYjE2LWJjNDgtNGQ4OC1hOWI2LWFkNWVkZWVjMTgxYjpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSXhNemszTVRNM016bGtNbVEwTVRSbE9EZGpZMlU0TTJSbU4ySTBaVFJoT1NKOS5sOE9XNjhYYTdOYmlWR1pCWlVvcGlkYnh5bU90cmpzUXZacFVYQjg3MTdvLUcwQjdMZy1vRG1sb2ZxLUxwLWtMcHdQdzVsejZydDZjTUlWZ0ZTOXZXeUJ6a0l3bjEzTlo4RlppT0MzaWZOMlZCVW9xVVVORkNlYU0xVVVfWmtrWXVhZ09ET0ZRYUZIUkVyd0x0RGxvMEZ4VW5zc0txQUM3cnpEdHhiR0xacUd6c0RjdDg5bXVIZ1lHZHMzdzd0am0xd3V0VTQxdGZzdWd2RFlUTEdfYTVCUy0waW9WSnlrMm9jbS1OYU53X1ljRGhNWGJnMEJIVHg2YURtM3laYlJETE1qM3ZJNVM3M21BSU5iY3dvbEVTZHU2UEI5bzN3emo2ZFA3WjJjQXNVSTZ6RmxwaFZVa2ZZYU9kNE9KcFJROVlTUl8wR1F0SkNvYzFVRkZOWUQ4eXJaZUNySXZOYllnQmhocnFtSFJ0NFhBRHl5NkM2bVlTNXN3QUJJR0syMWlUY2FjNWJFN3RqNEh5NG1kdHJISTV3clI2dkxWeXN2TzRoMzJjV1JNR0hOLWgzMGkwRVVEQkRGQzNGbjU0TFZIWWpTNGhNQlBsYzNOWUVlNUtINWVLYTUySXlOTUlnSHlvLVhpSEdsZFZBRnhjTmNVV1hQdmMyUGVvd3JTOWpncXJ1ODl5LWJNNnN6cHY2dFpXLWhpYVN1aUFVT3lOU2lKbWVoblZkSkhSeVVIaFgxN2NBVk83YVJMa2N5VU5pWGc4QlJUSi1BQTAyWFEwRWhQcG91LTNhZGdvbkotRXpkNmxncERzS25rbWtsSjhBbWVUbTkxRHBvcWdNdTFMdElQVlZSU3BOLVBKbFR5NzZlM19aSlcxX2hiTTJZOHYtNWkzSU5Qa29BWDR2OA==","email":"tradingcontentdrive@gmail.com"},"registry.redhat.io":{"auth":"fHVoYy1wb29sLTU1MTkyYjE2LWJjNDgtNGQ4OC1hOWI2LWFkNWVkZWVjMTgxYjpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSXhNemszTVRNM016bGtNbVEwTVRSbE9EZGpZMlU0TTJSbU4ySTBaVFJoT1NKOS5sOE9XNjhYYTdOYmlWR1pCWlVvcGlkYnh5bU90cmpzUXZacFVYQjg3MTdvLUcwQjdMZy1vRG1sb2ZxLUxwLWtMcHdQdzVsejZydDZjTUlWZ0ZTOXZXeUJ6a0l3bjEzTlo4RlppT0MzaWZOMlZCVW9xVVVORkNlYU0xVVVfWmtrWXVhZ09ET0ZRYUZIUkVyd0x0RGxvMEZ4VW5zc0txQUM3cnpEdHhiR0xacUd6c0RjdDg5bXVIZ1lHZHMzdzd0am0xd3V0VTQxdGZzdWd2RFlUTEdfYTVCUy0waW9WSnlrMm9jbS1OYU53X1ljRGhNWGJnMEJIVHg2YURtM3laYlJETE1qM3ZJNVM3M21BSU5iY3dvbEVTZHU2UEI5bzN3emo2ZFA3WjJjQXNVSTZ6RmxwaFZVa2ZZYU9kNE9KcFJROVlTUl8wR1F0SkNvYzFVRkZOWUQ4eXJaZUNySXZOYllnQmhocnFtSFJ0NFhBRHl5NkM2bVlTNXN3QUJJR0syMWlUY2FjNWJFN3RqNEh5NG1kdHJISTV3clI2dkxWeXN2TzRoMzJjV1JNR0hOLWgzMGkwRVVEQkRGQzNGbjU0TFZIWWpTNGhNQlBsYzNOWUVlNUtINWVLYTUySXlOTUlnSHlvLVhpSEdsZFZBRnhjTmNVV1hQdmMyUGVvd3JTOWpncXJ1ODl5LWJNNnN6cHY2dFpXLWhpYVN1aUFVT3lOU2lKbWVoblZkSkhSeVVIaFgxN2NBVk83YVJMa2N5VU5pWGc4QlJUSi1BQTAyWFEwRWhQcG91LTNhZGdvbkotRXpkNmxncERzS25rbWtsSjhBbWVUbTkxRHBvcWdNdTFMdElQVlZSU3BOLVBKbFR5NzZlM19aSlcxX2hiTTJZOHYtNWkzSU5Qa29BWDR2OA==","email":"tradingcontentdrive@gmail.com"}}}'
sshKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6IRCMyxnuc1XXNjcrwmCysbktAH9u7OQZSy+hQOu5y root@bastion"Generate the Single Node OpenShift ignition files:
openshift-install create single-node-ignition-configopenshift-install create single-node-ignition-configVerify that the required installation artifacts are created:
lslsExpected output:
auth/
bootstrap-in-place-for-live-iso.ign
metadata.json
worker.ignauth/
bootstrap-in-place-for-live-iso.ign
metadata.json
worker.ignThe most important file is:
bootstrap-in-place-for-live-iso.ignbootstrap-in-place-for-live-iso.ignThis ignition file contains all configuration required to bootstrap the Single Node OpenShift cluster.
Install CoreOS Installer
Install the CoreOS installer utility that is used to embed ignition and network configuration into the RHCOS ISO.
dnf install -y coreos-installerdnf install -y coreos-installerVerify installation:
coreos-installer --versioncoreos-installer --versionEmbed Ignition Into the RHCOS ISO
Embed the generated ignition file into the RHCOS live ISO.
coreos-installer iso ignition embed \
-fi bootstrap-in-place-for-live-iso.ign \
rhcos-4.21.0-x86_64-live-iso.x86_64.isocoreos-installer iso ignition embed \
-fi bootstrap-in-place-for-live-iso.ign \
rhcos-4.21.0-x86_64-live-iso.x86_64.isoTo assign the static IP 192.168.0.250 to the SNO VM, create a NetworkManager connection file before embedding it into the ISO:
cat > static.nmconnection <<EOF
[connection]
id=ens18
type=ethernet
interface-name=ens18
[ipv4]
address1=192.168.0.250/24,192.168.0.1
dns=192.168.0.200;
method=manual
[ipv6]
method=disabled
cat > static.nmconnection <<EOF
[connection]
id=ens18
type=ethernet
interface-name=ens18
[ipv4]
address1=192.168.0.250/24,192.168.0.1
dns=192.168.0.200;
method=manual
[ipv6]
method=disabled
Then embed it into the RHCOS ISO:
Embed Static Network Configuration (Optional)
If static networking is required, create a NetworkManager keyfile and embed it into the ISO.
coreos-installer iso network embed \
-n static.nmconnection \
/root/rhcos-4.21.0-x86_64-live-iso.x86_64.isocoreos-installer iso network embed \
-n static.nmconnection \
/root/rhcos-4.21.0-x86_64-live-iso.x86_64.isoThe resulting ISO is now a bootable Single Node OpenShift installation ISO that can be attached to the target VM or physical server for deployment.
Verify:
[root@bastion ~]# coreos-installer iso network extract \
/root/rhcos-4.21.0-x86_64-live-iso.x86_64.iso
########## static.nmconnection ##########
[connection]
id=ens18
type=ethernet
interface-name=ens18
[ipv4]
address1=192.168.0.250/24,192.168.0.1
dns=192.168.0.200;
method=manual
[ipv6]
method=disabled[root@bastion ~]# coreos-installer iso network extract \
/root/rhcos-4.21.0-x86_64-live-iso.x86_64.iso
########## static.nmconnection ##########
[connection]
id=ens18
type=ethernet
interface-name=ens18
[ipv4]
address1=192.168.0.250/24,192.168.0.1
dns=192.168.0.200;
method=manual
[ipv6]
method=disabledThis configures:
| Parameter | Value |
| ---------- | ------------------- |
| IP Address | 192.168.0.250 |
| Netmask | /24 (255.255.255.0) |
| Gateway | 192.168.0.1 |
| DNS Server | 192.168.0.200 |
| Interface | ens18 || Parameter | Value |
| ---------- | ------------------- |
| IP Address | 192.168.0.250 |
| Netmask | /24 (255.255.255.0) |
| Gateway | 192.168.0.1 |
| DNS Server | 192.168.0.200 |
| Interface | ens18 |After booting the VM from the modified ISO, verify:
ip aip aExpected:
ens18
inet 192.168.0.250/24ens18
inet 192.168.0.250/24And verify DNS:
dig api.sno.manohar.indig api.sno.manohar.inCopy Modified RHCOS ISO Back to Proxmox
After embedding the ignition file and static network configuration into the RHCOS ISO, copy the modified ISO back to the Proxmox server so it can be attached to the SNO VM. This ISO will be used to create the Single Node OpenShift virtual machine.
# Copy the ISO from Bastion to Proxmox
scp root@192.168.0.201:/root/rhcos-4.21.0-x86_64-live-iso.x86_64.iso \
/var/lib/vz/template/iso/sno-4.21.iso# Copy the ISO from Bastion to Proxmox
scp root@192.168.0.201:/root/rhcos-4.21.0-x86_64-live-iso.x86_64.iso \
/var/lib/vz/template/iso/sno-4.21.isoVerify the ISO is available on the Proxmox server:
ls -lh /var/lib/vz/template/iso/sno-4.21.isols -lh /var/lib/vz/template/iso/sno-4.21.isoExpected output:
-rw-r--r-- 1 root root 1.8G sno-4.21.iso-rw-r--r-- 1 root root 1.8G sno-4.21.isoUse sno-4.21.iso as the boot media when creating the Single Node OpenShift virtual machine in Proxmox. The ISO already contains:
- OpenShift Bootstrap Ignition
- Static Network Configuration
- SSH Key Configuration
- Single Node OpenShift Bootstrap-in-Place Configuration
No additional ignition server or bootstrap node is required.
The VM can now be created and booted directly using sno-4.21.iso.
Create the Single Node OpenShift VM in Proxmox
Once the customized sno-4.21.iso is available on the Proxmox server, create a virtual machine that will host the Single Node OpenShift cluster.
1. Create a New Virtual Machine
- Login to the Proxmox Web Console.
- Click Create VM.
- Configure the following:
| Category | Setting | Value |
| -------- | ---------- | ------------------------- |
| General | VM ID | 100 (or any available ID) |
| General | Name | sno |
| General | OS Type | Linux |
| General | ISO Image | sno-4.21.iso |
| System | BIOS | OVMF (UEFI) |
| System | Machine | q35 |
| System | EFI Disk | Enabled |
| System | TPM | Optional |
| Disk | Bus/Device | VirtIO SCSI |
| Disk | Disk Size | 150 GB or larger |
| Disk | Cache | Default |
| CPU | Sockets | 1 |
| CPU | Cores | 8 |
| CPU | Type | Host |
| Memory | RAM | 16384 MB (16 GB) minimum |
| Network | Bridge | vmbr0 |
| Network | Model | VirtIO |
| Network | VLAN | Optional || Category | Setting | Value |
| -------- | ---------- | ------------------------- |
| General | VM ID | 100 (or any available ID) |
| General | Name | sno |
| General | OS Type | Linux |
| General | ISO Image | sno-4.21.iso |
| System | BIOS | OVMF (UEFI) |
| System | Machine | q35 |
| System | EFI Disk | Enabled |
| System | TPM | Optional |
| Disk | Bus/Device | VirtIO SCSI |
| Disk | Disk Size | 150 GB or larger |
| Disk | Cache | Default |
| CPU | Sockets | 1 |
| CPU | Cores | 8 |
| CPU | Type | Host |
| Memory | RAM | 16384 MB (16 GB) minimum |
| Network | Bridge | vmbr0 |
| Network | Model | VirtIO |
| Network | VLAN | Optional |
2. Select the Uploaded ISO
3. Configure Disk
4. Configure CPU
5. Configure Memory
7. Select Default Network
8. Start the VM
After reviewing the configuration:
9. Check Console
The RHCOS live ISO boots automatically and starts the Bootstrap-in-Place installation process using the embedded ignition configuration.
Access the OpenShift Cluster
After the installation is complete, configure the OpenShift CLI to communicate with the cluster.
Set the kubeconfig file:
export KUBECONFIG=auth/kubeconfigexport KUBECONFIG=auth/kubeconfigVerify cluster access:
oc get nodesoc get nodesSSH into the node
ssh-keygen -f "/root/.ssh/known_hosts" -R "192.168.0.250" && ssh -i /root/ocp-key core@192.168.0.250
ssh core@192.168.0.250
sudo journalctl -b -f -u release-image.service -u bootkube.service -u node-image-pull.servicessh-keygen -f "/root/.ssh/known_hosts" -R "192.168.0.250" && ssh -i /root/ocp-key core@192.168.0.250
ssh core@192.168.0.250
sudo journalctl -b -f -u release-image.service -u bootkube.service -u node-image-pull.serviceThe installation is complete when all Cluster Operators report Available=True and the node reaches the Ready state.
If cluster is not Ready yet. Then do below steps
Check the running container inside the node
CONTAINER IMAGE
CREATED STATE NAME ATTEMPT POD ID POD
NAMESPACE
fb316e59c23a8 1f346ead4c33d3b45fe35dbaf31aa28841ec9d90159984526028aa8c9f124ff5
About a minute ago Running kube-controller-manager 1 5d0c9993fcce4 bootstrap-kube-cont
roller-manager-sno.manohar.in kube-system
ad4f9137f8429 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:c1adea1a9bbe0bb607b36fd996edeeeb33d04badb9c6204ba63bf45a744ea36
0 About a minute ago Running cluster-policy-controller 0 5d0c9993fcce4 bootstrap-kube-cont
roller-manager-sno.manohar.in kube-system
4fe626a1849b0 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:95ecc9b2e6efbdea01353946364ad49d20a23959893c3756e4c55ec2766bb52
c About a minute ago Running kube-scheduler 0 a0985d6a0f495 bootstrap-kube-sche
duler-sno.manohar.in kube-system
2b492ca0de78b d22d74de8c5947d04984b5d45391b6307701760bb22a305c8014934e661c7588
About a minute ago Running kube-apiserver-insecure-readyz 0 727177d806df4 bootstrap-kube-apis
erver-sno.manohar.in openshift-kube-apiserver
5cb8b288e5832 1f346ead4c33d3b45fe35dbaf31aa28841ec9d90159984526028aa8c9f124ff5
About a minute ago Running kube-apiserver 0 727177d806df4 bootstrap-kube-apis
erver-sno.manohar.in openshift-kube-apiserver
bb9e6f79e4f66 e2fd08a37a54f9d55e141a0f360a4339f65f955e64007b5daee1b244efa28801
2 minutes ago Running cloud-credential-operator 0 ed6efc6e6bbe5 cloud-credential-op
erator-sno.manohar.in openshift-cloud-credential-operator
1fabfe863b412 fa11a41e639118d81aaa136c911c5103d73a52a439a518d23bb7b8c76baa4dad
3 minutes ago Running machine-config-server 0 2245159eba6e4 bootstrap-machine-c
onfig-operator-sno.manohar.in default
218d1e6b018ea d6609fce858c16b9182e2f19478d11693e00ee3f030637885d13715feda9ccfe
7 minutes ago Running etcd 0 4abee1608273b etcd-sno.manohar.in
-sno.manohar.in openshift-etcd
007b8067d4e89 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:fc4787f69db199e7642c5cf5188cffac3762a479b65a2e234ae07db89a295b9
8 7 minutes ago Running etcdctl 0 4abee1608273b etcd-sno.manohar.in
-sno.manohar.in openshift-etcdCONTAINER IMAGE
CREATED STATE NAME ATTEMPT POD ID POD
NAMESPACE
fb316e59c23a8 1f346ead4c33d3b45fe35dbaf31aa28841ec9d90159984526028aa8c9f124ff5
About a minute ago Running kube-controller-manager 1 5d0c9993fcce4 bootstrap-kube-cont
roller-manager-sno.manohar.in kube-system
ad4f9137f8429 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:c1adea1a9bbe0bb607b36fd996edeeeb33d04badb9c6204ba63bf45a744ea36
0 About a minute ago Running cluster-policy-controller 0 5d0c9993fcce4 bootstrap-kube-cont
roller-manager-sno.manohar.in kube-system
4fe626a1849b0 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:95ecc9b2e6efbdea01353946364ad49d20a23959893c3756e4c55ec2766bb52
c About a minute ago Running kube-scheduler 0 a0985d6a0f495 bootstrap-kube-sche
duler-sno.manohar.in kube-system
2b492ca0de78b d22d74de8c5947d04984b5d45391b6307701760bb22a305c8014934e661c7588
About a minute ago Running kube-apiserver-insecure-readyz 0 727177d806df4 bootstrap-kube-apis
erver-sno.manohar.in openshift-kube-apiserver
5cb8b288e5832 1f346ead4c33d3b45fe35dbaf31aa28841ec9d90159984526028aa8c9f124ff5
About a minute ago Running kube-apiserver 0 727177d806df4 bootstrap-kube-apis
erver-sno.manohar.in openshift-kube-apiserver
bb9e6f79e4f66 e2fd08a37a54f9d55e141a0f360a4339f65f955e64007b5daee1b244efa28801
2 minutes ago Running cloud-credential-operator 0 ed6efc6e6bbe5 cloud-credential-op
erator-sno.manohar.in openshift-cloud-credential-operator
1fabfe863b412 fa11a41e639118d81aaa136c911c5103d73a52a439a518d23bb7b8c76baa4dad
3 minutes ago Running machine-config-server 0 2245159eba6e4 bootstrap-machine-c
onfig-operator-sno.manohar.in default
218d1e6b018ea d6609fce858c16b9182e2f19478d11693e00ee3f030637885d13715feda9ccfe
7 minutes ago Running etcd 0 4abee1608273b etcd-sno.manohar.in
-sno.manohar.in openshift-etcd
007b8067d4e89 quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:fc4787f69db199e7642c5cf5188cffac3762a479b65a2e234ae07db89a295b9
8 7 minutes ago Running etcdctl 0 4abee1608273b etcd-sno.manohar.in
-sno.manohar.in openshift-etcdCheck whether the OpenShift Kubernetes API Server is reachable and running.
[core@sno ~]$ curl -k https://api.sno.manohar.in:6443/version
{
"major": "1",
"minor": "34",
"emulationMajor": "1",
"emulationMinor": "34",
"minCompatibilityMajor": "1",
"minCompatibilityMinor": "33",
"gitVersion": "v1.34.8",
"gitCommit": "7838e4cd9555d44f788308bebee8877abd9ba675",
"gitTreeState": "clean",
"buildDate": "2026-05-14T17:24:27Z",
"goVersion": "go1.24.13 (Red Hat 1.24.13-5.el9_6) X:strictfipsruntime",
"compiler": "gc",
"platform": "linux/amd64"[core@sno ~]$ curl -k https://api.sno.manohar.in:6443/version
{
"major": "1",
"minor": "34",
"emulationMajor": "1",
"emulationMinor": "34",
"minCompatibilityMajor": "1",
"minCompatibilityMinor": "33",
"gitVersion": "v1.34.8",
"gitCommit": "7838e4cd9555d44f788308bebee8877abd9ba675",
"gitTreeState": "clean",
"buildDate": "2026-05-14T17:24:27Z",
"goVersion": "go1.24.13 (Red Hat 1.24.13-5.el9_6) X:strictfipsruntime",
"compiler": "gc",
"platform": "linux/amd64"If you get:
Could not resolve hostCould not resolve hostit means DNS is not resolving api.sno.manohar.in.
Many people use this command during SNO installation to quickly verify that the Kubernetes API has started before checking nodes and operators.
Verify OpenShift API Server Availability
During the installation, you can verify whether the Kubernetes API Server is up and responding.
Check API readiness locally on the SNO node:
curl -k https://localhost:6443/readyzcurl -k https://localhost:6443/readyzExpected output:
okokCheck API readiness from the Bastion server using the OpenShift CLI:
oc get --raw='/readyz'oc get --raw='/readyz'Expected output:
okokAn ok response confirms that the OpenShift API Server is healthy and ready to serve requests.
Check Cluster reachability
[root@bastion ~]# oc get nodes
NAME STATUS ROLES AGE VERSION
sno.manohar.in Ready control-plane,master,worker 78m v1.34.8[root@bastion ~]# oc get nodes
NAME STATUS ROLES AGE VERSION
sno.manohar.in Ready control-plane,master,worker 78m v1.34.8Verify Cluster Installation Progress
During the installation, you can monitor the overall cluster installation status.
oc get clusterversionoc get clusterversionExample output during installation:
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
version 4.21.19 False True 20m Working towards 4.21.19: 67% completeNAME VERSION AVAILABLE PROGRESSING SINCE STATUS
version 4.21.19 False True 20m Working towards 4.21.19: 67% completeThis indicates that the cluster installation is still in progress and operators are being deployed and configured.
Once the installation completes successfully, the output changes to:
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
version 4.21.19 True False 49m Cluster version is 4.21.19NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
version 4.21.19 True False 49m Cluster version is 4.21.19This confirms that:
- OpenShift installation is complete
- Cluster Version Operator is healthy
- All required operators have successfully reconciled
- The cluster is ready for use
Verify Machine Config Pool Status
The Machine Config Pool (MCP) status indicates whether the cluster configuration has been successfully applied to all nodes.
oc get mcpoc get mcpExample output:
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
master rendered-master-b893cc5663fc78068b45a51787333961 True False False 1 1 1 0 67m
worker rendered-worker-598e6fd7e73896b6bb01a552da105f1f True False False 0 0 0 0 67mNAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
master rendered-master-b893cc5663fc78068b45a51787333961 True False False 1 1 1 0 67m
worker rendered-worker-598e6fd7e73896b6bb01a552da105f1f True False False 0 0 0 0 67mImportant fields:
| Field | Expected Value |
| -------- | -------------- |
| UPDATED | True |
| UPDATING | False |
| DEGRADED | False || Field | Expected Value |
| -------- | -------------- |
| UPDATED | True |
| UPDATING | False |
| DEGRADED | False |This confirms that:
- Machine configuration has been successfully applied.
- No configuration updates are currently in progress.
- No machine configuration errors exist.
- The Single Node OpenShift control-plane node is fully updated and healthy.
Verify Cluster Operators
Check the status of all OpenShift Cluster Operators:
[root@bastion ~]# oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.21.19 True False False 50m
baremetal 4.21.19 True False False 68m
cloud-controller-manager 4.21.19 True False False 63m
cloud-credential 4.21.19 True False False 95m
cluster-autoscaler 4.21.19 True False False 64m
config-operator 4.21.19 True False False 71m
console 4.21.19 True False False 50m
control-plane-machine-set 4.21.19 True False False 64m
csi-snapshot-controller 4.21.19 True False False 61m
dns 4.21.19 True False False 61m
etcd 4.21.19 True False False 68m
image-registry 4.21.19 True False False 57m
ingress 4.21.19 True False False 68m
insights 4.21.19 True False False 57m
kube-apiserver 4.21.19 True False False 61m
kube-controller-manager 4.21.19 True False False 61m
kube-scheduler 4.21.19 True False False 58m
kube-storage-version-migrator 4.21.19 True False False 70m
machine-api 4.21.19 True False False 57m
machine-approver 4.21.19 True False False 64m
machine-config 4.21.19 True False False 63m
marketplace 4.21.19 True False False 68m
monitoring 4.21.19 True False False 51m
network 4.21.19 True False False 72m
node-tuning 4.21.19 True False False 61m
olm 4.21.19 True False False 70m
openshift-apiserver 4.21.19 True False False 58m
openshift-controller-manager 4.21.19 True False False 62m
openshift-samples 4.21.19 True False False 58m
operator-lifecycle-manager 4.21.19 True False False 62m
operator-lifecycle-manager-catalog 4.21.19 True False False 62m
operator-lifecycle-manager-packageserver 4.21.19 True False False 61m
service-ca 4.21.19 True False False 71m
storage 4.21.19 True False False 62m
| Field | Expected Value |
| ----------- | -------------- |
| AVAILABLE | True |
| PROGRESSING | False |
| DEGRADED | False |[root@bastion ~]# oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.21.19 True False False 50m
baremetal 4.21.19 True False False 68m
cloud-controller-manager 4.21.19 True False False 63m
cloud-credential 4.21.19 True False False 95m
cluster-autoscaler 4.21.19 True False False 64m
config-operator 4.21.19 True False False 71m
console 4.21.19 True False False 50m
control-plane-machine-set 4.21.19 True False False 64m
csi-snapshot-controller 4.21.19 True False False 61m
dns 4.21.19 True False False 61m
etcd 4.21.19 True False False 68m
image-registry 4.21.19 True False False 57m
ingress 4.21.19 True False False 68m
insights 4.21.19 True False False 57m
kube-apiserver 4.21.19 True False False 61m
kube-controller-manager 4.21.19 True False False 61m
kube-scheduler 4.21.19 True False False 58m
kube-storage-version-migrator 4.21.19 True False False 70m
machine-api 4.21.19 True False False 57m
machine-approver 4.21.19 True False False 64m
machine-config 4.21.19 True False False 63m
marketplace 4.21.19 True False False 68m
monitoring 4.21.19 True False False 51m
network 4.21.19 True False False 72m
node-tuning 4.21.19 True False False 61m
olm 4.21.19 True False False 70m
openshift-apiserver 4.21.19 True False False 58m
openshift-controller-manager 4.21.19 True False False 62m
openshift-samples 4.21.19 True False False 58m
operator-lifecycle-manager 4.21.19 True False False 62m
operator-lifecycle-manager-catalog 4.21.19 True False False 62m
operator-lifecycle-manager-packageserver 4.21.19 True False False 61m
service-ca 4.21.19 True False False 71m
storage 4.21.19 True False False 62m
| Field | Expected Value |
| ----------- | -------------- |
| AVAILABLE | True |
| PROGRESSING | False |
| DEGRADED | False |Retrieve the initial kubeadmin password:
cat auth/kubeadmin-passwordcat auth/kubeadmin-passwordUse this password to log in to the OpenShift Web Console:
https://console-openshift-console.apps.sno.manohar.inhttps://console-openshift-console.apps.sno.manohar.inThe kubeadmin user and password are generated automatically during installation and are required for the first login to the cluster.
[root@bastion ~]# oc whoami --show-console
https://console-openshift-console.apps.sno.manohar.in[root@bastion ~]# oc whoami --show-console
https://console-openshift-console.apps.sno.manohar.inAdd Host Entries on the Windows Client
To access the OpenShift Web Console from a Windows machine without configuring a wildcard DNS entry, add the required host entries to the Windows hosts file.
Open Notepad as Administrator and edit:
C:\Windows\System32\drivers\etc\hostsC:\Windows\System32\drivers\etc\hostsAdd the following entries:
192.168.0.250 sno.manohar.in
192.168.0.250 api.sno.manohar.in
192.168.0.250 api-int.sno.manohar.in
192.168.0.250 console-openshift-console.apps.sno.manohar.in
192.168.0.250 oauth-openshift.apps.sno.manohar.in192.168.0.250 sno.manohar.in
192.168.0.250 api.sno.manohar.in
192.168.0.250 api-int.sno.manohar.in
192.168.0.250 console-openshift-console.apps.sno.manohar.in
192.168.0.250 oauth-openshift.apps.sno.manohar.inSave the file and flush the DNS cache:
ipconfig /flushdnsipconfig /flushdnsVerify name resolution:
ping console-openshift-console.apps.sno.manohar.in
ping oauth-openshift.apps.sno.manohar.in
| Hostname | IP Address |
| --------------------------------------------- | ------------- |
| sno.manohar.in | 192.168.0.250 |
| api.sno.manohar.in | 192.168.0.250 |
| api-int.sno.manohar.in | 192.168.0.250 |
| console-openshift-console.apps.sno.manohar.in | 192.168.0.250 |
| oauth-openshift.apps.sno.manohar.in | 192.168.0.250 |ping console-openshift-console.apps.sno.manohar.in
ping oauth-openshift.apps.sno.manohar.in
| Hostname | IP Address |
| --------------------------------------------- | ------------- |
| sno.manohar.in | 192.168.0.250 |
| api.sno.manohar.in | 192.168.0.250 |
| api-int.sno.manohar.in | 192.168.0.250 |
| console-openshift-console.apps.sno.manohar.in | 192.168.0.250 |
| oauth-openshift.apps.sno.manohar.in | 192.168.0.250 |Once the entries are added, access the OpenShift Console:
https://console-openshift-console.apps.sno.manohar.inhttps://console-openshift-console.apps.sno.manohar.in
Blog on Installing OpenShift 4.19.10 on Bare Metal (User-Provisioned Infrastructure)
Installing OpenShift 4.19.10 on Bare Metal (User-Provisioned Infrastructure) A complete walkthrough of DNS, nodes, networking, and validation for OCP 4.19.10 UPI.
Deploy AAP on Openshift Cluster
Deploying Ansible Automation Platform on OpenShift Every DevOps engineer eventually hits the point where "just run the playbook" stops scaling. You have fifty clusters…
Connect With Me
Manohar Shetty - VOIS | LinkedIn DevOps Engineer with 8 years of IT experience, including 6+ years in DevOps, Kubernetes... · Experience: VOIS ·…
🌐 Portfolio
Manohar Shetty | Lead DevOps Engineer Served as SPOC for major projects including Bangalore Airport and BITS Pilani, delivering OpenStack, OpenShift…
YouTube
Hello Devops Hi, This channel is created to post DevOps related content. With 5 years of experience in DevOps, I have gained…
Conclusion:
That's pretty much how sno came together for me. one node doing the job of what usually takes a handful of machines, and honestly it held up better than i expected. if you've been holding off on trying openshift because the hardware ask felt like too much, this is probably the easiest door in. i'm planning to push it further next, maybe see how it handles a real workload instead of just sitting idle, so more on that soon.
if this helped you in any way, hit that clap button, costs nothing and genuinely helps the post reach more people. and if you know someone struggling with the whole "i need three masters just to try openshift" thing, share this with them, might save them a weekend like it saved mine.