Files
2023-08-31 13:59:44 +12:00

15 KiB
Raw Permalink Blame History

./images/header.jpg

Welcome to the OpenShift Ruby on Rails Workshop!

The workshop provides ruby developers an introduction to OpenShift and containers, and how these can be used to build fully automated end-to-end continuos integration and deployment pipelines for Ruby on Rails applications.

Agenda

# Topic How Time allocated Section link
1 Introduction to containers & kubernetes Facilitator led, group session 10m Link
2 Exploring openshift application platform Facilitator led, group session 10m Link
3 Setting up your development environment Individual, hands on excercise 10m Link
4 Deploying a ruby application Individual, hands on excercise 20m Link
5 Creating a deployment pipeline Individual, hands on excercise 20m Link
6 Making an application serverless Individual, hands on excercise 20m Link

1. Introduction to containers & kubernetes

Before we can get hands on with the workshop, let's make sure we have an understanding of both containers and kubernetes.

What are containers?

Containers are technologies that allow the packaging and isolation of applications with their entire runtime environment—all of the files necessary to run. This makes it easy to move the contained application between environments (dev, test, production, etc.) while retaining full functionality.

./images/virtualization-vs-containers.png

What does this mean? For starters, virtualization uses a hypervisor to emulate hardware, which allows multiple operating systems to run side by side. This isnt as lightweight as using containers.

When you have finite resources with finite capabilities, you need lightweight apps that can be densely deployed. Linux containers run natively on the operating system, sharing it across all of your containers, so your apps and services stay lightweight and run swiftly in parallel.

Containers are also an important part of IT security. By building security into the container pipeline, containers stay reliable, scalable, and trusted.

You can also easily move the containerized application between public, private and hybrid cloud environments and data centers (or on-premises) with consistent behavior and functionality.

Continue reading →

Why are containers important?

Containers help reduce conflicts between your development and operations teams by separating areas of responsibility. Developers can focus on their apps and operations teams can focus on the infrastructure. And, because containers are based on open source technology, you get the latest and greatest advancements as soon as theyre available.

Container technologies—including Podman, Skopeo, Buildah, CRI-O, Kubernetes, and Docker — help your team simplify, speed up, and orchestrate application development and deployment.

Containers share the same operating system kernel and isolate the application processes from the rest of the system so the whole thing can be moved, opened, and used across development, testing, and production configurations.

Because they are lightweight and portable, containers provide the opportunity for faster development and meeting business needs as they arise.

What is kubernetes?

Kubernetes (also known as k8s or "kube") is an open source container orchestration platform that automates many of the manual processes involved in deploying, managing, and scaling containerized applications.

You can cluster together groups of hosts running Linux® containers, and Kubernetes helps you easily and efficiently manage those clusters.

Kubernetes clusters can span hosts across on-premise, public, private, or hybrid clouds. For this reason, Kubernetes is an ideal platform for hosting cloud-native applications that require rapid scaling.

Kubernetes was originally developed and designed by engineers at Google. Google was one of the early contributors to Linux container technology.

Red Hat was one of the first companies to work with Google on Kubernetes, even prior to launch, and has become the 2nd leading contributor to the Kubernetes upstream project. Google donated the Kubernetes project to the newly formed Cloud Native Computing Foundation (CNCF) in 2015.

./images/kubernetes-diagram.svg

2. Exploring openshift application platform

Now that we have refreshed on containers and kubernetes, let's take a tour through the OpenShift application platform from the perspective of a developer.

Web console developer view

The first stop on our tour will be the Web console "Developer View". In order to move quickly with containers, developers need to be able to use the benefits of Kubernetes without being required to develop a platform engineering skillset. Taking time from development cycles to learn, install, and manage infrastructure tools is not helping get business applications to market.

Red Hat OpenShift has a specifically designed developer view so that you can make the most of the platform, without having to get bogged down learning kubernetes.

Within developer view you can see a graphical topology for your application, check application logs or observability metrics, scale applications, restart deployments, review pipelines and much more.

More on developer view →

./images/topology-view.gif

Web console terminal

Sometimes you just need to quickly drop into a terminal to get something done. With the OpenShift Web Terminal you don't need to leave your browser or worry about logging in at a local terminal!

./images/web-terminal.gif

Quick add for new applications

Want to quickly test a proof of concept or spin up a container? Awesome, within developer view in OpenShift you can quickly add a new application directly from git, from an existing image, from a Dockerfile, a yaml manifest, or a catalog of templated services.

./images/add-application.png

Visual pipeline builder

OpenShift Pipelines (based on Tekton) make creating cloud native pipelines on OpenShift easy. There is a pipeline web interface built into the OpenShift web console so you don't need to login to another system and switch contexts to be able to interact with your pipelines.

./images/openshift-pipelines.gif

Built in observability

Within the OpenShift web console we can really quickly open up the logs from our application and observe metrics like cpu or memory usage.

./images/observability.png

3. Setting up your development environment

For our first hands on excercise let's get logged into the tools we'll be using today and get familar with each.

Log into bitbucket and fork codebase

For this workshop we will be using a Bitbucket server as our git source control management tooling. The server is running on the same OpenShift cluster we will be using for the hands on excercises and can be accessed with the link below:

https://bitbucket-bitbucket.apps.rosa-zc2fk.nhwo.p1.openshiftapps.com

Use the credentials provided on the workshop slides to login.

./images/bitbucket-login.png

Once logged in you should be able to view and create a fork of the Rails Team/rails-example repository to your own user using this link: https://bitbucket-bitbucket.apps.rosa-zc2fk.nhwo.p1.openshiftapps.com/projects/MSD/repos/rails-example?fork

Ensure you make your fork public after creation as shown below:

./images/bitbucket-fork.gif

Log into openshift web console

Once we have our individual code fork created let's log into the OpenShift web console using the link https://console-openshift-console.apps.rosa-zc2fk.nhwo.p1.openshiftapps.com.

Use the credentials provided on the workshop slides to login.

./images/openshift-login.png

Once logged in, feel free to repeat the OpenShift tour we went through as a group in section two to get more comfortable with the user interface.

4. Deploying a ruby application

Now that we are logged into our environment let's move on to deplying the rails-example codebase we forked earlier, onto OpenShift. We'll do this in two different ways:

User the web interface to import from git and deploy

OpenShift's Source-to-Image (S2I) is a powerful tool that streamlines the deployment of applications by automating the build process from source code to a runnable container image.

With S2I, deploying a Ruby app becomes easy it detects your app's dependencies, assembles the necessary runtime environment, and produces a production-ready container image. This approach not only accelerates deployment but also ensures consistency and reliability across various environments, allowing you to focus on writing code without worrying about complex deployment configurations.

  1. Click the +Add button in developer view (or open https://console-openshift-console.apps.rosa-zc2fk.nhwo.p1.openshiftapps.com/add)
  2. Click on the Import from Git tile in your add menu.
  3. Enter the repo-url for your repository fork.
  4. Select the Ruby S2i builder image.
  5. Enter rails-example in Name field.
  6. Click create button and you will be redirected to Topology screen.
  7. Click on rails-example application to see check the progress of the build (this should take roughly 2 minutes).
  8. Click the route once the pod is Running, the application ui should display.

./images/import-git.gif

Using the command line to import from git deploy

Everything that we can do through the OpenShift web console, we can do programmatically through the oc command line utility. This includes creating a new source to image application deployment.

To save time during todays workshop we won't be setting up our local terminal to test this out, instead we will use the handy OpenShift Web Console terminal.

  1. Click on the web terminal >_ icon in the top right corner of the web console.
  2. A terminal will pop up in the bottom of the window, this can sometimes take a minute or two to start.
  3. Copy the following command into the termuinal and press Enter.
oc new-app --name rails-cli centos/ruby-25-centos7~<FORK_CLONE_URL>
  1. Let's open the web console again and we should now see another application pod in our topology view!
  2. Click on the pod, and open the route to see the application serving traffic.

./images/import-cli.gif

5. Creating a deployment pipeline for our app

Now that we've explored some methods for deploying a ruby application. Let's create a full pipeline for deployments. We can actually generate basic pipelines automatically with a checkbox as we use the Import from git quick add feature in the web console.

OpenShift Pipelines are based on the upstream tekton project.

For this excercise, lets build some familiarity with tekton by creating a new pipeline from scratch!

  1. Click on Pipelines in the OpenShift web console developer view.
  2. Click on Create > Pipeline in the top right hand corner.
  3. Enter the name ruby-pipeline.
  4. Click Add workspace at the bottom of the page and enter name ruby-pipeline. The workspace is the shared context that will be passed between each task in the pipeline. For example, cloning source code, then testing that code in a subsequent pipeline task.
  5. Click on Add task, and type in clone, then select git-clone from Red Hat and click Add.
  6. Click on the newly added git-clone task and enter the clone url for the repository you forked in Bitbucket (note, ensure the Bitbucket repository is set to public in Bitbucket setttings). Then scroll down and select ruby-pipeline in the workspace dropdown.
  7. Click the + symbol that appears to the right of your git-clone task when you hover over it. Click Add task on the new block in the pipeline and enter ruby in the search. Select s2i-ruby from Red Hat and click Add.
  8. Click on the newly added s2i-ruby task and enter image-registry.openshift-image-registry.svc:5000/userX/ruby-pipeline-app as the IMAGE field, making sure to replace the X your user number. Scroll down and select ruby-pipeline in the workspace dropdown.
  9. Click the + symbol that appears to the right of your s2i-ruby task when you hover over it. Click Add task on the new block in the pipeline and enter openshift-client from Red Hat and click Add.
  10. Click on the newly added openshift-client task. Update the display name to deploy, then set the script field to oc new-app --image image-registry.openshift-image-registry.svc:5000/userX/ruby-pipeline-app (remember to update X with your user number). Finally, click Create.

./images/pipeline.gif

6. Making an application serverless

So we've just deployed some applications to OpenShift, how about we make one of the a serverless application? This is very simple to do thanks to OpenShift Serverless.

  1. Right click on your first deployment rails-example and click Make serverless.
  2. Change the Name field to rails-example-serverless.
  3. Click Create.

./images/serverless.gif

  1. Notice how our application automatically scales to zero after a minute of no traffic? These scaling options can be fully configured as required for each application.
  2. Try visiting the route after the application scales to zero and notice how the application automatically scales back up to handle the traffic.