Skip to content
Snippets Groups Projects
Commit 1d26bb42 authored by Sebastian Rieger's avatar Sebastian Rieger
Browse files

removed old terraform k8s examples and refered to current repo

parent 317e8f4b
No related branches found
No related tags found
No related merge requests found
# 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
```
\ No newline at end of file
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
\ No newline at end of file
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
\ No newline at end of file
Deployment of RKE2 in the current OpenStack environment of NetLab @ HS-Fulda can be found here:
[https://github.com/srieger1/terraform-openstack-rke2/tree/hsfulda-example-2023-10/examples/hs-fulda](https://github.com/srieger1/terraform-openstack-rke2/tree/hsfulda-example-2023-10/examples/hs-fulda)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment