Files
container.training/slides/kube/namespaces.md
Jerome Petazzoni 5a81526387 Add two chapters: Helm and namespaces
In these chapters, we:
- show how to install Helm
- run the Helm tiller on our cluster
- use Helm to install Prometheus
- don't do anything fancy with
  Prometheus (it's just for the
  sake of installing something)
- create a basic Helm chart for
  DockerCoins
- explain namespace concepts
- show how to use contexts to hop
  between namespaces
- use Helm to deploy DockerCoins
  to a new namespace

These two chapters go together.
2018-04-09 07:57:27 -05:00

2.5 KiB

Namespaces

  • We cannot have two resources with the same name

--

  • We cannot have two resources of the same type with the same name

    (But it's OK to have a rng service, a rng deployment, and a rng daemon set)

--

  • We cannot have two resources of the same type with the same name in the same namespace

    (But it's OK to have e.g. two rng services in different namespaces)

--

  • In other words: the tuple (type, name, namespace) needs to be unique

    (In the resource YAML, the type is called Kind)


Pre-existing namespaces

  • If we deploy a cluster with kubeadm, we have three namespaces:

    • default (for our applications)

    • kube-system (for the control plane)

    • kube-public (contains one secret used for cluster discovery)

  • If we deploy differently, we may have different namespaces


Creating namespaces

  • We can create namespaces with a very minimal YAML, e.g.:

        kubectl apply -f- <<EOF
        apiVersion: v1
        kind: Namespace
        metadata:
          name: blue
        EOF
    
  • If we are using a tool like Helm, it will create namespaces automatically


Using namespaces

  • We can pass a -n or --namespace flag to most kubectl commands:

    kubectl -n blue get svc
    
  • We can also use contexts

  • A context is a (user, cluster, namespace) tuple

  • We can manipulate contexts with the kubectl config command


Creating a context

  • We are going to create a context for the blue namespace

.exercise[

  • View existing contexts to see the cluster name and the current user:

    kubectl config get-contexts
    
  • Create a new context:

    kubectl config set-context blue --namespace=blue \
        --cluster=kubernetes --user=kubernetes-admin
    

]

We have created a context; but this is just some configuration values.

The namespace doesn't exist yet.


Using a context

  • Let's switch to our new context and deploy the DockerCoins chart

.exercise[

  • Use the blue context:

    kubectl config use-context blue
    
  • Deploy DockerCoins:

    helm install dockercoins
    

]

In the last command line, dockercoins is just the local path where we created our Helm chart before.


Viewing the deployed app

  • Let's see if our Helm chart worked correctly!

.exercise[

  • Retrieve the port number allocated to the webui service:

    kubectl get svc webui
    
  • Point our browser to http://X.X.X.X:3xxxx

]

Note: it might take a minute or two for the app to be up and running.