diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 17a8c50..67dfeba 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,25 +8,23 @@ variables: IMAGE_TAG: $CI_COMMIT_REF_SLUG REPO_NAME: "" - ## Build build-image: stage: build image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:20.10.16 - services: + services: - name: docker:20.10.16-dind variables: DOCKER_TLS_CERTDIR: "" before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - - echo $IMAGE_NAME:$IMAGE_TAG + - echo $IMAGE_NAME:$IMAGE_TAG - docker build -t $IMAGE_NAME:$IMAGE_TAG . - docker push $IMAGE_NAME:$IMAGE_TAG - docker rmi $IMAGE_NAME:$IMAGE_TAG # remove local image from shared runner - docker logout $CI_REGISTRY - ## deploy to k8s staging deploy_to_k8s_staging: stage: deploy @@ -35,7 +33,7 @@ deploy_to_k8s_staging: # create the .kube/ directory - mkdir -p ~/.kube/ # move the config file to default location - - echo $KUBE_CONFIG_INFO | base64 -d > ~/.kube/config + - echo $KUBE_CONFIG_INFO | base64 -d > ~/.kube/config - unset HTTPS_PROXY variables: DOCKER_IMAGE: $IMAGE_NAME:$IMAGE_TAG @@ -46,7 +44,6 @@ deploy_to_k8s_staging: - kubectl apply -k ./k8s/overlays/staging - kubectl rollout restart deployment django-deployment-staging -n tark-staging - ## deploy to k8s production deploy_to_k8s_production: stage: deploy @@ -55,7 +52,7 @@ deploy_to_k8s_production: # create the .kube/ directory - mkdir -p ~/.kube/ # move the config file to default location - - echo $KUBE_CONFIG_INFO | base64 -d > ~/.kube/config + - echo $KUBE_CONFIG_INFO | base64 -d > ~/.kube/config - unset HTTPS_PROXY variables: DOCKER_IMAGE: $IMAGE_NAME:$IMAGE_TAG @@ -67,7 +64,32 @@ deploy_to_k8s_production: - kubectl rollout restart deployment django-deployment-production -n tark-production only: - - main - - migrate_to_k8s + - main + - migrate_to_k8s + + when: manual + +## deploy to k8s fallback +deploy_to_k8s_fallback: + stage: deploy + needs: ["build-image"] + before_script: + # create the .kube/ directory + - mkdir -p ~/.kube/ + # move the config file to default location + - echo $FB_KUBE_CONFIG_INFO | base64 -d > ~/.kube/config + - unset HTTPS_PROXY + variables: + DOCKER_IMAGE: $IMAGE_NAME:$IMAGE_TAG + image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine/k8s:1.25.16 + script: + - export KUBECONFIG=~/.kube/config + - sed -i "s##${DOCKER_IMAGE}#g" ./k8s/base/app/django-deployment.yaml + - kubectl apply -k ./k8s/overlays/fallback + - kubectl rollout restart deployment django-deployment-fallback -n tark-fallback + + only: + - main + - deploy_fallback when: manual diff --git a/k8s/overlays/fallback/app/django-deployment-patch.yaml b/k8s/overlays/fallback/app/django-deployment-patch.yaml new file mode 100644 index 0000000..ad1d7ba --- /dev/null +++ b/k8s/overlays/fallback/app/django-deployment-patch.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: django-deployment +spec: + replicas: 2 + selector: + matchLabels: + app: django + template: + spec: + containers: + - name: django-container + envFrom: + - configMapRef: + name: app-config-fallback + - configMapRef: + name: db-config-fallback + - secretRef: + name: db-secret-fallback diff --git a/k8s/overlays/fallback/app/django-service-patch.yaml b/k8s/overlays/fallback/app/django-service-patch.yaml new file mode 100644 index 0000000..4996f6a --- /dev/null +++ b/k8s/overlays/fallback/app/django-service-patch.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Service +metadata: + name: django-cluster-ip-service \ No newline at end of file diff --git a/k8s/overlays/fallback/app/nodeport-service-patch.yaml b/k8s/overlays/fallback/app/nodeport-service-patch.yaml new file mode 100644 index 0000000..2bdb12b --- /dev/null +++ b/k8s/overlays/fallback/app/nodeport-service-patch.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: app-nodeport-service +spec: + type: NodePort + ports: + - port: 8000 + targetPort: 8000 + nodePort: 32451 + selector: + app: django \ No newline at end of file diff --git a/k8s/overlays/fallback/config/app-cm-patch.yaml b/k8s/overlays/fallback/config/app-cm-patch.yaml new file mode 100644 index 0000000..137d08e --- /dev/null +++ b/k8s/overlays/fallback/config/app-cm-patch.yaml @@ -0,0 +1,9 @@ +# App variables +apiVersion: v1 +kind: ConfigMap +metadata: + name: app-config +data: + DJANGO_ALLOWED_HOSTS: "hx-rke-wp-webadmin-31-worker-1.caas.ebi.ac.uk hx-rke-wp-webadmin-31-worker-2.caas.ebi.ac.uk hx-rke-wp-webadmin-31-worker-3.caas.ebi.ac.uk tark.ensembl.org" + WORKERS: "7" + DJANGO_ENVIRONMENT: production diff --git a/k8s/overlays/fallback/config/db-cm-patch.yaml b/k8s/overlays/fallback/config/db-cm-patch.yaml new file mode 100644 index 0000000..6884aaf --- /dev/null +++ b/k8s/overlays/fallback/config/db-cm-patch.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: db-config +data: + DATABASE_HOST: mysql-service-fallback + DATABASE_PORT: "4650" + DATABASE_NAME: ensembl_tark_e75_to_e115 diff --git a/k8s/overlays/fallback/ingress/ingress-patch.yaml b/k8s/overlays/fallback/ingress/ingress-patch.yaml new file mode 100644 index 0000000..01d4b54 --- /dev/null +++ b/k8s/overlays/fallback/ingress/ingress-patch.yaml @@ -0,0 +1,20 @@ +# This config file is used by the new K8s Cluster +# Kubectl Server Version: v1.21.4 +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tark-ingress +spec: + ingressClassName: nginx + rules: + - host: tark.ensembl.org + http: + paths: + # URL ROUTING + - path: /?(.*) + pathType: Prefix + backend: + service: + name: django-cluster-ip-service + port: + number: 8000 \ No newline at end of file diff --git a/k8s/overlays/fallback/kustomization.yaml b/k8s/overlays/fallback/kustomization.yaml new file mode 100644 index 0000000..eb2aa48 --- /dev/null +++ b/k8s/overlays/fallback/kustomization.yaml @@ -0,0 +1,20 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: tark-fallback +resources: + - ../../base/ + +nameSuffix: -fallback + +patches: + - path: app/django-service-patch.yaml + - path: app/django-deployment-patch.yaml + - path: app/nodeport-service-patch.yaml + + - path: config/app-cm-patch.yaml + - path: config/db-cm-patch.yaml + + - path: mysql/mysql-endpoint-patch.yaml + - path: mysql/mysql-service-patch.yaml + + - path: ingress/ingress-patch.yaml diff --git a/k8s/overlays/fallback/mysql/mysql-endpoint-patch.yaml b/k8s/overlays/fallback/mysql/mysql-endpoint-patch.yaml new file mode 100644 index 0000000..02e58cd --- /dev/null +++ b/k8s/overlays/fallback/mysql/mysql-endpoint-patch.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Endpoints +metadata: + name: mysql-service +subsets: + - addresses: + - ip: 10.7.147.24 + ports: + - name: mysql + port: 4650 diff --git a/k8s/overlays/fallback/mysql/mysql-service-patch.yaml b/k8s/overlays/fallback/mysql/mysql-service-patch.yaml new file mode 100644 index 0000000..c57917f --- /dev/null +++ b/k8s/overlays/fallback/mysql/mysql-service-patch.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql-service +spec: + ports: + - name: mysql + protocol: TCP + port: 4650 + targetPort: 4650 \ No newline at end of file diff --git a/k8s/overlays/staging/mysql/mysql-endpoint-patch.yaml b/k8s/overlays/staging/mysql/mysql-endpoint-patch.yaml index 3914e67..a33d0ea 100644 --- a/k8s/overlays/staging/mysql/mysql-endpoint-patch.yaml +++ b/k8s/overlays/staging/mysql/mysql-endpoint-patch.yaml @@ -3,8 +3,8 @@ kind: Endpoints metadata: name: mysql-service subsets: -- addresses: - - ip: 10.42.33.220 - ports: - - name: mysql - port: 4650 \ No newline at end of file + - addresses: + - ip: 10.42.33.220 + ports: + - name: mysql + port: 4650