# Portainer CE im Cluster, Umzug von appsrv08 (Portainer EE 2.45.1) mit übernommener Datenbank (Benutzer, # API-Schlüssel, Umgebungen, Stacks). Läuft auf der Dienst-VM k3s (tank, HA), Daten auf local-path dieser VM. # Erst-Befüllung und Rollback BE→CE macht playbooks/portainer-k3s.yml aus /root/.config/knaster/portainer_data.tgz. # Erreichbar: https://:30779 (NodePort), von außen über den nginx auf appsrv08 (portainer.mygodel.de). # Dieselbe Version wie auf appsrv08 (2.45.1): die Datenbank wird beim Start nicht migriert. apiVersion: v1 kind: Namespace metadata: name: portainer-ce labels: knaster.app: portainer --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: portainer-data namespace: portainer-ce spec: accessModes: [ReadWriteOnce] storageClassName: local-path resources: requests: storage: 2Gi --- # Portainer verwaltet den eigenen Cluster über ein ServiceAccount (Umgebung „local“ wird beim ersten Start angelegt). apiVersion: v1 kind: ServiceAccount metadata: name: portainer-sa-clusteradmin namespace: portainer-ce --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: portainer-ce-crb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: portainer-sa-clusteradmin namespace: portainer-ce --- apiVersion: apps/v1 kind: Deployment metadata: name: portainer namespace: portainer-ce labels: {app: portainer-ce} spec: replicas: 1 strategy: {type: Recreate} selector: matchLabels: {app: portainer-ce} template: metadata: labels: {app: portainer-ce} spec: serviceAccountName: portainer-sa-clusteradmin nodeSelector: knaster.role: control # Dienst-VM k3s: tank, HA, Replikation containers: - name: portainer image: portainer/portainer-ce:2.45.1 ports: - {name: https, containerPort: 9443} - {name: edge, containerPort: 8000} resources: requests: {cpu: 50m, memory: 128Mi} limits: {memory: 512Mi} volumeMounts: - {name: data, mountPath: /data} readinessProbe: httpGet: {path: /api/system/status, port: https, scheme: HTTPS} periodSeconds: 10 livenessProbe: httpGet: {path: /api/system/status, port: https, scheme: HTTPS} periodSeconds: 30 failureThreshold: 3 volumes: - name: data persistentVolumeClaim: {claimName: portainer-data} --- apiVersion: v1 kind: Service metadata: name: portainer namespace: portainer-ce labels: {app: portainer-ce} spec: type: NodePort selector: {app: portainer-ce} ports: - {name: https, port: 9443, targetPort: https, nodePort: 30779}