Benutzer-Werkzeuge

Webseiten-Werkzeuge


kubernetes

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kubernetes [2025/11/26 18:21]
jango [ReplicaSet]
kubernetes [2025/11/27 01:05] (aktuell)
jango [Lokale Registry]
Zeile 394: Zeile 394:
 sudo systemctl enable --now containerd sudo systemctl enable --now containerd
 </code> </code>
 +=====Node entfernen=====
 +
 +<code bash>
 +# Node als "nicht verfügbar" markieren, Pods werden nicht woanders hin verschoben aber keine neuen mehr auf dem Node platziert
 +kubectl cordon ubuntu3
 +
 +# Drain markiert den Node als "nicht verfügbar" und verschiebt zusätzlich alle Pods auf andere Nodes.
 +kubectl drain ubuntu3 --ignore-daemonsets --delete-emptydir-data
 +
 +# Re-Activate
 +kubectl uncordon ubuntu3
 +</code>
 +
 =====Labels===== =====Labels=====
  
Zeile 503: Zeile 516:
 ====ReplicaSet==== ====ReplicaSet====
  
-Wird selten genutzt, eher für Tests/Labs. Update muss manuell vorgenommen werden (downtime).+**Wird selten genutzt**, eher für Tests/Labs. Update muss manuell vorgenommen werden (downtime).
  
 <code> <code>
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**.
    
 <code> <code>
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:1.36
 +        command: ["sh","-c","echo 'Hello from node:' $(cat /etc/hostname); sleep 360000"]
 +</code>
 +
 +-----------
  
 Container bauen Container bauen
Zeile 766: Zeile 802:
 ====Persistent Volumes==== ====Persistent Volumes====
  
-<code>+===NFS=== 
 + 
 +<code yaml>
 apiVersion: v1 apiVersion: v1
 kind: PersistentVolume kind: PersistentVolume
Zeile 786: Zeile 824:
     server: 172.17.0.2     server: 172.17.0.2
 </code> </code>
 +
 +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: slow
 +</code>
 +
 +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:stable
 +        volumeMounts:
 +        - name: data
 +          mountPath: /usr/share/nginx/html
 +      volumes:
 +      - name: data
 +        persistentVolumeClaim:
 +          claimName: demo-pvc
 +</code>
 +
 +===SMB===
 +
 +[[https://github.com/kubernetes-csi/csi-driver-smb|Treiber]]
 +
 +Secret
 +<code yaml>
 +apiVersion: v1
 +kind: Secret
 +metadata:
 +  name: smbcreds
 +type: Opaque
 +stringData:
 +  username: k8suser
 +  password: "DEIN_PASSWORT"
 +  # domain: "DEINDOMAIN"   # nur wenn Domain-User
 +</code>
 +
 +PV
 +<code yaml>
 +apiVersion: v1
 +kind: PersistentVolume
 +metadata:
 +  name: pv-smb-demo
 +  annotations:
 +    pv.kubernetes.io/provisioned-by: smb.csi.k8s.io
 +spec:
 +  capacity:
 +    storage: 5Gi
 +  accessModes:
 +    - ReadWriteMany
 +  persistentVolumeReclaimPolicy: Retain
 +  storageClassName: smb
 +  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: WIN-SERVER.local/k8s-demo##
 +    volumeAttributes:
 +      source: //WIN-SERVER.local/k8s-demo
 +    nodeStageSecretRef:
 +      name: smbcreds
 +      namespace: default
 +</code>
 +
 +PVC
 +<code yaml>
 +apiVersion: v1
 +kind: PersistentVolumeClaim
 +metadata:
 +  name: pvc-smb-demo
 +spec:
 +  accessModes:
 +    - ReadWriteMany
 +  resources:
 +    requests:
 +      storage: 5Gi
 +  storageClassName: smb
 +  volumeName: pv-smb-demo
 +</code>
 +
 +
 ====StatefulSet==== ====StatefulSet====
  
Zeile 888: Zeile 1038:
  
 Für eine kleine Testumgebung ist hostPath oft am einfachsten. Beispiel: Daten liegen dauerhaft auf dem Node unter /opt/registry/data. Für eine kleine Testumgebung ist hostPath oft am einfachsten. Beispiel: Daten liegen dauerhaft auf dem Node unter /opt/registry/data.
 +
 +<box red>Vorsicht: Wenn man den ganzen Cluster neu startet und die Registry auf einen anderen Node verteilt wird, hostPath ist immer nur auf dem aktuellen Node, nicht clusterweit. Für Demo reichts.</box>
  
 Registry (hostPath) Registry (hostPath)
kubernetes.1764177713.txt.gz · Zuletzt geändert: 2025/11/26 18:21 von jango