diff --git a/plex/plex-deployment.yaml b/plex/plex-deployment.yaml new file mode 100644 index 0000000..1016031 --- /dev/null +++ b/plex/plex-deployment.yaml @@ -0,0 +1,95 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: plex + namespace: plex-ns + annotations: + force-recreate: true +spec: + replicas: 1 + selector: + matchLabels: + app: plex + template: + metadata: + labels: + app: plex + spec: + nodeSelector: + kubernetes.io/hostname: gluttony + containers: + - name: plex + image: plexinc/pms-docker:public + env: + - name: TZ + value: EST + - name: PLEX_UID + value: "1000" + - name: PLEX_GID + value: "1000" + ports: + - containerPort: 32400 + - containerPort: 8234 + - containerPort: 32469 + - containerPort: 1900 + - containerPort: 32410 + - containerPort: 32412 + - containerPort: 32413 + - containerPort: 32414 + volumeMounts: + - name: plex-config + mountPath: /config + - name: plex-media + mountPath: /data + + # Sidecar providing access to upload/view/download raw media files + - name: filebrowswer + image: git.clortox.com/infrastructure/filebrowser:v1.0.1 + env: + - name: ADMIN_PASS + valueFrom: + secretKeyRef: + name: filebrowser-secret + key: ADMIN-PASS + - name: DEFAULT_USERNAME + value: "default" + - name: DEFAULT_PASSWORD + valueFrom: + secretKeyRef: + name: filebrowser-secret + key: DEFAULT-PASS + - name: BRANDING_NAME + value: "Media Storage" + - name: AUTH_METHOD + value: "proxy" + - name: AUTH_HEADER + value: "X-Auth-User" + - name: PERM_ADMIN + value: "false" + - name: PERM_EXECUTE + value: "false" + - name: PERM_CREATE + value: "true" + - name: PERM_RENAME + value: "true" + - name: PERM_MODIFY + value: "true" + - name: PERM_DELETE + value: "false" + - name: PERM_SHARE + value: "true" + - name: PERM_DOWNLOAD + value: "true" + volumeMounts: + - name: plex-media + mountPath: /srv + ports: + - containerPort: 80 + + volumes: + - name: plex-config + persistentVolumeClaim: + claimName: plex-pvc-config + - name: plex-media + persistentVolumeClaim: + claimName: plex-pvc-media diff --git a/plex/plex-pv-media.yaml b/plex/plex-pv-media.yaml new file mode 100644 index 0000000..90e9d38 --- /dev/null +++ b/plex/plex-pv-media.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: plex-pv-media +spec: + storageClassName: local-storage + capacity: + storage: 18000Gi + accessModes: + - ReadWriteMany + hostPath: + path: "/Main/Media" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - gluttony diff --git a/plex/plex-pvc-config.yaml b/plex/plex-pvc-config.yaml new file mode 100644 index 0000000..c010d33 --- /dev/null +++ b/plex/plex-pvc-config.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: plex-pvc-config + namespace: plex-ns +spec: + storageClassName: longhorn + accessModes: + - ReadWriteMany + resources: + requests: + storage: 200Gi diff --git a/plex/plex-pvc-media.yaml b/plex/plex-pvc-media.yaml new file mode 100644 index 0000000..c5f9816 --- /dev/null +++ b/plex/plex-pvc-media.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: plex-pvc-media + namespace: plex-ns +spec: + volumeName: plex-pv-media + storageClassName: local-storage + accessModes: + - ReadWriteMany + resources: + requests: + storage: 18000Gi diff --git a/plex/plex-service.yaml b/plex/plex-service.yaml new file mode 100644 index 0000000..e999ada --- /dev/null +++ b/plex/plex-service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: plex-service + namespace: plex-ns +spec: + selector: + app: plex + type: LoadBalancer + ports: + - name: plex + protocol: TCP + port: 32400 + targetPort: 32400 + - name: filebrowswer + protocol: TCP + port: 80 + targetPort: 80 diff --git a/plex/sealed-secret.yaml b/plex/sealed-secret.yaml new file mode 100644 index 0000000..d35c7b0 --- /dev/null +++ b/plex/sealed-secret.yaml @@ -0,0 +1,15 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + creationTimestamp: null + name: filebrowser-secret + namespace: plex-ns +spec: + encryptedData: + ADMIN-PASS: AgAj7jrppKzPFfnYDV+FEuXQx9lrkppWFElR3DjtR017tpBQs6/KjZYU1TX81TkNh8cONg4mGB72zvk60Yft5b5TSgZWuKA4qTXYEoFusyMR3wyOU/Ft7ZMk7IAr/7Hi9dDAh3CkmrQ2lQ3C5hRlfTljaSxqC9abmEZIeSo7OhrkX8YIvFhanBMbPenfkulSsK38dp3PfIC8kntRV1u37Z7CxovVu+Kn7IoRC4sKa3gcdJ5lIA/Aq3rln8atmzZcPGPzjIAPY4P72mjPaeIvzqzLsNMcecIIr20MyLTOG/eI8WrM+WC+dgyvj/Pjq/hzTW1QD3z4jZW224o4ghKiPr6mW0BbN6KBBqv/JFtpBqiYgGi/ADBVxTG7YUA+FcT7YA6nuxlqg+TMpwqP8ZJBmghosBeqmBndjKUjpexoihmy+XTDbEr7e8RDpOdL9jS9hGPt47cmFITSFSEQIGM6kOtdYWcMw6+aKkTt5Ul4bUfV9TXultGyNYITibATXWNqbRfZDjYVrWOIfoVJOe19N3WZg9R4UeKzow3RkoJvn3MUTYOOrzr9Csx+VxUMeGxLPFftedUIy8zzXaqL/0OFogQZ2P+mesiYxc67Z4VS2u0+iCLkJdUDYnM+2q6TRQMI2nP40ko62xDuSE2BDcufqsKfHoddswlYDyelLVqJKee+P3sUoxcblYlv6kqz1GbVhBKQrHzFphx72KG219N9zwjOI6w8V6NXHUEFblQ3gt9RPA== + DEFAULT-PASS: AgDXxxyMBUb7Q0J8LvxPXNEAz75c1JcS7xL3rN7E2Wg7MLsZHj2/0hRf9jaCCyyVnr/Pabbdmjb0nth4Dlm50tLWH+rU7KtLPwHB0pMVi9zSxKBdyvOJurVdY/nlbSuanxSL37rBOrwRQRv6t8w/IIs4R9GEaFjxKoIJTuV8JRu3r62FiL/3o2zyok9UYcLxw2h9H7B9yn9wXn5CAFk0M4jNRUns3oU7d0/hPbfwC216vU0ZIdga8yYlZw3zvVz54mX2XECnHWZT8gPK1w6v8AEca/kDFuVFBi63OdXFgjBHCa/uSs5wifzNPBzcRA+A8s/JgoSHEeMXTmBsMOlihSSz0kSGHS/rUdu6nZamVZfzCWOHskb3RVjs23yNJsSEDlYR/AMeAjnkMDvMe5b/X/eV1AOYkAQ/pACrSk2aG+4kLmLoLYXaeDVf8pTHj4yOvdffWk39ClCqIOyWF2+//N02lDepVwis498cL+7I4kEVXqy9FugUCsbtzxVXX6OHym4KpBZpAmrMqH83rC6CtU4orF6gjmTKCe1Ufq5GmsQgFFZTZYTexnbeTKXz6yw+RbHLTGdsaJnMaAQx5uB3khO9Pkge7/HLDmXEx+mtaaTvk7AF8PWjFJSQZEWxVSCr6O1Zd4LKsg0EP6Mrk+s+8OOfGb42e3wfJ6gY7KlTBBu8KmKnHRQl9uoMVO7y5PWwl+B3Wam5j78ggV4L9UmiEw6gYvrc8rmQWZqQbuw7pClQ3Q== + template: + metadata: + creationTimestamp: null + name: filebrowser-secret + namespace: plex-ns