Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
kubernetes [2025/11/26 18:21] jango [Deployment] |
kubernetes [2025/11/27 01:05] (aktuell) jango [Lokale Registry] |
||
|---|---|---|---|
| Zeile 394: | Zeile 394: | ||
| sudo systemctl enable --now containerd | sudo systemctl enable --now containerd | ||
| </ | </ | ||
| + | =====Node entfernen===== | ||
| + | |||
| + | <code bash> | ||
| + | # Node als "nicht verfügbar" | ||
| + | kubectl cordon ubuntu3 | ||
| + | |||
| + | # Drain markiert den Node als "nicht verfügbar" | ||
| + | kubectl drain ubuntu3 --ignore-daemonsets --delete-emptydir-data | ||
| + | |||
| + | # Re-Activate | ||
| + | kubectl uncordon ubuntu3 | ||
| + | </ | ||
| + | |||
| =====Labels===== | =====Labels===== | ||
| Zeile 503: | Zeile 516: | ||
| ====ReplicaSet==== | ====ReplicaSet==== | ||
| - | Update muss manuell vorgenommen werden (downtime). | + | **Wird selten genutzt**, eher für Tests/ |
| < | < | ||
| Zeile 549: | Zeile 562: | ||
| ====Deployment==== | ====Deployment==== | ||
| - | Deployments nutzen intern replicaset und managen das rolling update von selbst. Ein Deployment ist sozusagen ein Controller für Replikasets. | + | Deployments nutzen intern replicaset und managen das rolling update von selbst. Ein Deployment ist **sozusagen ein Controller für Replikasets**. |
| < | < | ||
| Zeile 644: | Zeile 657: | ||
| Bei einem Daemonset sorgt Kubernetes dafür das ein Pod per (möglichem Node) Node läuft. | Bei einem Daemonset sorgt Kubernetes dafür das ein Pod per (möglichem Node) Node läuft. | ||
| + | |||
| + | <code yaml> | ||
| + | apiVersion: apps/v1 | ||
| + | kind: DaemonSet | ||
| + | metadata: | ||
| + | name: ds-demo | ||
| + | namespace: default | ||
| + | spec: | ||
| + | selector: | ||
| + | matchLabels: | ||
| + | app: ds-demo | ||
| + | template: | ||
| + | metadata: | ||
| + | labels: | ||
| + | app: ds-demo | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: pause-and-log | ||
| + | image: busybox: | ||
| + | command: [" | ||
| + | </ | ||
| + | |||
| + | ----------- | ||
| Container bauen | Container bauen | ||
| Zeile 766: | Zeile 802: | ||
| ====Persistent Volumes==== | ====Persistent Volumes==== | ||
| - | < | + | ===NFS=== |
| + | |||
| + | < | ||
| apiVersion: v1 | apiVersion: v1 | ||
| kind: PersistentVolume | kind: PersistentVolume | ||
| Zeile 786: | Zeile 824: | ||
| server: 172.17.0.2 | server: 172.17.0.2 | ||
| </ | </ | ||
| + | |||
| + | Das Volume bindet man nicht direkt in Deployments ein. Dazu legt man einen PVC (Persistent volume claim) an. | ||
| + | |||
| + | <code yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: PersistentVolumeClaim | ||
| + | metadata: | ||
| + | name: demo-pvc | ||
| + | spec: | ||
| + | accessModes: | ||
| + | - ReadWriteOnce | ||
| + | resources: | ||
| + | requests: | ||
| + | storage: 5Gi | ||
| + | storageClassName: | ||
| + | </ | ||
| + | |||
| + | PVC in einem Deployment nutzen. | ||
| + | <code yaml> | ||
| + | apiVersion: apps/v1 | ||
| + | kind: Deployment | ||
| + | metadata: | ||
| + | name: demo | ||
| + | spec: | ||
| + | replicas: 1 | ||
| + | selector: | ||
| + | matchLabels: | ||
| + | app: demo | ||
| + | template: | ||
| + | metadata: | ||
| + | labels: | ||
| + | app: demo | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: nginx | ||
| + | image: nginx: | ||
| + | volumeMounts: | ||
| + | - name: data | ||
| + | mountPath: / | ||
| + | volumes: | ||
| + | - name: data | ||
| + | persistentVolumeClaim: | ||
| + | claimName: demo-pvc | ||
| + | </ | ||
| + | |||
| + | ===SMB=== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Secret | ||
| + | <code yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: Secret | ||
| + | metadata: | ||
| + | name: smbcreds | ||
| + | type: Opaque | ||
| + | stringData: | ||
| + | username: k8suser | ||
| + | password: " | ||
| + | # domain: " | ||
| + | </ | ||
| + | |||
| + | PV | ||
| + | <code yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: PersistentVolume | ||
| + | metadata: | ||
| + | name: pv-smb-demo | ||
| + | annotations: | ||
| + | pv.kubernetes.io/ | ||
| + | spec: | ||
| + | capacity: | ||
| + | storage: 5Gi | ||
| + | accessModes: | ||
| + | - ReadWriteMany | ||
| + | persistentVolumeReclaimPolicy: | ||
| + | storageClassName: | ||
| + | mountOptions: | ||
| + | - dir_mode=0777 | ||
| + | - file_mode=0777 | ||
| + | - noperm | ||
| + | - mfsymlinks | ||
| + | - cache=strict | ||
| + | - noserverino | ||
| + | csi: | ||
| + | driver: smb.csi.k8s.io | ||
| + | # volumeHandle muss im Cluster eindeutig sein | ||
| + | volumeHandle: | ||
| + | volumeAttributes: | ||
| + | source: // | ||
| + | nodeStageSecretRef: | ||
| + | name: smbcreds | ||
| + | namespace: default | ||
| + | </ | ||
| + | |||
| + | PVC | ||
| + | <code yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: PersistentVolumeClaim | ||
| + | metadata: | ||
| + | name: pvc-smb-demo | ||
| + | spec: | ||
| + | accessModes: | ||
| + | - ReadWriteMany | ||
| + | resources: | ||
| + | requests: | ||
| + | storage: 5Gi | ||
| + | storageClassName: | ||
| + | volumeName: pv-smb-demo | ||
| + | </ | ||
| + | |||
| + | |||
| ====StatefulSet==== | ====StatefulSet==== | ||
| Zeile 888: | Zeile 1038: | ||
| Für eine kleine Testumgebung ist hostPath oft am einfachsten. Beispiel: Daten liegen dauerhaft auf dem Node unter / | Für eine kleine Testumgebung ist hostPath oft am einfachsten. Beispiel: Daten liegen dauerhaft auf dem Node unter / | ||
| + | |||
| + | <box red> | ||
| Registry (hostPath) | Registry (hostPath) | ||