Giter Club home page Giter Club logo

k8slab's Introduction

Kubernetes Workshop Attendee Guide

Kubernetes Hands-on Lab developed by the Azure GBB Team

The objective of the workshop is to get hands-on with the content covered during the day . Attendees will get a set of resources delivered as a starting point, and then go from there to continue building functionality.

Technologies covered:

  • Docker tooling
  • Azure Container Services
  • Kubernetes

Pre-Requisites

1 - Run a Docker container

Scenario

In this section, you’ll start off with running a simple docker container on your local machine. The container you’ll run is backed by a simple Redis image which can just be referred to as “redis”.

Steps

  1. Pull the image from the public Docker registry and make sure you see it in your own local repo
  2. Run a Redis container, exposing port 6379

Tip: find Docker documentation for:

  • pulling images here
  • starting images here

Exit Criteria

  • a working container, which you can test by installing a Redis client:
// on windows, using chocolatey:
choco install redis-64

// on linux, using apt:
sudo apt install redis-tools

// on mac:
brew install redis
  • verify you can connect and work with the Redis container:
// try connect with the redis cli, check if redis-cli connects and if counter increases
redis-cli
> incr mycounter
> incr mycounter
  • Stop and start the container again, make sure it retains the state where you left off
  • Stop and delete the container

2 - Build a Docker container

Scenario

In this part, you’ll build your own container image and run it.

The source code for the container to build is published on GitHub here: https://github.com/Azure-Samples/azure-voting-app-redis/tree/master/azure-vote

Steps

  1. Clone the repo locally on your machine
// when using ssh (make sure you have keys setup correctly; if not you might want to try http instead):
git clone [email protected]:Azure-Samples/azure-voting-app-redis.git

// when using http:
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
  1. Go into this working directory: .\azure-voting-app-redis\azure-vote\
  2. Look for the Dockerfile with which to build the image:
    • Inpect it
    • Build an image, tagged “yourname/azure-vote”
  3. Spin up a Redis container (see Part 1), find the ip for it and run your freshly built “yourname/azure-vote”. Make sure when you run it, to provide an environment variable with as its name REDIS and as its value the ip for the Redis container. This is how our frontend knows where to call into Redis.

Tip: note that the frontend web server will not be able to reach the Redis over "localhost". Every container has its own ip address provisioned automatically by the Docker engine. To get to this ip address, use docker inspect [container-name]. Once you get this ip for Redis, give it to the frontend container by the REDIS environment variable.

Tip: find Docker documentation for building images here

Exit Criteria

  • Verify that you can see your image in your local repository
  • You have a successful running web application on http://localhost:8080

3 - Deploy a Kubernetes Cluster

Scenario

We’re now ready to spin up our own Kubernetes cluster in Azure to deploy our containers upon. As a first step, we’ll deploy an empty cluster.

Steps

  1. Create a resource group to deploy your cluster into.
  2. Create a Kubernetes cluster, using ACS (“Azure Container Service”)

Tip: when deploying through the CLI, there’s an option to have it create/reuse and store the ssh keys automatically, which is quite handy

  1. Install the kubectl command line environment

Tip: you can do so through the az azure command line interface

  1. Configure kubectl to point to your freshly created cluster

Tip: also this can be done from the az command line

Exit Criteria

  • You have a working Kubernetes cluster and are able to access the web interface from Kubernetes on http://127.0.0.1:8001/ui
  • kubectl get nodes provides you the list of nodes
  • kubectl cluster-info gives you information on your cluster

4 - Deploying on Kubernetes

Scenario

Now that we have our cluster up and running, it's time to start deploying a workload on there.

Tip: You might want to install Kubernetes support for VS Code from: https://marketplace.visualstudio.com/items?itemName=ipedrazas.kubernetes-snippets to ease you with yaml file creation.

4a - Deploying a single Pod

Steps

  1. Create a manifest for deploying a single pod, containing just our Redis container. (Note that this is not done in production; but it’s good for learning purposes to see how Kubernetes concepts stack up.)
  2. Deploy the pod onto the cluster using kubectl

Tip: find the documentation for Kubernetes Pod resources online here

Exit Criteria

  1. Make sure you can see the new pod on the cluster
  2. You are able to test it works by connecting to the pod with the Redis command line (redis-cli) and using kubectl port-forward, exposing port 6379 to your local machine

Advanced Scenario

  1. Try deleting the pod or the container within it and see if it comes back up

4b - Deploying multiple pods using a Deployment

Use the following container images when creating the Kubernetes deployment:

  • Redis: redis
  • Frontend: microsoft/azure-vote-front:redis-v1

Use the environment variable REDIS and as its value the hostname for the Redis container to indicate how the frontend can communicate with Redis.

Steps

  1. Create a yaml file for the backend (Redis) Deployment and deploy it, exposing port 6379 on the pod level
  2. Create a yaml file for the backend (Redis) Service and deploy it. The service should not be accessible from outside the cluster and should expose Redis’ port 6379
  3. Create a yaml file for the frontend Deployment and deploy it, exposing port 80 on the pod level and making sure it knows how to find the Redis’ backend
  4. Create a yaml file for the frontend Service and deploy it, exposing port 80 to the public, making sure it is backed by a Load Balancer in Azure

Tip: find the documentation for:

Exit Criteria

  1. You have a fully working web application, exposed on the internet

Advanced Scenario

  1. Try deleting the pod or the container and make sure it comes back up automatically

k8slab's People

Contributors

xstof avatar hakedal avatar palma21 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.