Add Kubernetes
parent
97fc34f5cb
commit
b83ea64a5b
143
Kubernetes.md
Normal file
143
Kubernetes.md
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
# Setting up K3S/K8S from scratch
|
||||||
|
|
||||||
|
[[TOC]]
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
### Control plane node:
|
||||||
|
- 2 or more cores
|
||||||
|
- 1GB of RAM
|
||||||
|
- 16GB of disk space
|
||||||
|
### Worker node:
|
||||||
|
- 1 or more cores
|
||||||
|
- 512MB of RAM
|
||||||
|
- 16GB of disk space
|
||||||
|
|
||||||
|
# Node installation
|
||||||
|
## K3S control plane node
|
||||||
|
You need atleast 3 of these, for a micro cluster of 2-3 nodes you can only have one if you wish so.
|
||||||
|
Be sure to store your token in a safe place as you will need it to connect additional nodes in the future.
|
||||||
|
First node:
|
||||||
|
```
|
||||||
|
curl -sfL https://get.k3s.io | K3S_TOKEN="<Rand0mlyG3n3rat3dT0ken>" sh -s - server --cluster-init --disable servicelb --disable traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
Other nodes:
|
||||||
|
```
|
||||||
|
curl -sfL https://get.k3s.io | K3S_TOKEN="<Rand0mlyG3n3rat3dT0ken>" sh -s - server --server https://<ipofthefirstnode>:6443 --disable servicelb --disable traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
## K3S worker node
|
||||||
|
```
|
||||||
|
curl -sfL https://get.k3s.io | K3S_TOKEN="<Rand0mlyG3n3rat3dT0ken>" sh -s - agent --server https://<ipofthemasternode>:6443 ---disable servicelb --disable traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
you can check the state of the cluster by SSHing to any of the master nodes and running
|
||||||
|
```
|
||||||
|
kubectl get node
|
||||||
|
```
|
||||||
|
or you can install https://k9scli.io for fancy terminal UI(highly recommendded)
|
||||||
|
|
||||||
|
# Network configuration
|
||||||
|
## Installing MetalLB
|
||||||
|
MetalLB hooks into your Kubernetes cluster, and provides a network load-balancer implementation. In short, it allows you to expose services via IP address.
|
||||||
|
```
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.4/config/manifests/metallb-native.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### MetalLB IP pool
|
||||||
|
Create a new yaml file with the following content and be sure to customize your ip range:
|
||||||
|
```
|
||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: IPAddressPool
|
||||||
|
metadata:
|
||||||
|
name: first-pool
|
||||||
|
namespace: metallb-system
|
||||||
|
spec:
|
||||||
|
addresses:
|
||||||
|
- 192.168.1.240-192.168.1.250
|
||||||
|
```
|
||||||
|
|
||||||
|
save and apply the IPAddressPool config
|
||||||
|
```
|
||||||
|
kubectl apply -f file.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### IP pool advertising
|
||||||
|
Create a file:
|
||||||
|
```
|
||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: L2Advertisement
|
||||||
|
metadata:
|
||||||
|
name: example
|
||||||
|
namespace: metallb-system
|
||||||
|
```
|
||||||
|
|
||||||
|
save and apply the L2Advertisement config
|
||||||
|
```
|
||||||
|
kubectl apply -f file.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# Ingress nginx
|
||||||
|
|
||||||
|
Ingress Nginx is a special nginx container setup that allows you to expose HTTP(s) apps from your kubernetes to the outside world via MetalLB ip address
|
||||||
|
First clone the ingress repo from git:
|
||||||
|
```
|
||||||
|
git clone https://github.com/nginxinc/kubernetes-ingress.git
|
||||||
|
cd kubernetes-ingress
|
||||||
|
```
|
||||||
|
Then apply these files:
|
||||||
|
```
|
||||||
|
kubectl apply -f deployments/common/ns-and-sa.yaml
|
||||||
|
kubectl apply -f deployments/rbac/rbac.yaml
|
||||||
|
kubectl apply -f examples/shared-examples/default-server-secret/default-server-secret.yaml
|
||||||
|
kubectl apply -f deployments/common/nginx-config.yaml
|
||||||
|
kubectl apply -f deployments/common/ingress-class.yaml
|
||||||
|
kubectl apply -f config/crd/bases/k8s.nginx.org_virtualservers.yaml
|
||||||
|
kubectl apply -f config/crd/bases/k8s.nginx.org_virtualserverroutes.yaml
|
||||||
|
kubectl apply -f config/crd/bases/k8s.nginx.org_transportservers.yaml
|
||||||
|
kubectl apply -f config/crd/bases/k8s.nginx.org_policies.yaml
|
||||||
|
kubectl apply -f config/crd/bases/k8s.nginx.org_globalconfigurations.yaml
|
||||||
|
kubectl apply -f deployments/daemon-set/nginx-ingress.yaml
|
||||||
|
kubectl apply -f deployments/service/loadbalancer.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
# Longhorn
|
||||||
|
|
||||||
|
Longhorn is a system that manages permanent storage inside your kubernetes cluster.
|
||||||
|
On each storage node in your cluster you must install:
|
||||||
|
|
||||||
|
```
|
||||||
|
apt-get install open-iscsi nfs-common
|
||||||
|
```
|
||||||
|
|
||||||
|
before installing Longhorn itself
|
||||||
|
```
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/deploy/longhorn.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
To make longhorn UI available trough ingress, create a file:
|
||||||
|
|
||||||
|
```
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: longhorn-ingress
|
||||||
|
namespace: longhorn-system
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: longhorn-frontend
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
then apply it:
|
||||||
|
```
|
||||||
|
kubectl apply -f file.yml
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user