【问题标题】:How to persist files and/or folders into google compute engine persistent disk for use in GKE?如何将文件和/或文件夹持久化到谷歌计算引擎永久磁盘中以在 GKE 中使用?
【发布时间】:2021-05-30 16:50:33
【问题描述】:

我有一个 GKE 集群和一个由 terraform 创建的谷歌计算引擎永久磁盘。该磁盘用于创建 kubernetes 持久卷,然后将其声明并安装到 pod 中的容器。

我想要做的是将一些文件和文件夹保留在该永久磁盘中,以便在挂载它时,我的容器能够访问这些文件和文件夹。我已经尝试过研究,似乎这样做的方法是将磁盘安装到计算引擎甚至容器上,然后从本地复制并粘贴到那里。

有没有更好的方法?最好使用 terraform。

这就是这些资源的定义方式。

resource "google_compute_disk" "app" {
  name = "app-${var.project_id}"
  type = "pd-standard"
  zone = var.zone
  size = var.volume_size_gb
  labels = {
    environment = var.environment
  }
}

resource "kubernetes_persistent_volume" "app" {
  metadata {
    name = "app-${var.project_id}"
  }
  spec {
    access_modes = ["ReadWriteOnce"]
    capacity = {
      storage = "${var.volume_size_gb}Gi"
    }
    persistent_volume_source {
      gce_persistent_disk {
        pd_name = google_compute_disk.app.name
        fs_type = "ext4"
      }
    }
    storage_class_name = "standard"
  }
}

resource "kubernetes_persistent_volume_claim" "app" {
  metadata {
    name = "app-${var.project_id}"
  }
  spec {
    access_modes = ["ReadWriteOnce"]
    resources {
      requests = {
        storage = "${var.volume_size_gb}Gi"
      }
    }
    volume_name = kubernetes_persistent_volume.app.metadata.0.name
    storage_class_name = "standard"
  }
}

resource "kubernetes_deployment" "core_app" {
  metadata {
    name = "core-app"
    labels = {
      app = "core"
    }
  }

  spec {
    replicas = 1

    selector {
      match_labels = {
        app = "core"
      }
    }

    template {
      metadata {
        labels = {
          app = "core"
        }
      }
      spec {
        volume {
          name = "app-volume"
          persistent_volume_claim {
            claim_name = kubernetes_persistent_volume_claim.app.metadata.0.name
          }
        }

        container {
          name = "core-app"
          image = "core-image:latest"

          port {
            container_port = 8080
          }

          volume_mount {
            mount_path = "/mnt/extra-addons"
            name = "app-volume"
            sub_path = "addons"
          }

          readiness_probe {
            tcp_socket {
              port = "8069"
            }
            initial_delay_seconds = 5
            period_seconds = 10
          }

          image_pull_policy = "Always"
        }
      }
    }
  }
}

【问题讨论】:

    标签: google-cloud-platform terraform google-kubernetes-engine


    【解决方案1】:

    方法是正确的。如果要初始化磁盘:

    • 您可以从空白磁盘开始,然后通过将其挂载到 Compute Engine 将数据写入其中
    • 您可以从快照或图像中创建磁盘,其中数据已经和以前存储过

    关于 Terraform,我有一个意见,现在为您提供真正的答案。 Terraform 是一个 IaC 工具:基础设施即代码。这意味着:致力于基础设施。

    在您的情况下,您想要执行“软件部署”。你部署的 K8S 资源,还有磁盘准备和挂载等。国际海事组织,Terraform 不是这个的正确工具。您还有其他更适合软件/操作系统管理的工具,例如 Ansible。

    注意:我确信使用 Terraform 0.13 或 0.14,您可以创建可以执行并实现您想要的脚本,但我认为这不是正确的方法。

    【讨论】:

      猜你喜欢
      • 2014-10-17
      • 1970-01-01
      • 2014-03-11
      • 2019-01-26
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      相关资源
      最近更新 更多