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.
|
|
# 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.
```bash 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!
```bash 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.
```bash # 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:
```bash # 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:
```bash # 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
```bash # 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:* ```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:* ```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 ```
|