]> Untitled Git - lemmy.git/commitdiff
feat(ops): k8s
authorzacanger <zac@zacanger.com>
Mon, 7 Oct 2019 18:20:03 +0000 (12:20 -0600)
committerzacanger <zac@zacanger.com>
Tue, 8 Oct 2019 01:00:38 +0000 (19:00 -0600)
README.md
docker/k8s/db.yml [new file with mode: 0644]
docker/k8s/lemmy.yml [new file with mode: 0644]
docker/k8s/pictshare.yml [new file with mode: 0644]

index 5e7d879ca04f06043c743c49dff6ecccf6c4fde0..afa345c1dc5d674af19829817c54f3a94f0d2851 100644 (file)
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ Front Page|Post
 
 - Open source, [AGPL License](/LICENSE).
 - Self hostable, easy to deploy.
-  - Comes with [Docker](#docker), [Ansible](#ansible).
+  - Comes with [Docker](#docker), [Ansible](#ansible), [Kubernetes](#kubernetes).
 - Live-updating Comment threads.
 - Full vote scores `(+/-)` like old reddit.
 - Moderation abilities.
@@ -112,6 +112,31 @@ nano inventory # enter your server, domain, contact email
 ansible-playbook lemmy.yml --become
 ```
 
+### Kubernetes
+
+You'll need to have an existing Kubernetes cluster and [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/).
+Setting this up will vary depending on your provider.
+To try it locally, you can use [MicroK8s](https://microk8s.io/) or [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/).
+
+Once you have a working cluster, edit the environment variables and volume sizes in `docker/k8s/*.yml`.
+You may also want to change the service types to use `LoadBalancer`s depending on where you're running your cluster (add `type: LoadBalancer` to `ports)`, or `NodePort`s.
+By default they will use `ClusterIP`s, which will allow access only within the cluster. See the [docs](https://kubernetes.io/docs/concepts/services-networking/service/) for more on networking in Kubernetes.
+
+**Important** Running a database in Kubernetes will work, but is generally not recommended.
+If you're deploying on any of the common cloud providers, you should consider using their managed database service instead (RDS, Cloud SQL, Azure Databse, etc.).
+
+Now you can deploy:
+
+```bash
+# Add `-n foo` if you want to deploy into a specific namespace `foo`;
+# otherwise your resources will be created in the `default` namespace.
+kubectl apply -f docker/k8s/db.yml
+kubectl apply -f docker/k8s/pictshare.yml
+kubectl apply -f docker/k8s/lemmy.yml
+```
+
+If you used a `LoadBalancer`, you should see it in your cloud provider's console.
+
 ## Develop
 
 ### Docker Development
diff --git a/docker/k8s/db.yml b/docker/k8s/db.yml
new file mode 100644 (file)
index 0000000..4b78a8c
--- /dev/null
@@ -0,0 +1,48 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    lemmy.service: db
+  name: db
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+  template:
+    metadata:
+      labels:
+        lemmy.service: db
+    spec:
+      containers:
+      - env:
+        - name: POSTGRES_DB
+          value: lemmy
+        - name: POSTGRES_PASSWORD
+          # example: very-good-password
+          value: CHANGE_ME
+        - name: POSTGRES_USER
+          value: lemmy
+        image: postgres:12-alpine
+        name: db
+        volumeMounts:
+        - mountPath: /var/lib/postgresql/data
+          name: db
+      restartPolicy: Always
+      volumes:
+      - name: db
+        persistentVolumeClaim:
+          claimName: db
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    lemmy.service: db
+  name: db
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 20Gi
diff --git a/docker/k8s/lemmy.yml b/docker/k8s/lemmy.yml
new file mode 100644 (file)
index 0000000..f05b172
--- /dev/null
@@ -0,0 +1,46 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    lemmy.service: lemmy
+  name: lemmy
+spec:
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        lemmy.service: lemmy
+    spec:
+      containers:
+      - env:
+        - name: DATABASE_URL
+          # example: 'postgres://lemmy:password@db:5432/lemmy'
+          value: CHANGE_ME
+        - name: HOSTNAME
+          # example: 'lemmy.example.com'
+          value: CHANGE_ME
+        - name: JWT_SECRET
+          # example: 'very-super-good-secret'
+          value: CHANGE_ME
+        - name: LEMMY_FRONT_END_DIR
+          value: /app/dist
+        image: dessalines/lemmy:v0.2.0.1
+        name: lemmy
+        ports:
+        - containerPort: 8536
+      restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    lemmy.service: lemmy
+  name: lemmy
+spec:
+  ports:
+  - name: "8536"
+    port: 8536
+    targetPort: 8536
+  selector:
+    lemmy.service: lemmy
diff --git a/docker/k8s/pictshare.yml b/docker/k8s/pictshare.yml
new file mode 100644 (file)
index 0000000..1209e83
--- /dev/null
@@ -0,0 +1,57 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+  labels:
+    lemmy.service: pictshare
+  name: pictshare
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+  template:
+    metadata:
+      labels:
+        lemmy.service: pictshare
+    spec:
+      containers:
+      - image: hascheksolutions/pictshare:latest
+        name: pictshare
+        ports:
+        - containerPort: 80
+        volumeMounts:
+        - mountPath: /usr/share/nginx/html/data
+          name: pictshare
+      restartPolicy: Always
+      volumes:
+      - name: pictshare
+        persistentVolumeClaim:
+          claimName: pictshare
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    lemmy.service: pictshare
+  name: pictshare
+spec:
+  ports:
+  - name: "8537"
+    port: 8537
+    targetPort: 80
+  selector:
+    lemmy.service: pictshare
+status:
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  labels:
+    lemmy.service: pictshare
+  name: pictshare
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 20Gi