Можно ли добавлять файлы из битбакета на постоянный диск в GKE на Terraform? - PullRequest
0 голосов
/ 10 июля 2020

Я получил этот фрагмент кода, вызывающий рабочую нагрузку в GKE из terraform. Сейчас развертывается образ wordpress, затем я разверну изображение php -fpm с кодом и использую nginx -ingress для перенаправления его на порт php.

Можно ли добавить код из репозитория bitbucket на монтирование тома?

Всем спасибо!


resource "kubernetes_deployment" "wordpress" {
  for_each = var.wordpress_site

  metadata {
    name   = each.value.name
    labels = { app = each.value.name }
  }
  spec {
    replicas = 1
    selector {
      match_labels = { app = each.value.name }
    }
    template {
      metadata {
        labels = { app = each.value.name }
      }
      spec {
        volume {
          name = "wordpress-persistent-storage-${terraform.workspace}-${each.value.name}"
          persistent_volume_claim {
            claim_name = "wordpress-volumeclaim-${terraform.workspace}-${each.value.name}"
          }
        }
        container {
          name  = each.value.name
          image = "wordpress"
          #image = "eu.gcr.io/webdoctores-dev-v2/wordpress-td:latest"
          port {
            name           = each.value.name
            container_port = 80
            #container_port = 9000
            #name           = "fastcgi"
          }
          env {
            name  = "WORDPRESS_DB_HOST"
            value = "${var.cloudsqlproxy_service_name}:3306"
          }
          env {
            name = "WORDPRESS_DB_USER"
            value_from {
              secret_key_ref {
                name = "cloudsql-db-credentials-${terraform.workspace}-${each.value.name}"
                key  = "username"
              }
            }
          }
          env {
            name  = "WORDPRESS_DB_NAME"
            value = each.value.name
          }
          env {
            name = "WORDPRESS_DB_PASSWORD"
            value_from {
              secret_key_ref {
                name = "cloudsql-db-credentials-${terraform.workspace}-${each.value.name}"
                key  = "password"
              }
            }
          }
          volume_mount {
            name       = "wordpress-persistent-storage-${terraform.workspace}-${each.value.name}"
            mount_path = "/var/www/html"
          }
        }
      }
    }
  }
}

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете достичь этого, используя контейнер инициализации на основе alpine/git изображения (поместите его на тот же уровень отступа, что и ваш основной контейнер ), который смонтирует ваш том перед запуском основного контейнера и предварительно заполнит его данными, например, путем клонирования репозитория bitbucket.

Это может выглядеть примерно так:

      ...

      spec {
        volume {
          name = "wordpress-persistent-storage-${terraform.workspace}-${each.value.name}"
          persistent_volume_claim {
            claim_name = "wordpress-volumeclaim-${terraform.workspace}-${each.value.name}"
          }
        }

        init_container {
          name              = "init-clone-bitbucket-repo"
          image             = "alpine/git"
          image_pull_policy = "IfNotPresent"
          command           = ["git", "clone", "<bitbucket_repo_URL>", "/data/my-bitbucket-repo" ]
          volume_mount {
            name       = "wordpress-persistent-storage-${terraform.workspace}-${each.value.name}"
            mount_path = "/data"
          }
        }

        container {
          name  = each.value.name
          image = "wordpress"

        ...

Это просто пример, который вам может потребоваться в дальнейшем приспособить к вашим потребностям.

...