• Recent blogs

    AWS: How To Install OpenShift Origin (OKD) Cluster on CentOS 7 / Redhat 7

    How To Install OpenShift Origin (OKD) Cluster on CentOS 7 / Redhat 7

    The Origin Community Distribution of Kubernetes that powers Red Hat OpenShift. Built around a core of OCI container packaging and Kubernetes container cluster management, OKD is also augmented by application life-cycle management functionality and DevOps tooling. OKD provides a complete open source container application platform.

    Enough talks, Lets check how to get it installed.  This guide will dive to the installation of OpenShift Origin (OKD) 3.x on a CentOS 7 VM.


    Hardware Configurations:

    I've created a t2.large instance in AWS for this setup.

    My hardware Specs:
    2 vCPUs
    8 GB RAM (Minimum requirement is 4GB)
    50 GB free disc space
    CentOS 7 OS

    You can run it with following standard configurations:

    4 vCPUs
    16 GB RAM (Minimum requirement is 4GB)
    50 GB free disc space
    CentOS 7 OS

    Update your system

    root@openshiftserver#yum -y update

    Install and Configure Docker

    OpenShift required docker engine on the host machine for running containers. Install Docker on CentOS 7.

    root@openshiftserver# yum install -y yum-utils device-mapper-persistent-data lvm2

    Add docker Repository:

    root@openshiftserver# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    root@openshiftserver# yum install -y  docker-ce docker-ce-cli containerd.io

    Add your standard user account to docker group.

    root@openshiftserver# usermod -aG docker $USER

    After installing Docker, configure the Docker daemon with an insecure registry parameter of

    root@openshiftserver# mkdir /etc/docker /etc/containers

    root@openshiftserver# tee /etc/containers/registries.conf<<EOF
    registries = ['']

    root@ocserver# tee /etc/docker/daemon.json<<EOF
       "insecure-registries": [

    We need to reload systemd and restart the Docker daemon after editing the config.

    root@openshiftserver# systemctl daemon-reload
    root@openshiftserver# systemctl restart docker

    Enable Docker to start at boot: 

    root@openshiftserver# systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    Then enable IP forwarding on your system.

    echo "net.ipv4.ip_forward = 1" | root@ocserver# tee -a /etc/sysctl.conf
    root@openshiftserver# sysctl -p

    Configure Firewalld: 

    Ensure that your firewall allows containers access to the OpenShift master API (8443/tcp) and DNS (53/udp) endpoints.

    DOCKER_BRIDGE=`docker network inspect -f "{{range .IPAM.Config }}{{ .Subnet }}{{end}}" bridge`
    root@openshiftserver# firewall-cmd --permanent --new-zone dockerc
    root@openshiftserver# firewall-cmd --permanent --zone dockerc --add-source $DOCKER_BRIDGE
    root@openshiftserver# firewall-cmd --permanent --zone dockerc --add-port={80,443,8443}/tcp
    root@openshiftserver# firewall-cmd --permanent --zone dockerc --add-port={53,8053}/udp
    root@openshiftserver# firewall-cmd --reload

     Download the Linux oc binary

    At this step, we can download the Linux oc binary from openshift-origin-client-tools-VERSION-linux-64bit.tar.gz and place it in your path.

    [root@openshiftserver ~]# wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
    --2020-01-20 11:55:52--  https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
    Resolving github.com (github.com)...

    [root@openshiftserver ~]# tar xvf openshift-origin-client-tools*.tar.gz

    [root@openshiftserver ~]# cd openshift-origin-client*/
    [root@openshiftserver openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit]# mv  oc kubectl  /usr/local/bin/

    Verify installation of OpenShift client utility.

    [root@openshiftserver openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit]# oc version
    oc v3.11.0+0cbc58b
    kubernetes v1.11.0+d4cacc0
    features: Basic-Auth GSSAPI Kerberos SPNEGO
    [root@openshiftserver openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit]#

    Start OpenShift Origin (OKD) 

    Now bootstrap a local single server OpenShift Origin cluster by running the following command:

    [root@openshiftserver ~]#  oc cluster up
    Getting a Docker client ...
    Checking if image openshift/origin-control-plane:v3.11 is available ...
    Checking type of volume mount ...
    Determining server IP ...
    Checking if OpenShift is already running ...
    Checking for supported Docker version (=>1.22) ...
    Checking if insecured registry is configured properly in Docker ...
    Checking if required ports are available ...
    Checking if OpenShift client is configured properly ...
    Checking if image openshift/origin-control-plane:v3.11 is available ...
    Starting OpenShift using openshift/origin-control-plane:v3.11 ...
    I0120 12:03:11.429059    2287 config.go:40] Running "create-master-config"
    I0120 12:03:13.167195    2287 config.go:46] Running "create-node-config"
    I0120 12:03:14.264675    2287 flags.go:30] Running "create-kubelet-flags"
    I0120 12:03:14.851766    2287 run_kubelet.go:49] Running "start-kubelet"
    I0120 12:03:15.036655    2287 run_self_hosted.go:181] Waiting for the kube-apiserver to be ready ...
    I0120 12:03:36.048578    2287 interface.go:26] Installing "kube-proxy" ...
    I0120 12:03:36.048609    2287 interface.go:26] Installing "kube-dns" ...
    I0120 12:03:36.048618    2287 interface.go:26] Installing "openshift-service-cert-signer-operator" ...
    I0120 12:03:36.048626    2287 interface.go:26] Installing "openshift-apiserver" ...
    I0120 12:03:36.048655    2287 apply_template.go:81] Installing "kube-proxy"
    I0120 12:03:36.048662    2287 apply_template.go:81] Installing "kube-dns"
    I0120 12:03:36.048660    2287 apply_template.go:81] Installing "openshift-apiserver"
    I0120 12:03:36.048691    2287 apply_template.go:81] Installing "openshift-service-cert-signer-operator"
    I0120 12:03:38.051961    2287 interface.go:41] Finished installing "kube-proxy" "kube-dns" "openshift-service-cert-signer-operator" "openshift-apiserver"
    I0120 12:06:14.074492    2287 run_self_hosted.go:242] openshift-apiserver available
    I0120 12:06:14.074939    2287 interface.go:26] Installing "openshift-controller-manager" ...
    I0120 12:06:14.074961    2287 apply_template.go:81] Installing "openshift-controller-manager"
    I0120 12:06:16.003356    2287 interface.go:41] Finished installing "openshift-controller-manager"
    Adding default OAuthClient redirect URIs ...
    Adding web-console ...
    Adding registry ...
    Adding router ...
    Adding sample-templates ...
    Adding persistent-volumes ...
    Adding centos-imagestreams ...
    I0120 12:06:16.018994    2287 interface.go:26] Installing "openshift-web-console-operator" ...
    I0120 12:06:16.019019    2287 interface.go:26] Installing "openshift-image-registry" ...
    I0120 12:06:16.019027    2287 interface.go:26] Installing "openshift-router" ...
    I0120 12:06:16.019035    2287 interface.go:26] Installing "sample-templates" ...
    I0120 12:06:16.019042    2287 interface.go:26] Installing "persistent-volumes" ...
    I0120 12:06:16.019050    2287 interface.go:26] Installing "centos-imagestreams" ...
    I0120 12:06:16.019101    2287 apply_list.go:67] Installing "centos-imagestreams"
    I0120 12:06:16.019327    2287 apply_template.go:81] Installing "openshift-web-console-operator"
    I0120 12:06:16.019487    2287 interface.go:26] Installing "sample-templates/sample pipeline" ...
    I0120 12:06:16.019498    2287 interface.go:26] Installing "sample-templates/mysql" ...
    I0120 12:06:16.019506    2287 interface.go:26] Installing "sample-templates/cakephp quickstart" ...
    I0120 12:06:16.019514    2287 interface.go:26] Installing "sample-templates/dancer quickstart" ...
    I0120 12:06:16.019523    2287 interface.go:26] Installing "sample-templates/jenkins pipeline ephemeral" ...
    I0120 12:06:16.019530    2287 interface.go:26] Installing "sample-templates/nodejs quickstart" ...
    I0120 12:06:16.019538    2287 interface.go:26] Installing "sample-templates/rails quickstart" ...
    I0120 12:06:16.019547    2287 interface.go:26] Installing "sample-templates/mongodb" ...
    I0120 12:06:16.019554    2287 interface.go:26] Installing "sample-templates/mariadb" ...
    I0120 12:06:16.019561    2287 interface.go:26] Installing "sample-templates/postgresql" ...
    I0120 12:06:16.019570    2287 interface.go:26] Installing "sample-templates/django quickstart" ...
    I0120 12:06:16.019578    2287 apply_list.go:67] Installing "sample-templates/mysql"
    I0120 12:06:16.019606    2287 apply_list.go:67] Installing "sample-templates/django quickstart"
    I0120 12:06:16.019745    2287 apply_list.go:67] Installing "sample-templates/cakephp quickstart"
    I0120 12:06:16.019896    2287 apply_list.go:67] Installing "sample-templates/dancer quickstart"
    I0120 12:06:16.020016    2287 apply_list.go:67] Installing "sample-templates/jenkins pipeline ephemeral"
    I0120 12:06:16.020029    2287 apply_list.go:67] Installing "sample-templates/sample pipeline"
    I0120 12:06:16.020157    2287 apply_list.go:67] Installing "sample-templates/nodejs quickstart"
    I0120 12:06:16.020219    2287 apply_list.go:67] Installing "sample-templates/rails quickstart"
    I0120 12:06:16.020340    2287 apply_list.go:67] Installing "sample-templates/mongodb"
    I0120 12:06:16.020346    2287 apply_list.go:67] Installing "sample-templates/mariadb"
    I0120 12:06:16.020463    2287 apply_list.go:67] Installing "sample-templates/postgresql"
    I0120 12:06:22.590203    2287 interface.go:41] Finished installing "sample-templates/sample pipeline" "sample-templates/mysql" "sample-templates/cakephp quickstart" "sample-templates/dancer quickstart" "sample-templates/jenkins pipeline ephemeral" "sample-templates/nodejs quickstart" "sample-templates/rails quickstart" "sample-templates/mongodb" "sample-templates/mariadb" "sample-templates/postgresql" "sample-templates/django quickstart"
    I0120 12:06:42.755148    2287 interface.go:41] Finished installing "openshift-web-console-operator" "openshift-image-registry" "openshift-router" "sample-templates" "persistent-volumes" "centos-imagestreams"
    Login to server ...
    Creating initial project "myproject" ...
    Server Information ...
    OpenShift server started.

    The server is accessible via web console at:
        https://<server ip>:8443

    You are logged in as:
        User:     developer
        Password: <any value>

    To login as administrator:
        oc login -u system:admin

    [root@openshiftserver ~]#

    [root@openshiftserver ~]# oc cluster up --routing-suffix=<ServerPublicIP>.xip.io --public-hostname=<ServerPulicDNSName>


    [root@openshiftserver ~]# oc cluster up --public-hostname=okd.example.org --routing-suffix='services.example.org'
    The OpenShift Origin cluster configuration files will be located inside the openshift.local.clusterup/ directory.

    If your cluster setup was successful, you should get a positive output for the following command.

    On AWS : This should be your public hostname.

    [root@openshiftserver ~]# oc cluster status
    Web console URL: https://okd.example.org:8443/console/

    Config is at host directory
    Volumes are at host directory
    Persistent volumes are at host directory /openshift.local.clusterup/openshift.local.pv
    Data will be discarded when cluster is destroyed

    Using OpenShift Origin :

    To login as an administrator, use: or you can access by OKD GUI.

    [root@openshiftserver /]# oc login -u system:admin
    Logged into "" as "system:admin" using existing credentials.

    You have access to the following projects and can switch between them with 'oc project <projectname>':

      * myproject

    Using project "myproject".
    [root@openshiftserver /]#

    [root@openshiftserver /]# oc get nodes
    NAME        STATUS    ROLES     AGE       VERSION
    localhost   Ready     <none>    55m       v1.11.0+d4cacc0
    [root@openshiftserver /]#

    [root@openshiftserver /]# oc get nodes -o wide
    NAME        STATUS    ROLES     AGE       VERSION           INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
    localhost   Ready     <none>    56m       v1.11.0+d4cacc0     <none>        CentOS Linux 7 (Core)   3.10.0-1062.9.1.el7.x86_64   docker://19.3.5
    [root@openshiftserver /]#

    [root@openshiftserver /]# oc describe node localhost
    Name:               localhost
    Roles:              <none>
    Labels:             beta.kubernetes.io/arch=amd64
    Annotations:        volumes.kubernetes.io/controller-managed-attach-detach=true
    CreationTimestamp:  Mon, 20 Jan 2020 12:03:38 +0000
    Taints:             <none>
    Unschedulable:      false

    [root@openshiftserver /]# oc status
    In project My Project (myproject) on server

    You have no services, deployment configs, or build configs.
    Run 'oc new-app' to create an application.
    [root@openshiftserver /]#

    To switch between projects, Please enter following command  'oc project <projectname>'

    To return to the regular developer user, login as that user:

    $ oc login
    Authentication required for (openshift)
    Username: developer
    Password: developer
    Login successful.
    Confirm if Login was successful.

    [root@openshiftserver /]# oc whoami
    [root@openshiftserver /]#

    Known Issues:

    Openshift Console redirects to (Localhost)

    No comments