簡體   English   中英

如何將文件和/或文件夾持久化到谷歌計算引擎永久磁盤中以在 GKE 中使用?

[英]How to persist files and/or folders into google compute engine persistent disk for use in GKE?

我有一個 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"
        }
      }
    }
  }
}

方法是正確的。 如果要初始化磁盤:

  • 您可以從空白磁盤開始,然后通過將其掛載到 Compute Engine 將數據寫入其中
  • 您可以從快照創建磁盤,或者從已經和以前存儲數據的映像創建磁盤

現在關於 Terraform,我有一個意見,現在給你真正的答案。 Terraform 是一個 IaC 工具:基礎設施即代碼。 這意味着:致力於基礎設施。

在您的情況下,您想要執行“軟件部署”。 你部署的 K8S 資源,還有磁盤准備和掛載等。 IMO,Terraform 不是適合此問題的工具。 您還有其他工具,例如 Ansible,它們更適合軟件/操作系統管理。

注意:我確信使用 Terraform 0.13 或 0.14 可以創建可以執行並實現所需的腳本,但我認為這不是正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM