09-12-2020 / blog / Jitse Klomp
CodeReady Containers

Softwareontwikkeling op OpenShift

Softwareontwikkeling is lastig, software ontwikkelen en in productie nemen nog veel lastiger. In deze nieuwe serie blogs laat ik een aantal tools en frameworks zien waarmee de weg van eerste commit tot productie een stuk soepeler afgelegd kan worden. In deze eerste tutorial bouwen we het fundament waar we de volgende blogs op verder zullen bouwen: CodeReady Containers.

 

Doelen:

· CodeReady Containers installeren

· Demo-applicatie bouwen en deployen

 

CodeReady Containers

De eenvoudigste manier om te beginnen met softwareontwikkeling op OpenShift is om CodeReady Containers (CRC) te gebruiken. CRC is een single-node OpenShift 4.1 cluster in een VM en biedt vrijwel alle functionaliteit van een volledige OpenShift installatie. Installatie is triviaal in zowel complexiteit als doorlooptijd en is mogelijk op Linux, MacOS en Windows. De bestanden die nodig zijn voor installatie staan op https://cloud.redhat.com/openshift en zijn gratis te downloaden nadat je bent ingelogd met je Red Hat account. Geen account? Meld je aan op https://developers.redhat.com, met een account krijg je niet alleen toegang tot CodeReady Containers maar ook Red Hat Enterprise Linux, Software Collections, Red Hat builds van OpenJDK en nog veel meer.

 

De voorbeelden hieronder zijn voor Linux (RHEL 8.3). Instructies voor alle platformen zijn hier te vinden.

 

Installatie:

  •  Download crc binary, pak uit en plaats in directory in $PATH:
$ wget https://mirror.openshift.com/pub/openshift-v4/clients/crc/latest/crc-linux-amd64.tar.xz

$ tar xf crc-linux-amd64.tar.xz

$ mkdir -p ~/.local/bin; mv crc-linux-*/crc ~/.local/bin

$ crc version

CodeReady Containers version: 1.19.0+94b0362

OpenShift version: 4.6.3 (embedded in executable)

  • Voer de setup van crc uit:
$ crc setup
[...]
Setup is complete, you can now run 'crc start' to start the OpenShift cluster

  • Download pull secret van cloud.redhat.com/openshift
  • Start CRC met het pull secret:
$ crc start --pull-secret-file ~/Downloads/pull-secret.txt
[...]

Started the OpenShift cluster

To access the cluster, first set up your environment by following 'crc oc-env' instructions. Then you can access it by running 'oc login -u developer -p developer https://api.crc.testing:6443'. To login as an admin, run 'oc login -u kubeadmin -p <token> https://api.crc.testing:6443'.

You can now run 'crc console' and use these credentials to access the OpenShift web console.

  • Zorg dat de met CRC meegeleverde versie van de OpenShift client (oc) in je $PATH staat en log in:
$ export PATH="~/.crc/bin/oc:$PATH"
$ oc version
Client Version: 4.6.3
Kubernetes Version: v1.19.0+9f84db3

Console

Nu CRC draait kunnen we de console openen met crc console. Je standaard browser opent op een pagina met een grote waarschuwing over een niet-vertrouwd certificaat. Dit klopt want CRC maakt gebruik van allerlei self-signed certificaten dus sta je browser toe om toch te verbinden (je browser zal dit een aantal keer vragen):

Uiteindelijk kom je op de login pagina, kies hier voor de optie htpasswd_provider en log in met developer:developer. Het resultaat:

Volgende stap is het toevoegen van een project en een demo applicatie. Kies bij “Projects: all projects” voor “Create Project” en maak een xforce-openshift-development project:

 

new project 111921483351

Uiteraard kan dit (na inloggen) ook met de CLI:

 

$ oc login -u developer -p developer https://api.crc.testing:6443 
Login successful. 

You don't have any projects. You can try to create a new project, by running

 oc new-project <projectname> $ oc new-project xforce-openshift-development --display-name="OpenShift Development" \ --description="Demo project to showcase OpenShift developer tools" 

Tip: inloggegevens zijn op te vragen met crc console –credentials.

 

Hello World!

De set-up van CodeReady Containers is nu helemaal klaar dus we kunnen beginnen met het optuigen van een eerste applicatie! Hiervoor gebruiken we een simpele demo applicatie (enkele statische html-pagina geserveerd door NGINX) en oc new-app. De eerste parameter van het new-app commando bestaat uit drie componenten die hieronder in het code block te zien zijn. De eerste componenten zijn de naam van de ImageStream (waarover later meer!) en specifieke image tag die we willen gebruiken om onze app te bouwen. Het laatste component is natuurlijk de URL waar de broncode van de demo-applicatie is te vinden:

 

$ oc new-app nginx:1.16-el8~https://gitlab.com/conclusionxforce/openshift-development.git \
--name=nginx-demo \
--context-dir=nginx-demo 
--> Found image c36cc4c (5 weeks old) in image stream "openshift/nginx" under tag "1.16-el8" for "nginx:1.16-el8" 

Nginx 1.16 ---------- Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and IMAP protocols, with a strong focus on high concurrency, performance and low memory usage. The container image provides a containerized packaging of the nginx 1.16 daemon. The image can be used as a base image for other applications based on nginx 1.16 web server. Nginx server image can be extended using source-to-image tool.

Tags: builder, nginx, nginx-116 

* A source build using source code from https://gitlab.com/conclusionxforce/openshift-development.git will be created * The resulting image will be pushed to image stream tag "nginx-demo:latest" * Use 'oc start-build' to trigger a new build 
--> Creating resources … imagestream.image.openshift.io "nginx-demo" created 
buildconfig.build.openshift.io "nginx-demo" created
deployment.apps "nginx-demo" created service "nginx-demo" created 
--> Success Build scheduled, use 'oc logs -f buildconfig/nginx-demo' to track its progress. 
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 
'oc expose service/nginx-demo' 
Run 'oc status' to view your app.

We zien in de OpenShift webconsole een nieuwe Deployment klik deze open en je kunt de status zien (of gebruik oc status). Het kan even duren voordat de applicatie klaar is met bouwen en opstarten want op de achtergrond gebeurt er nogal veel (waarover later meer!). Wanneer de applicatie up-and-running is staat er in het status-overzicht een Pod en is de cirkel in het Topology-overzicht blauw.

OpenShift heeft automatisch een Service object aangemaakt dus om de applicatie ook buiten het OpenShift cluster beschikbaar te maken hoeft er alleen nog een Ingress of Route toegevoegd te worden:

$ oc expose service/nginx-demo
route.route.openshift.io/nginx-demo exposed

In de webconsole is rechtsboven een extra icoontje verschenen bij nginx-demo. Klik hier op om naar de applicatie te gaan.

Wrap-up

 

Hoewel het allemaal erg simpel lijkt hebben we toch erg veel gedaan gekregen:

• OpenShift geïnstalleerd en klaargemaakt voor development gebruik

• Container image gebouwd zonder een Dockerfile aan te raken

• Applicatie uitgerold zonder YAML te typen

In de volgende blog komen de concepten aan bod die dit allemaal mogelijk maken: ImageStreams, Source-to-Image (S2I) en BuildConfigs.