OpenHab auf einem Cluster installieren - Teil 2


Intro

Im letzten Artikel (ist schon eine Zeit lang her) hab ich kurz beschrieben, wie ich OpenHAB auf meinem Home-Kubernetes zum laufen gebracht hab. Nun folgt der versprochene Teil 2. Meist will man bei OpenHab auch noch ein paar zusätzliche Dienste wie InfluxDB oder einfach einen Log-Viewer verwenden. Naja - ich wollte es weil es bei OpenHABian auch dabei war.

Zusätzliche Container in einem Deployment

In Kubernetes deployments gibt es die nette Eigenschaft, neben der eigentlichen Applikation auch noch zusätzliche Container mit zu deployen. Sei es zum Einrichten oder einfach um weitere Dienste hinzuzufügen.

In unserem Fall fügen wir einfach 2 Container hinzu

    spec:
      containers:
      - name: influxdb
        image: influxdb
        resources:
          limits:
            memory: 1.0Gi
            cpu: "200m"
          requests:
            memory: 0.5Gi
        env:
          - name: DOCKER_INFLUXDB_INIT_USERNAME
            value: 'admin'
          - name: DOCKER_INFLUXDB_INIT_PASSWORD
            value: 'admin'
          - name: DOCKER_INFLUXDB_INIT_ORG
            value: 'openhab'
          - name: DOCKER_INFLUXDB_INIT_BUCKET
            value: 'admin'
          - name: INFLUX_TOKEN
            value: 'hPoBTr6D9utjd2zIUpXE4omz6pSFckgtGsSN5DSg_1_CK3PmWQTI2MXD1dK94tPLeHCPMUMlo5dwhEiKhb4mNQ=='
        ports:
        - containerPort: 8086
          name: influxdb
          protocol: TCP
        - containerPort: 8086
          name: influxdb
          protocol: UDP
        volumeMounts:
        - name: openhab-data
          mountPath: /var/lib/influxdb
          subPath: openhab-k8s/influxdb
        - name: openhab-data
          mountPath: /var/lib/influxdb2
          subPath: openhab-k8s/influxdb

      - name: frontail
        image: welteki/frontail-openhab
        resources:
          limits:
            memory: 1.0Gi
            cpu: "200m"
          requests:
            memory: 0.5Gi
        env:
        - name: FRONTAIL_OPTS
          value: '--url-path /'
        ports:
        - containerPort: 9001
          name: frontail
          protocol: TCP
        volumeMounts:
        - name: openhab-data
          mountPath: /var/log/openhab
          subPath: openhab-k8s/openhab-data/logs
          readOnly: true

Natürlich muss auch für diese Ports in den Service eingetragen werden:

  ports:
    - port: 8086
      targetPort: 8086
      protocol: TCP
      name: influxdb
    - port: 9001
      targetPort: 9001
      protocol: TCP
      name: logviewer

Gesamt sieht das Ganze dann so aus:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: openhab
  name: openhab
  labels:
    app: openhab
spec:
  replicas: 1
  selector:
    matchLabels:
      app: openhab
  template:
    metadata:
      labels:
        app: openhab
    spec:
      containers:
      - name: openhab
        image: openhab/openhab
        resources:
          limits:
            memory: 2.0Gi
            cpu: "2000m"
          requests:
            memory: 1.0Gi
        env:
          - name: USER_ID
            value: '501'
          - name: GROUP_ID
            value: '100'
          - name: LANG
            value: 'en_US.UTF-8'
          - name: LANGUAGE
            value: 'en_US.UTF-8'
        ports:
        - containerPort: 8080
          name: webinterface
          protocol: TCP
        - containerPort: 9125
          name: xml-rpc
          protocol: TCP
        - containerPort: 9126
          name: bin-rpc
          protocol: TCP
        - containerPort: 8101
          name: ssh
          protocol: TCP
        - containerPort: 5007
          name: lsp
          protocol: TCP
        volumeMounts:
        - name: openhab-data
          mountPath: /openhab/userdata
          subPath: openhab-k8s/openhab-data
        - name: openhab-data
          mountPath: /openhab/conf
          subPath: openhab-k8s/openhab-conf
        - name: openhab-data
          mountPath: /openhab/addons
          subPath: openhab-k8s/openhab-addons
        livenessProbe:
          initialDelaySeconds: 420
          periodSeconds: 20
          tcpSocket:
            port: 8080
          
      - name: influxdb
        image: influxdb
        resources:
          limits:
            memory: 1.0Gi
            cpu: "200m"
          requests:
            memory: 0.5Gi
        env:
          - name: DOCKER_INFLUXDB_INIT_USERNAME
            value: 'admin'
          - name: DOCKER_INFLUXDB_INIT_PASSWORD
            value: 'admin'
          - name: DOCKER_INFLUXDB_INIT_ORG
            value: 'openhab'
          - name: DOCKER_INFLUXDB_INIT_BUCKET
            value: 'admin'
          - name: INFLUX_TOKEN
            value: 'hPoBTr6D9utjd2zIUpXE4omz6pSFckgtGsSN5DSg_1_CK3PmWQTI2MXD1dK94tPLeHCPMUMlo5dwhEiKhb4mNQ=='
        ports:
        - containerPort: 8086
          name: influxdb
          protocol: TCP
        - containerPort: 8086
          name: influxdb
          protocol: UDP
        volumeMounts:
        - name: openhab-data
          mountPath: /var/lib/influxdb
          subPath: openhab-k8s/influxdb
        - name: openhab-data
          mountPath: /var/lib/influxdb2
          subPath: openhab-k8s/influxdb

      - name: frontail
        image: welteki/frontail-openhab
        resources:
          limits:
            memory: 1.0Gi
            cpu: "200m"
          requests:
            memory: 0.5Gi
        env:
        - name: FRONTAIL_OPTS
          value: '--url-path /'
        ports:
        - containerPort: 9001
          name: frontail
          protocol: TCP
        volumeMounts:
        - name: openhab-data
          mountPath: /var/log/openhab
          subPath: openhab-k8s/openhab-data/logs
          readOnly: true

      volumes:
      - name: openhab-data
        persistentVolumeClaim:
          claimName: openhab-pvc-data


---
apiVersion: v1
kind: Service
metadata:
  namespace: openhab
  name: openhab-web
spec:
  type: LoadBalancer
  selector:
    app: openhab
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
      name: webinterface
    - port: 8086
      targetPort: 8086
      protocol: TCP
      name: influxdb
    - port: 9001
      targetPort: 9001
      protocol: TCP
      name: logviewer
    - port: 9125
      targetPort: 9125
      name: xml-rpc
    - port: 9126
      targetPort: 9126
      protocol: TCP
      name: bin-rpc
    - port: 22
      targetPort: 8101
      protocol: TCP
      name: ssh
    - port: 5007
      targetPort: 5007
      protocol: TCP
      name: lsp

---
apiVersion: v1
kind: Service
metadata:
  namespace: openhab
  name: openhab-homematic-service
spec:
  type: NodePort
  selector:
    app: openhab
  ports:
    - port: 9125
      targetPort: 9125
      protocol: UDP
      name: xml-rpc
    - port: 9126
      targetPort: 9126
      protocol: UDP
      name: bin-rpc

---
apiVersion: v1
kind: Service
metadata:
  namespace: openhab
  name: influxdb
spec:
  type: ClusterIP
  selector:
    app: openhab
  ports:
    - port: 8086
      targetPort: 8086
      protocol: TCP
      name: influxdb
    - port: 8086
      targetPort: 8086
      protocol: UDP
      name: influxdb      

InfluxDB muss natürlich in OpenHAB noch eingerichtet werden. Bitte Benutzernamen und Passwort aus den Environment-Variablen verwenden.

Anmerkung

Inzwischen bin ich von OpenHAB zu HomeAssistant gewechselt. Deswegen wird es in der Hinsicht leider keine weiteren Artikel mehr geben.