Sebastian Rieger
6 months ago
4 changed files with 3 additions and 204 deletions
-
168kubernetes-example/kubectl-intro.md
-
20kubernetes-example/nginx.yml
-
16kubernetes-example/service.yml
-
3terraform/rke2-terraform/README.md
@ -1,168 +0,0 @@ |
|||||
# 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 |
|
||||
``` |
|
@ -1,20 +0,0 @@ |
|||||
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 |
|
@ -1,16 +0,0 @@ |
|||||
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 |
|
@ -0,0 +1,3 @@ |
|||||
|
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) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue