From edb8885f008448562abb1c44cd2be468bc91d7f9 Mon Sep 17 00:00:00 2001 From: Jacob Cody Wimer Date: Mon, 15 Apr 2019 14:40:18 -0400 Subject: [PATCH] Add kubernetes manifests --- deploy/docker-compose-test.yml | 2 - .../ingress.yaml} | 32 ++-- .../mariadb-standalone.yaml} | 132 ++++++------- .../{ => wdev}/memcached-standalone.yaml | 86 ++++----- deploy/kubernetes/wdev/wrestlingdev.yaml | 177 ++++++++++++++++++ deploy/kubernetes/wrestlingdev-prod.yaml | 113 ----------- deploy/rails-prod-Dockerfile | 3 +- 7 files changed, 304 insertions(+), 241 deletions(-) rename deploy/kubernetes/{ingress-definitions.yaml => wdev/ingress.yaml} (69%) rename deploy/kubernetes/{mysql-standalone.yaml => wdev/mariadb-standalone.yaml} (69%) rename deploy/kubernetes/{ => wdev}/memcached-standalone.yaml (92%) create mode 100644 deploy/kubernetes/wdev/wrestlingdev.yaml delete mode 100644 deploy/kubernetes/wrestlingdev-prod.yaml diff --git a/deploy/docker-compose-test.yml b/deploy/docker-compose-test.yml index b2c8355..ee3af21 100644 --- a/deploy/docker-compose-test.yml +++ b/deploy/docker-compose-test.yml @@ -64,8 +64,6 @@ services: database: caching: restart: always - healthcheck: - test: kill -0 1 command: bundle exec bin/delayed_job -n 1 run memcached: diff --git a/deploy/kubernetes/ingress-definitions.yaml b/deploy/kubernetes/wdev/ingress.yaml similarity index 69% rename from deploy/kubernetes/ingress-definitions.yaml rename to deploy/kubernetes/wdev/ingress.yaml index 28fe879..b17d42d 100644 --- a/deploy/kubernetes/ingress-definitions.yaml +++ b/deploy/kubernetes/wdev/ingress.yaml @@ -1,16 +1,16 @@ -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: wrestlingdev-app-ingress -spec: - rules: - - host: kube.wrestlingdev.com - http: - paths: - - path: / - backend: - serviceName: wrestlingdev-app - servicePort: 80 - tls: - - hosts: - - kube.wrestlingdev.com \ No newline at end of file +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: wrestlingdev-app-ingress +spec: + rules: + - host: wrestlingdev.jqw43.platform-lab.cloud.cas.org + http: + paths: + - path: / + backend: + serviceName: wrestlingdev-app + servicePort: 80 + tls: + - hosts: + - wrestlingdev.jqw43.platform-lab.cloud.cas.org diff --git a/deploy/kubernetes/mysql-standalone.yaml b/deploy/kubernetes/wdev/mariadb-standalone.yaml similarity index 69% rename from deploy/kubernetes/mysql-standalone.yaml rename to deploy/kubernetes/wdev/mariadb-standalone.yaml index 634cd19..adeecdc 100644 --- a/deploy/kubernetes/mysql-standalone.yaml +++ b/deploy/kubernetes/wdev/mariadb-standalone.yaml @@ -1,66 +1,66 @@ -apiVersion: v1 -kind: Service -metadata: - name: wrestlingdev-mysql - labels: - app: wrestlingdev -spec: - ports: - - port: 3306 - selector: - app: wrestlingdev - tier: mysql - clusterIP: None ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: wrestlingdev-mysql-pv-claim - labels: - app: wrestlingdev -spec: - storageClassName: standard - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 20Gi ---- -apiVersion: apps/v1beta1 -kind: Deployment -metadata: - name: wrestlingdev-mysql - labels: - app: wrestlingdev -spec: - strategy: - type: Recreate - template: - metadata: - labels: - app: wrestlingdev - tier: mysql - spec: - containers: - - image: mysql:5.6 - name: mysql - env: - - name: MYSQL_ROOT_PASSWORD - value: password - ports: - - containerPort: 3306 - name: mysql - volumeMounts: - - name: wrestlingdev-mysql-persistent-storage - mountPath: /var/lib/mysql - resources: - limits: - cpu: "0.5" - memory: "512Mi" - requests: - memory: "256Mi" - cpu: "0.2" - volumes: - - name: wrestlingdev-mysql-persistent-storage - persistentVolumeClaim: - claimName: wrestlingdev-mysql-pv-claim \ No newline at end of file +apiVersion: v1 +kind: Service +metadata: + name: wrestlingdev-mariadb + labels: + app: wrestlingdev +spec: + ports: + - port: 3306 + selector: + app: wrestlingdev + tier: mariadb + clusterIP: None +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wrestlingdev-mariadb-pv-claim + labels: + app: wrestlingdev +spec: + storageClassName: standard + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: wrestlingdev-mariadb + labels: + app: wrestlingdev +spec: + strategy: + type: Recreate + template: + metadata: + labels: + app: wrestlingdev + tier: mariadb + spec: + containers: + - image: mariadb:10.3 + name: mariadb + env: + - name: MYSQL_ROOT_PASSWORD + value: password + ports: + - containerPort: 3306 + name: mariadb + volumeMounts: + - name: wrestlingdev-mariadb-persistent-storage + mountPath: /var/lib/mysql + resources: + limits: + cpu: "0.5" + memory: "512Mi" + requests: + memory: "256Mi" + cpu: "0.2" + volumes: + - name: wrestlingdev-mariadb-persistent-storage + persistentVolumeClaim: + claimName: wrestlingdev-mariadb-pv-claim diff --git a/deploy/kubernetes/memcached-standalone.yaml b/deploy/kubernetes/wdev/memcached-standalone.yaml similarity index 92% rename from deploy/kubernetes/memcached-standalone.yaml rename to deploy/kubernetes/wdev/memcached-standalone.yaml index b458ff5..9d70563 100644 --- a/deploy/kubernetes/memcached-standalone.yaml +++ b/deploy/kubernetes/wdev/memcached-standalone.yaml @@ -1,43 +1,43 @@ -apiVersion: v1 -kind: Service -metadata: - name: wrestlingdev-memcached - labels: - app: wrestlingdev -spec: - ports: - - port: 11211 - selector: - app: wrestlingdev - tier: memcached - clusterIP: None ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: wrestlingdev-memcached-deployment - labels: - app: wrestlingdev -spec: - replicas: 1 - selector: - matchLabels: - app: wrestlingdev - template: - metadata: - labels: - app: wrestlingdev - tier: memcached - spec: - containers: - - name: wrestlingdev-memcached - image: memcached - ports: - - containerPort: 11211 - resources: - limits: - cpu: "0.2" - memory: "64Mi" - requests: - memory: "64Mi" - cpu: "0.1" \ No newline at end of file +apiVersion: v1 +kind: Service +metadata: + name: wrestlingdev-memcached + labels: + app: wrestlingdev +spec: + ports: + - port: 11211 + selector: + app: wrestlingdev + tier: memcached + clusterIP: None +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wrestlingdev-memcached-deployment + labels: + app: wrestlingdev +spec: + replicas: 1 + selector: + matchLabels: + app: wrestlingdev + template: + metadata: + labels: + app: wrestlingdev + tier: memcached + spec: + containers: + - name: wrestlingdev-memcached + image: memcached + ports: + - containerPort: 11211 + resources: + limits: + cpu: "0.2" + memory: "64Mi" + requests: + memory: "64Mi" + cpu: "0.1" diff --git a/deploy/kubernetes/wdev/wrestlingdev.yaml b/deploy/kubernetes/wdev/wrestlingdev.yaml new file mode 100644 index 0000000..d935024 --- /dev/null +++ b/deploy/kubernetes/wdev/wrestlingdev.yaml @@ -0,0 +1,177 @@ +apiVersion: v1 +kind: Service +metadata: + name: wrestlingdev-app + labels: + app: wrestlingdev +spec: + ports: + - port: 80 + selector: + app: wrestlingdev + tier: frontend + clusterIP: None +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wrestlingdev-app-deployment + labels: + app: wrestlingdev +spec: + replicas: 1 + selector: + matchLabels: + app: wrestlingdev + template: + metadata: + labels: + app: wrestlingdev + tier: frontend + spec: + containers: + - name: wrestlingdev-app + image: jcwimer/wrestlingdev:prod + imagePullPolicy: Always + command: ["bundle"] + args: ["exec", "passenger", "start", "-p", "80", "--max-pool-size", "3","--environment", "production"] + ports: + - containerPort: 80 + env: + - name: RAILS_ENV + value: production + - name: WRESTLINGDEV_DB_NAME + value: wrestlingtourney + - name: WRESTLINGDEV_DB_USR + value: root + - name: WRESTLINGDEV_DB_PWD + value: password + - name: WRESTLINGDEV_DB_PORT + value: "3306" + - name: MEMCACHIER_SERVERS + value: wrestlingdev-memcached:11211 + - name: WRESTLINGDEV_DB_HOST + value: wrestlingdev-mariadb + - name: WRESTLINGDEV_DEVISE_SECRET_KEY + value: 2f29d49db6704377ba263f7cb9db085b386bcb301c0cd501126a674686ab1a109754071165b08cd72af03cec4642a4dd04361c994462254dd5d85e9594e8b9aa + - name: WRESTLINGDEV_SECRET_KEY_BASE + value: 077cdbef5c2ccf22543fb17a67339f234306b7fa2e1e4463d851c444c10a5611829a2290b253da78339427f131571fac9a42c83d960b2d25ecc10a4a0a7ce1a2 + resources: + limits: + cpu: "0.5" + memory: "512Mi" + requests: + memory: "512Mi" + cpu: "0.5" + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 20 + periodSeconds: 10 +--- +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: wrestlingdev-app-deployment-autoscale +spec: + scaleTargetRef: + apiVersion: extensions/v1beta1 + kind: Deployment + name: wrestlingdev-app-deployment + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: 50 + # - type: Resource + # resource: + # name: memory + # targetAverageValue: 100Mi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wrestlingdev-worker-deployment + labels: + app: wrestlingdev +spec: + replicas: 1 + selector: + matchLabels: + app: wrestlingdev + template: + metadata: + labels: + app: wrestlingdev + tier: worker + spec: + containers: + - name: wrestlingdev-worker + image: jcwimer/wrestlingdev:prod + imagePullPolicy: Always + env: + - name: RAILS_ENV + value: production + - name: WRESTLINGDEV_DB_NAME + value: wrestlingtourney + - name: WRESTLINGDEV_DB_USR + value: root + - name: WRESTLINGDEV_DB_PWD + value: password + - name: WRESTLINGDEV_DB_PORT + value: "3306" + - name: MEMCACHIER_SERVERS + value: wrestlingdev-memcached:11211 + - name: WRESTLINGDEV_DB_HOST + value: wrestlingdev-mariadb + - name: WRESTLINGDEV_DEVISE_SECRET_KEY + value: 2f29d49db6704377ba263f7cb9db085b386bcb301c0cd501126a674686ab1a109754071165b08cd72af03cec4642a4dd04361c994462254dd5d85e9594e8b9aa + - name: WRESTLINGDEV_SECRET_KEY_BASE + value: 077cdbef5c2ccf22543fb17a67339f234306b7fa2e1e4463d851c444c10a5611829a2290b253da78339427f131571fac9a42c83d960b2d25ecc10a4a0a7ce1a2 + command: ["bundle"] + args: ["exec", "bin/delayed_job", "-n", "1", "run"] + resources: + limits: + cpu: "0.5" + memory: "512Mi" + requests: + memory: "512Mi" + cpu: "0.2" +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: wrestlingdev-db-create-migrate +spec: + template: + spec: + containers: + - name: wrestlingdev-db-create-migrate + image: jcwimer/wrestlingdev:prod + imagePullPolicy: Always + command: ["/bin/sh","-c"] + args: ["bundle exec rake db:create; bundle exec rake db:migrate"] + env: + - name: RAILS_ENV + value: production + - name: WRESTLINGDEV_DB_NAME + value: wrestlingtourney + - name: WRESTLINGDEV_DB_USR + value: root + - name: WRESTLINGDEV_DB_PWD + value: password + - name: WRESTLINGDEV_DB_PORT + value: "3306" + - name: MEMCACHIER_SERVERS + value: wrestlingdev-memcached:11211 + - name: WRESTLINGDEV_DB_HOST + value: wrestlingdev-mariadb + - name: WRESTLINGDEV_DEVISE_SECRET_KEY + value: 2f29d49db6704377ba263f7cb9db085b386bcb301c0cd501126a674686ab1a109754071165b08cd72af03cec4642a4dd04361c994462254dd5d85e9594e8b9aa + - name: WRESTLINGDEV_SECRET_KEY_BASE + value: 077cdbef5c2ccf22543fb17a67339f234306b7fa2e1e4463d851c444c10a5611829a2290b253da78339427f131571fac9a42c83d960b2d25ecc10a4a0a7ce1a2 + restartPolicy: OnFailure + backoffLimit: 10 diff --git a/deploy/kubernetes/wrestlingdev-prod.yaml b/deploy/kubernetes/wrestlingdev-prod.yaml deleted file mode 100644 index 65049e3..0000000 --- a/deploy/kubernetes/wrestlingdev-prod.yaml +++ /dev/null @@ -1,113 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: wrestlingdev-app - labels: - app: wrestlingdev -spec: - ports: - - port: 80 - selector: - app: wrestlingdev - tier: frontend - clusterIP: None ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: wrestlingdev-app-deployment - labels: - app: wrestlingdev -spec: - replicas: 3 - selector: - matchLabels: - app: wrestlingdev - template: - metadata: - labels: - app: wrestlingdev - tier: frontend - spec: - containers: - - name: wrestlingdev-app - image: jcwimer/wrestlingdev:prod - imagePullPolicy: Always - ports: - - containerPort: 80 - env: - - name: RAILS_ENV - value: production - - name: WRESTLINGDEV_DB_NAME - value: wrestlingtourneyprod - - name: WRESTLINGDEV_DB_USR - value: root - - name: WRESTLINGDEV_DB_PWD - value: password - - name: WRESTLINGDEV_DB_PORT - value: "3306" - - name: MEMCACHIER_SERVERS - value: wrestlingdev-memcached:11211 - - name: WRESTLINGDEV_DB_HOST - value: wrestlingdev-mysql - - name: WRESTLINGDEV_DEVISE_SECRET_KEY - value: 2f29d49db6704377ba263f7cb9db085b386bcb301c0cd501126a674686ab1a109754071165b08cd72af03cec4642a4dd04361c994462254dd5d85e9594e8b9aa - - name: WRESTLINGDEV_SECRET_KEY_BASE - value: 077cdbef5c2ccf22543fb17a67339f234306b7fa2e1e4463d851c444c10a5611829a2290b253da78339427f131571fac9a42c83d960b2d25ecc10a4a0a7ce1a2 - resources: - limits: - cpu: "0.5" - memory: "512Mi" - requests: - memory: "512Mi" - cpu: "0.2" ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: wrestlingdev-worker-deployment - labels: - app: wrestlingdev -spec: - replicas: 1 - selector: - matchLabels: - app: wrestlingdev - template: - metadata: - labels: - app: wrestlingdev - tier: worker - spec: - containers: - - name: wrestlingdev-worker - image: jcwimer/wrestlingdev:prod - imagePullPolicy: Always - env: - - name: RAILS_ENV - value: production - - name: WRESTLINGDEV_DB_NAME - value: wrestlingtourneyprod - - name: WRESTLINGDEV_DB_USR - value: root - - name: WRESTLINGDEV_DB_PWD - value: password - - name: WRESTLINGDEV_DB_PORT - value: "3306" - - name: MEMCACHIER_SERVERS - value: wrestlingdev-memcached:11211 - - name: WRESTDEV_DB_HOST - value: wrestlingdev-mysql - - name: WRESTLINGDEV_DEVISE_SECRET_KEY - value: 2f29d49db6704377ba263f7cb9db085b386bcb301c0cd501126a674686ab1a109754071165b08cd72af03cec4642a4dd04361c994462254dd5d85e9594e8b9aa - - name: WRESTLINGDEV_SECRET_KEY_BASE - value: 077cdbef5c2ccf22543fb17a67339f234306b7fa2e1e4463d851c444c10a5611829a2290b253da78339427f131571fac9a42c83d960b2d25ecc10a4a0a7ce1a2 - command: ["bundle"] - args: ["exec", "bin/delayed_job", "-n", "1", "run"] - resources: - limits: - cpu: "0.5" - memory: "512Mi" - requests: - memory: "512Mi" - cpu: "0.2" \ No newline at end of file diff --git a/deploy/rails-prod-Dockerfile b/deploy/rails-prod-Dockerfile index af1995f..29960c0 100644 --- a/deploy/rails-prod-Dockerfile +++ b/deploy/rails-prod-Dockerfile @@ -51,6 +51,7 @@ EXPOSE 443 # Tini solves the zombie PID problem ENTRYPOINT ["/tini", "--"] -CMD bundle exec puma -w 3 -t 5:5 -b 'tcp://0.0.0.0:80' -e production +CMD bundle exec passenger start --max-pool-size 3 --environment production -p 80 +#CMD bundle exec puma -w 3 -t 5:5 -b 'tcp://0.0.0.0:80' -e production #CMD bundle exec puma -w 3 -t 5:5 -b 'ssl://0.0.0.0:443?key=/ssl/server.key&verify_mode=none&cert=/ssl/server.crt' -e production #CMD bundle exec passenger start --max-pool-size 3 --environment production --ssl --ssl-certificate /ssl/server.crt --ssl-certificate-key /ssl/server.key