# [START cloud_sql_proxy_k8s_sa]
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gcp-sql-proxy
  namespace: k8s-sql-proxy
spec:
  selector:
    matchLabels:
      app: gcp-sql-proxy
  template:
    metadata:
      labels:
        app: gcp-sql-proxy
    spec:
      serviceAccountName: sql-proxy-sa
      # [END cloud_sql_proxy_k8s_sa]
      # [START cloud_sql_proxy_k8s_secrets]
      containers:
      - name: gcp-sql-proxy
        image: docker.io/ratulb/gcp-sql-proxy
        env:
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gcp-sql-proxy-secret
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gcp-sql-proxy-secret
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gcp-sql-proxy-secret
              key: database
      # [END cloud_sql_proxy_k8s_secrets]
      # [START cloud_sql_proxy_k8s_container]
      - name: cloud-sql-proxy
        # It is recommended to use the latest version of the Cloud SQL proxy
        # Make sure to update on a regular schedule!
        image: gcr.io/cloudsql-docker/gce-proxy:1.17
        command:
          - "/cloud_sql_proxy"

          # If connecting from a VPC-native GKE cluster, you can use the
          # following flag to have the proxy connect over private IP
          - "-ip_address_types=PRIVATE"

          # Replace DB_PORT with the port the proxy should listen on
          # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
          - "-instances=static-lens-314215:asia-southeast1:mysql-db-instance=tcp:3306"
        securityContext:
          # The default Cloud SQL proxy image runs as the
          # "nonroot" user and group (uid: 65532) by default.
          runAsNonRoot: true
        # Resource configuration depends on an application's requirements. You
        # should adjust the following values based on what your application
        # needs. For details, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
        resources:
          requests:
            # The proxy's memory use scales linearly with the number of active
            # connections. Fewer open connections will use less memory. Adjust
            # this value based on your application's requirements.
            memory: "300Mi"
            # The proxy's CPU use scales linearly with the amount of IO between
            # the database and the application. Adjust this value based on your
            # application's requirements.
            cpu:    ".2"
      # [END cloud_sql_proxy_k8s_container]

