Cloud Quickstart: Difference between revisions

From Computer Science Wiki
Jump to navigation Jump to search
Carnold (talk | contribs)
No edit summary
Carnold (talk | contribs)
No edit summary
Line 44: Line 44:
===== Via Web Interface =====
===== Via Web Interface =====
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
* From the Project page, click on the '''Deploy''' button
* From the '''Workloads''' page, click on the '''Deploy''' button
* Give your deployment a '''Name''', this name is unique to the Namespace
* Give your deployment a '''Name''', this name is unique to the Namespace
* '''Namespace''' should be automatically selected to the one you created earlier
* '''Namespace''' should be automatically selected to the one you created earlier
Line 92: Line 92:
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
This example will create a MongoDB Pod and Service entry
This example will create a MongoDB Pod and Service entry
* From the Project Page, click on '''Deploy'''
* From the '''Workloads''' Page, click on '''Deploy'''
* Set '''Name''' to <code>database</code>
* Set '''Name''' to <code>database</code>
* Set '''Docker Image''' to <code>mongo</code>
* Set '''Docker Image''' to <code>mongo</code>
Line 146: Line 146:
</div>
</div>


==== Externally Accessible Services ====
The CS cloud offers options for externally accessing your services.  This will vary based on which cluster you are using.  This example will be using the '''Testing''' cluster.  By default, when you create an externally accessible service in the Testing cluster, you will get a randomly assigned external IPv6 address.  There are other options available, but they will be reserved for special use cases.  Contact Techstaff if you have a special network use case.  In this example, we will create a simple web page that will be externally accessible via IPv6:
===== Via Web Interface =====
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
* From the '''Workloads''' page, click on the '''Deploy''' button
* Fill in '''Name''' with <code>web-example</code>
* Fill in '''Docker Image''' with <code>rancher/hello-world</code>  This is a simple web page docker image provided by Rancher.
* Make sure that '''Namespace''' is filled in
* Click on the '''Add Port''' button
* Fill in '''Publish the container port''' with <code>80</code>
* Select '''As a''' to <code>Layer-4 Load Balancer</code>
* Fill in '''On listening port''' with <code>80</code>
* Click on '''Launch'''
* It can take up to a couple of minutes for the CS cloud system to fully initialize your external service access.
* The web interface will add a '''80/tcp''' link under your '''web-example''' name that points to your external service.
* Visit the '''80/tcp''' link to view your service
* Extra: to see the load balancing in action:
* Go back to the '''Workloads''' page, and click on the arrow left of your '''web-example''' name
* Click on the '''+''' to increase the number of Pods in your Deployment.
* Again visit your external service, once the Load Balancer picks up the changes you will be able to load the page multiple times and see it hit the different Pods.
</div>
===== Via Command Line =====
<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">
* Create a <code>web-example.yml</code> file, you will need personalize '''namespace''':
<pre>
apiVersion: v1
kind: Pod
metadata:
  name: web-example
  namespace: user-project1-web
  labels:
    app: web-example
spec:
  containers:
  - name: web-example
    image: rancher/hello-world
    stdin: true
    tty: true
---
apiVersion: v1
kind: Service
metadata:
  name: web-example
  namespace: user-project1-web
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web-example
  type: LoadBalancer
</pre>
* This manifest will do two things: Create a Pod running the hello-world Docker image labeled with '''app: web-example''' and Create an external Service entry that points to any Pod labeled '''app: web-example'''
* Apply this manifest to create the resources: <code>kubectl apply -f web-example.yml</code>
* To get the status of your Pod(s): <code>kubectl get pod -n <namespace></code>
* To get the status of your Service(s): <code>kubectl get service -n <namespace></code>
* You should see the external IP of '''web-example''' service
</div>
=== Storage ===
=== Storage ===

Revision as of 10:51, 8 April 2019

CS Cloud Quickstart Guide

This guide will give you an introduction to using the Computer Science cloud, instructions on starting a simple kubernetes pod, basic networking concepts, and how to use storage. We will show how to do things both in the web user interface and through command line access.

Introduction

