apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: changedetection name: changedetection namespace: default spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: changedetection strategy: type: Recreate template: metadata: labels: app.kubernetes.io/name: changedetection spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - preference: matchExpressions: - key: kubernetes.io/hostname operator: In values: - iris weight: 100 containers: - env: - name: PUID value: '1000' - name: PGID value: '1000' - name: TZ value: Etc/UTC - name: BASE_URL value: http://change.haven/ - name: PLAYWRIGHT_DRIVER_URL value: ws://localhost:3000 image: lscr.io/linuxserver/changedetection.io:latest imagePullPolicy: Always name: changedetection ports: - containerPort: 5000 name: http protocol: TCP resources: limits: cpu: '2' memory: 1Gi requests: cpu: 100m memory: 256Mi securityContext: allowPrivilegeEscalation: false runAsUser: 0 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /config name: config - env: - name: SCREEN_WIDTH value: '1920' - name: SCREEN_HEIGHT value: '1024' - name: SCREEN_DEPTH value: '16' - name: MAX_CONCURRENT_CHROME_PROCESSES value: '10' image: dgtlmoon/sockpuppetbrowser:latest imagePullPolicy: Always name: browser-sockpuppet-chrome ports: - containerPort: 3000 name: ws protocol: TCP resources: {} securityContext: allowPrivilegeEscalation: false capabilities: add: - SYS_ADMIN drop: - ALL terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - name: config persistentVolumeClaim: claimName: changedetection-config status: availableReplicas: 1 conditions: - lastTransitionTime: '2026-08-04T16:20:08Z' lastUpdateTime: '2026-08-04T16:32:45Z' message: ReplicaSet "changedetection-77cd668cf4" has successfully progressed. reason: NewReplicaSetAvailable status: 'True' type: Progressing - lastTransitionTime: '2026-08-28T06:05:12Z' lastUpdateTime: '2026-08-28T06:05:12Z' message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: 'True' type: Available observedGeneration: 22 readyReplicas: 1 replicas: 1 terminatingReplicas: 0 updatedReplicas: 1 --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: changedetection name: changedetection namespace: default spec: internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: http port: 5000 protocol: TCP targetPort: http selector: app.kubernetes.io/name: changedetection sessionAffinity: None type: ClusterIP status: loadBalancer: {} --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: labels: app.kubernetes.io/name: changedetection name: changedetection namespace: default spec: ingressClassName: nginx rules: - host: change.haven http: paths: - backend: service: name: changedetection port: number: 5000 path: / pathType: Prefix status: loadBalancer: ingress: - ip: 192.168.20.204 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: changedetection-config namespace: default spec: accessModes: - ReadWriteOnce resources: limits: storage: 2Gi requests: storage: 1Gi storageClassName: nfs-client volumeMode: Filesystem status: accessModes: - ReadWriteOnce capacity: storage: 1Gi phase: Bound