[[improve]] Kubernetes ist ein OpenSource System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen (siehe [[docker|Docker]]), das ursprünglich von Google entworfen wurde. Docker hat ein integriertes Tool (Docker Swarm) zum selben Zweck, Kubernetes kann jedoch das selbe und noch viel mehr und wird ab Werk von Docker unterstützt. Kubernetes ist deklarativ, das bedeutet man beschreibt den gewünschten Endzustand. Ein Pod ist eine Resource eines Replicaset was eine Resourse eines Deployment ist. =====Installation (Ubuntu)===== At least 2 cpu's and 2048 MB RAM per node are required. On all nodes * Edit hostname * Edit ''/etc/hosts'' file and add all nodes. * Edit ''/etc/fstab'' and uncomment SWAP partition * Edit ''/etc/initramfs-tools/conf.d/resume'' and uncomment swap uuid * Find swap unit using ''systemctl --type swap'' and mask it using ''systemctl mask xxx.swap''. SWAP must be deactivated! todo: what about fw, selinux? apt update && apt install apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" apt update && apt install -y kubelet kubeadm kubectl docker.io systemctl enable docker Only on master node kubeadm init --apiserver-advertise-address 192.168.0.100 --pod-network-cidr=172.16.0.0/16 # REMEMBER JOIN TOKEN output from last command !!!!!!!!!!!!!!!!! # when done execute as regular user mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # enable network addon sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml Only on nodes except master kubeadm join 192.168.0.100:6443 --token zbdvek.v8fnw7hw8xcdxk03 --discovery-token-ca-cert-hash sha256:724601e4cd00fd78312f1fbf3726b688e894fc88f2c25962f478e546a59929c7 API Token vergessen/abgelaufen? kubeadm token create --print-join-command Test on master node kubectl run my-httpd --image=httpd --port=80 kubectl get pods -l app=demo kubectl scale deployment [deployment] --replicas 3 kubectl exec -it my-httpd -- /bin/bash kubectl set image deployment demo nginx=1.9.1 kubectl patch pod my-httpd --patch '{}' kubectl delete pod myhttpd Finally autostart systemctl start kubelet systemctl enable kubelet systemctl start docker systemctl start kubelet =====Pod===== apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - image: nginx name: nginx imagePullPolicy: Always kubectl create -f mypod.yml kubectl delete pod demo =====ReplicaSet===== Update muss manuell vorgenommen werden (downtime). apiVersion: apps/v1 kind: ReplicaSet metadata: name: demo spec: replicas: 2 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: nginx image: nginx imagePullPolicy: Always kubectl create -f myreplica.yml kubectl delete replicaset demo =====Deployment===== Deployments nutzen intern replicaset und managen das rolling update von selbst. apiVersion: apps/v1 kind: Deployment metadata: name: demo spec: replicas: 2 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: nginx image: nginx imagePullPolicy: Always env: - name: VERSION value: "v1" kubectl create -f mydeployment.yml kubectl delete deployment demo =====Persistent Volumes===== apiVersion: v1 kind: PersistentVolume metadata: name: pv0003 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2 =====StatefulSet===== todo =====Volume types===== * Host based * EmptyDir * HostPath * Block Storage * Amazon EBS * GCE Persistent Disk * Azure Disk * vSphere Volume * ... * Distributed file system * NFS * Ceph * Gluster * Amazon EFS * Azure File System * ... * Other * Flocker * iSCSI * Git Repo * Quobyte * ... =====Links===== * [[https://youtu.be/NFApeJRXos4|Service types explained]] * [[https://www.youtube.com/watch?v=d6WC5n9G_sM|Full beginner course]] * [[https://www.youtube.com/watch?v=S6CVIqQeJww|First steps after install]] * [[https://www.youtube.com/watch?v=ZxC6FwEc9WQ|Persistent volumes]] * [[https://www.youtube.com/watch?v=tZEKGNnvBzg|Kubectl secrets]] * [[https://www.youtube.com/watch?v=u948CURLDJA|Ingress NginX]] * [[https://www.youtube.com/watch?v=1SaPfm96lY4|The native web]] * [[https://www.youtube.com/watch?v=tq9ng_Nz9j8|Networking]] * [[https://www.youtube.com/watch?v=EQNO_kM96Mo|Application deployment tutorial video]] todo * [[https://stackoverflow.com/questions/69448131/kubernetes-whats-the-difference-between-deployment-and-replica-set|Difference between deployment and replicaset]] * [[https://github.com/derailed/k9s|K9s - Manage your Kubernetes Cluster with Style]] * [[https://kruschecompany.com/de/helm-kubernetes/|Die Rolle von HELM in Kubernetes]]