You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

3.6 KiB

Introduction to kubectl

Prerequisites

For using this you must install the following tools:

  • Python
  • Pip
  • Kubectl
  • Openstack-Client

Python

Install python and pip for your OS, if it is not installed. This is already done at the NetLab PCs.

Installing kubectl and arkade

Run this in a bash terminal to download arkade and install kubectl:

For windows you can use e.g. the Git Bash terminal.

curl -sLS https://dl.get-arkade.dev | sh
arkade get kubectl
# To load the path to the binary
export PATH=$PATH:$HOME/.arkade/bin/

With arkade you can also install other tools: arkade get to see all possibilities.

Openstack Client

To install the Openstack client and the magnum package:

If you are using Windows, you must start the bash terminal with Administrator privileges!

pip3 install openstackclient python-magnumclient
# Download the Openstack RC File from your Openstack account
# Load the file
source {USERNAME}-openrc.sh

Download the kubeconfig

Download the kubeconfig file for your cluster from OpenStack.

# Before using this, check if Openstack RC File is loaded!
openstack coe cluster config {CLUSTER_NAME}
# Then run the given command in terminal
export ...
# Now you are able to run kubectl commands at your Kubernetes cluster

Deployment of the needed description in kubernetes

These are two approaches to create the description in Kubernetes:

# create a namespace 
kubectl create namespace web-test

# Then choose one of the following ways:
# (1) Create the description
kubectl create -f nginx.yml -f service.yml

# (2) Create or update descriptions if existing
kubectl apply -f nginx.yml -f service.yml

To show it is working

Here are some useful commands:

# show nodes
kubectl get nodes

# show pods for our namespace
kubectl get -n web-test pods 

# show deployments for our namespace
kubectl get -n web-test deployment

# show services for our namespace
kubectl get -n web-test service

# show logs of deployed nginx instances
kubectl logs -n web-test deployment/nginx-deployment

Scaling up and down

# scale up instances to 5
kubectl scale -n web-test deployment/nginx-deployment --replicas=5

# scale down instances again to 3
kubectl scale -n web-test deployment/nginx-deployment --replicas=3

To see it is working in the browser ;)

The nginx instances are reachable at the floating ips of the node-instances at port 30007 in our case.

Many other things can be done ;)

  • Autoscaling
  • Detailled Service functions (LoadBalancer, ...)
  • Dashboard
  • FaaS Setup ;)
  • ...

Appendix

Nginx description

nginx.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: web-test
spec:
  selector:
    matchLabels:
      app: nginx-deployment
  replicas: 3 # tells deployment to run 3 pods matching the template
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Nginx service description

service.yml:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: web-test
spec:
  type: NodePort
  selector:
    app: nginx-deployment
  ports:
      # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - port: 80
      targetPort: 80
      # Optional field
      # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
      nodePort: 30007