如何将文件和/或文件夹持久化到谷歌计算引擎永久磁盘中以在 GKE 中使用?

Posted

技术标签:

【中文标题】如何将文件和/或文件夹持久化到谷歌计算引擎永久磁盘中以在 GKE 中使用?【英文标题】:How to persist files and/or folders into google compute engine persistent disk for use in 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_gbGi"
    
    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_gbGi"
      
    
    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"
        
      
    
  

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于如何将文件和/或文件夹持久化到谷歌计算引擎永久磁盘中以在 GKE 中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 keras 模型保存到谷歌驱动器或计算机中?

如何使用谷歌应用引擎将 php 项目部署到谷歌云中?

如何将获得的经验和成就添加到谷歌游戏配置文件?

如何将 csv 文件从 colab 实际保存到谷歌驱动器?

如何从应用引擎将写入附加到谷歌云存储文件?

如何将文件从 colab 或云存储复制到谷歌驱动器?