The CS cloud is a container-as-a-service resource. It allows you to run Docker based containers on our hardware. Containers allow you to encapsulate your application with all it's needed dependencies and allows the containerized application to run just about anywhere. The CS cloud is based on Kubernetes cluster which is a open-source container orchestration system. We also use Rancher as a UI and proxy interface.

Accessing the Cloud

You access the CS cloud through https://cloud.cs.vt.edu By default, all users get access to the "testing" cluster. This cluster is available for users to play with kubernetes, develop their containerized applications, and Techstaff to test updates to the system. Critical services should not be run on this cluster, we will have other clusters available to actually run containerized user services. You can also use the Rancher UI to control your own kubernetes cluster(s) allowing you to share your personal cluster with others in the department. This can even work behind a private network.

API/Command line access

You can also access the CS cloud via a command line tool called kubectl.

  • Install the kubectl binary on your machine https://kubernetes.io/docs/tasks/tools/install-kubectl/
  • You will need a config file to tell kubectl how to connect to the CS cloud, download this file from the Web interface
  • Log into https://cloud.cs.vt.edu
  • Select the cluster you want to access from the top left menu
  • Click on the Cluster menu item at the top, if you are not already there
  • Click on the Kubeconfig File button
  • You can either download the file or copy and paste the content into your kubectl config file (normally ~/.kube/config on Linux)
  • You can also directly access kubectl command line directly from the web interface! Just click on the Launch kubectl button.

Creating a Project

When you first log into https://cloud.cs.vt.edu it will show you the clusters you have access to. Normally, this will only be the testing cluster. Also, you won't have any Projects unless someone has shared a Project with you. To get started, you will need to create a Project and a Namespace inside that project:

The Project will need to be created through the web interface.

  • Select testing cluster by either clicking the name in the list, or selecting it from the top left menu (Global -> Cluster: testing).

  • Select Projects/Namespaces on the top menu
  • Click on the Add Project button to create a Project
  • Project Name is the only required field, this is set at the cluster scope so the name can conflict with other users' project names. I suggest pre-appending your username to the project name, for example: mypid-project1
  • After you create your project, it will take you to a screen that will allow you to add a namespace to your project.
  • Namespaces allow you to group Pods and other resources together, this namespace translates to the Kubernetes namespace so again the names can conflict with other users. Example namespace name: mypid-project1-db for grouping all of project1's database pods together.
  • Click on the Add Namespace button to create a Namespace
  • Name is the only field needed
  • Click on the Project's title or use the top left menu to select your new Project. This will take you to the Project's page.
  • At this point you are ready to start a Pod

Starting a Deployment

Kubernetes groups containers into a Pod. A Pod can be thought of roughly as a single machine with a single IP on the Kubernetes network. Each container running in a Pod can communicate with each other via localhost. The simplest Pod is just a single container, which is what we will show you here. A Deployment is a kubernetes term for a Pod resource that can automatically scale out. For our example, we will only be starting a single Pod.

Example: Ubuntu shell

In this example, we will show how to start up a Ubuntu container and access it as a shell prompt.

Via Web Interface
Via Command Line

Networking

The CS cloud automatically sets up access to the cluster network when you start a Pod. Your Pod gets a random internal IPv4 address that can access other Pods in the cluster network, and the Internet via a gateway. There are also options to access your Pod(s) from external hosts.

Services

Since your Pods can come and go as needed, their IP is going to change often. Kubernetes offers a resource called a Service that will allow you to consistently access a Pod or set of Pods by name. You can think of this as a dynamic DNS service. In the Rancher web interface, a service entry will get generated automatically for you anytime you at a Port Mapping. A good example is creating a database service that can be used by your other Pods in the project:

Via Web Interface
Via Command Line

Externally Accessible Services

The CS cloud offers options for externally accessing your services. This will vary based on which cluster you are using. This example will be using the Testing cluster. By default, when you create an externally accessible service in the Testing cluster, you will get a randomly assigned external IPv6 address. There are other options available, but they will be reserved for special use cases. Contact Techstaff if you have a special network use case. In this example, we will create a simple web page that will be externally accessible via IPv6:

Via Web Interface
Via Command Line


Storage