Kubernetes ohne Cloud - Installation und erster Service
Kubernetes ist ein Open-Source-System zur Automatisierung von Deployments, Skalierung und Verwaltung von containerisierten Anwendungen. In diesem Beitrag wird eine beispielhafte Installation im Single-Node-Modus auf Fedora beschrieben sowie eine erste Bereitstellung eines Services. Der hier konfigurierte Cluster ist nicht für den Live-Betrieb vorbereitet. Für den Live-Betrieb muss die Konfiguration erweitert werden.
Vorbereitungen
Benötigt werden mindestens zwei Maschinen mit installiertem Fedora-Linux. Ein Server wird zum Kubernetes-Master und der andere zum Kubernetes-Node. Auf Master werden gestartet: Kube-Apiserver, Kube-Controller-Manager, Kube-Scheduler und Etcd. Auf dem Node werden Kubelet, Proxy und Docker laufen.
Master und Node
- Swap deaktivieren
swapoff -a
In /etc/fstab
den Eintrag mit swap
löschen.
- Services installieren
dnf -y install kubernetes etcd
- /etc/hosts aktualisieren
IPDESMASTER fed-master
IPDESNODE fed-node
- Die Adresse des Master in der Kubernetes-Config (/etc/kubernetes/config) eintragen
KUBE_MASTER="--master=http://fed-master:8080"
- Firewall fürs Erste deaktivieren
systemctl mask firewalld.service
systemctl stop firewalld.service
Master
- API-Server konfigurieren (/etc/kubernetes/apiserver)
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
- In /etc/kubernetes/apiserver muss noch ein kleiner Workaround eingebaut werden. Unter "KUBE_ADMISSION_CONTROL" muss der Eintrag "ServiceAccount" entfernt werden. Ansonsten werden Pods nicht korrekt erstellt (Siehe https://github.com/kubernetes/kubernetes/issues/49804). Der neue Eintrag sieht wie folgt aus:
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota"
- etcd für alle IP-Adressen öffnen
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
- Dienste starten
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
Node
- Kubelet konfigurieren (/etc/kubernetes/kubelet)
###
# Kubernetes kubelet (node) config
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"
# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=fed-node"
# location of the api-server
KUBELET_ARGS="--cgroup-driver=systemd --kubeconfig=/etc/kubernetes/master-kubeconfig.yaml"
- Die Kube-Konfiguration anlegen (/etc/kubernetes/master-kubeconfig.yaml)
kind: Config
clusters:
- name: local
cluster:
server: http://fed-master:8080
users:
- name: kubelet
contexts:
- context:
cluster: local
user: kubelet
name: kubelet-context
current-context: kubelet-context
- Dienste starten
for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
Der Mini-Cluster sollte jetzt funktionsfähig sein. Auf Master kann es jetzt geprüft werden:
kubectl get nodes
NAME STATUS AGE VERSION
fed-node Ready 4h
Service starten
Am Beispiel eines Nginx-Containers starten wir unseren ersten Service in unserem Cluster.
- Zuerst starten wir ein Deployment:
kubectl create deployment nginx --image=nginx
- Verifizieren des Deployment
kubectl describe deployment nginx
- Jetzt starten wir einen aus dem Internet erreichbaren Service:
kubectl create service nodeport nginx --tcp=80:80
Weil unser Nginx über ein Nodeport-Deployment veröffentlicht wurde, öffnet Kubernetes einen Port mit einer Nummer größer als 30000
- Verifizieren, ob der Service aktiv ist:
kubectl get svc
- Im Browser sollte nun die Nginx-Willkommensseite erscheinen:
http://IPDESNODE:31933/
- Deployment löschen
kubectl delete deployment nginx
- Service löschen
kubectl delete svc nginx
Ausblick
Zweite Node, TLS, Loadbalancing, Monitoring, ...
Quellen:
https://kubernetes.io/docs/getting-started-guides/fedora/fedora_manual_config/
https://www.linode.com/docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/