├── secrets.yaml ├── README.md ├── master.yaml └── workers.yaml /secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: citus-secrets 5 | type: Opaque 6 | data: 7 | password: -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 1. Set password in secrets.yaml 2 | 2. Create Master node using master.yaml 3 | 3. Create Worker nodes using workers.yaml 4 | 5 | Tested on Kubernetes 1.8 6 | -------------------------------------------------------------------------------- /master.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: citus-master-pvc 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 50Gi 11 | --- 12 | apiVersion: v1 13 | kind: Service 14 | metadata: 15 | name: citus-master 16 | labels: 17 | app: citus-master 18 | spec: 19 | selector: 20 | app: citus-master 21 | clusterIP: None 22 | ports: 23 | - port: 5432 24 | --- 25 | apiVersion: apps/v1beta2 26 | kind: Deployment 27 | metadata: 28 | name: citus-master 29 | spec: 30 | selector: 31 | matchLabels: 32 | app: citus-master 33 | replicas: 1 34 | template: 35 | metadata: 36 | labels: 37 | app: citus-master 38 | spec: 39 | containers: 40 | - name: citus 41 | image: citusdata/citus:7.3.0 42 | ports: 43 | - containerPort: 5432 44 | env: 45 | - name: PGDATA 46 | value: /var/lib/postgresql/data/pgdata 47 | - name: PGPASSWORD 48 | valueFrom: 49 | secretKeyRef: 50 | name: citus-secrets 51 | key: password 52 | - name: POSTGRES_PASSWORD 53 | valueFrom: 54 | secretKeyRef: 55 | name: citus-secrets 56 | key: password 57 | volumeMounts: 58 | - name: storage 59 | mountPath: /var/lib/postgresql/data 60 | livenessProbe: 61 | exec: 62 | command: 63 | - ./pg_healthcheck 64 | initialDelaySeconds: 60 65 | volumes: 66 | - name: storage 67 | persistentVolumeClaim: 68 | claimName: citus-master-pvc -------------------------------------------------------------------------------- /workers.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: citus-workers 5 | labels: 6 | app: citus-workers 7 | spec: 8 | selector: 9 | app: citus-workers 10 | clusterIP: None 11 | ports: 12 | - port: 5432 13 | --- 14 | apiVersion: apps/v1beta2 15 | kind: StatefulSet 16 | metadata: 17 | name: citus-worker 18 | spec: 19 | selector: 20 | matchLabels: 21 | app: citus-workers 22 | serviceName: citus-workers 23 | replicas: 3 24 | template: 25 | metadata: 26 | labels: 27 | app: citus-workers 28 | spec: 29 | containers: 30 | - name: citus-worker 31 | image: citusdata/citus:7.3.0 32 | lifecycle: 33 | postStart: 34 | exec: 35 | command: 36 | - /bin/sh 37 | - -c 38 | - if [ ${POD_IP} ]; then psql --host=citus-master --username=postgres --command="SELECT * from master_add_node('${HOSTNAME}.citus-workers', 5432);" ; fi 39 | ports: 40 | - containerPort: 5432 41 | env: 42 | - name: POD_IP 43 | valueFrom: 44 | fieldRef: 45 | fieldPath: status.podIP 46 | - name: PGPASSWORD 47 | valueFrom: 48 | secretKeyRef: 49 | name: citus-secrets 50 | key: password 51 | - name: POSTGRES_PASSWORD 52 | valueFrom: 53 | secretKeyRef: 54 | name: citus-secrets 55 | key: password 56 | - name: PGDATA 57 | value: /var/lib/postgresql/data/pgdata 58 | volumeMounts: 59 | - name: storage 60 | mountPath: /var/lib/postgresql/data 61 | livenessProbe: 62 | exec: 63 | command: 64 | - ./pg_healthcheck 65 | initialDelaySeconds: 60 66 | volumeClaimTemplates: 67 | - metadata: 68 | name: storage 69 | spec: 70 | accessModes: [ "ReadWriteOnce" ] 71 | resources: 72 | requests: 73 | storage: 50Gi --------------------------------------------------------------------------------