KunnskapsbaseKubernetes

Kubernetes

Oppdatert: 2025-04-04
Kubernetes

Kubernetes administrerer og automatisérer containere: overvåker helse, starter nye og fjerner ubrukte. Det kjører på nodene og kommuniserer via et virtuelt nett. Administrasjon skjer med kubectl eller tredjepartsklienter som Kubernetes Dashboard eller Lens. Les mer om Kubernetes på norsk infrastruktur hos Deploi.

Forberedelser

Bestill VPS-er til ditt cluster hos Deploi — like mange servere som worker-noder pluss minst én master (f.eks. 8 GB RAM, 4 vCPU). Master bør ikke brukes som worker. Anbefalt: én disk per worker ved distribuert lagring.

Kjerne og nettverk

sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

Container Runtime (containerd)

sudo apt update
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/containerd.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update && sudo apt install containerd.io -y
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd

Kubernetes-pakker

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/k8s.gpg
echo 'deb [signed-by=/etc/apt/keyrings/k8s.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/k8s.list
sudo apt update
sudo apt install kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Master

Velg domene (f.eks. kubemaster.example.com). Pek dette til master-IP. Legg alle noder i /etc/hosts. Sett hostname på hver node: sudo hostnamectl hostname kubemaster.example.com. Kun på master:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=kubemaster.example.com

Noter token og hash. Bytt tilbake til egen bruker:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Installer Flannel:

kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.26.5/kube-flannel.yml

Liker du det du leser?

Få lignende artikler rett i innboksen — 1–2 ganger i måneden. Ingen spam.

Worker

På hver worker: samme /etc/hosts. Token/hash på nytt fra master: kubeadm token create --print-join-command. På worker:

kubeadm join kubemaster.example.com:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Versjoner og sikkerhet

Sjekk kubernetes.io/releases og Official CVE Feed for sikkerhetsmeldinger.

Brukeradministrasjon (service account)

Opprett ServiceAccount, ClusterRoleBinding (f.eks. cluster-admin) og Secret (type service-account-token). Hent token: kubectl get secret/<name>-kube-secret -o jsonpath='{.data.token}' | base64 --decode. Lag kubeconfig-fil med kubectl config view --raw, bytt user til token. Slett serviceaccount og clusterrolebinding for å fjerne bruker.

Cert Manager og Let's Encrypt

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.1/cert-manager.yaml

Opprett ClusterIssuer for ACME (Let's Encrypt) med e-post og http01 solver (ingressClassName nginx).

Ingress (nginx)

Last ned deploy.yaml fra ingress-nginx. Endre LoadBalancer til NodePort og Deployment til DaemonSet; fjern strategy. For port 80/443: rediger /etc/kubernetes/manifests/kube-apiserver.yaml, legg til --service-node-port-range=80-32767 og nodePort 80/443 under http/https. kubectl apply -f deploy.yaml.

Distribuert lagring (OpenEBS/Mayastor)

På master: helm install openebs openebs/openebs -n openebs --create-namespace. På workers: Huge Pages, modprobe nvme-tcp, partisjon og mkfs.ext4 på disk. Merk noder, opprett DiskPool med by-uuid. Installer kubectl-mayastor. Opprett StorageClass med provisioner io.openebs.csi-mayastor. For RWX kan NFS-server deployes i cluster med PVC og CSI NFS driver.

Metrics Server

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Ved problemer: legg til --kubelet-insecure-tls under container args. Deretter: kubectl top node og kubectl top pod.

Oppdatering

Sjekk nåværende versjon og oppgraderingsvei. Oppdater kubeadm først, deretter kubelet og kubectl på master og worker. Følg offisiell dokumentasjon for rekkefølge. Plugins (Flannel, cert-manager, Ingress): sjekk hver komponent sin dokumentasjon; ofte ny versjon med wget/apply eller helm upgrade.