教程 4:创建已挂载块存储卷的服务

简介

本教程为您创建使用块存储卷的简单服务提供了分步说明。您还可以拍摄存储卷的快照并探索使用快照的方法。

创建服务

  1. 按照 教程 1 下载示例服务的代码,创建 Docker 镜像,然后将其上传到您的 Snowflake 账户中的存储库。

  2. 验证存储库中有 my_echo_service_image 镜像。

    SHOW IMAGES IN IMAGE REPOSITORY tutorial_db.data_schema.tutorial_repository;
    
    Copy
  3. 创建服务。服务运行时,容器会挂载一个 10|~|Gi 块卷存储。

    CREATE SERVICE my_service
     IN COMPUTE POOL tutorial_compute_pool
     FROM SPECIFICATION $$
    spec:
      containers:
      - name: echo
        image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:latest
        volumeMounts:
        - name: block-vol1
          mountPath: /opt/block/path
        readinessProbe:
          port: 8080
          path: /healthcheck
      endpoints:
      - name: echoendpoint
        port: 8080
        public: true
      volumes:
      - name: block-vol1
        source: block
        size: 10Gi
    $$;
    
    Copy

    备注

    本教程仅说明如何使用块存储卷创建服务。服务代码 (检查教程 1 代码) 不使用此卷。

  4. 验证服务状态:

    SELECT SYSTEM$GET_SERVICE_STATUS('my_service');
    
    Copy

拍摄快照

  1. 使用 CREATE SNAPSHOT 命令拍摄连接到服务实例 0 的块存储卷的快照。指定实例 0 是因为您只运行一项服务实例。

    在 VOLUME 参数中的名称前后使用双引号以匹配服务规范中名称的大小写。

    CREATE SNAPSHOT my_snapshot
      FROM SERVICE my_service
      VOLUME "block-vol1"
      INSTANCE 0
      COMMENT='new snapshot';
    
    Copy
  2. 审查快照

  3. 运行 ALTER SNAPSHOT 命令以修改快照。

    ALTER SNAPSHOT my_snapshot SET comment='updated comment';
    
    Copy

使用快照

  1. 您可以通过两种方式使用快照:

    • 使用快照创建新服务: 创建新服务时,您可以使用快照作为块存储卷的初始内容,如下所示。以下 CREATE SERVICE 命令创建另一项具有 50 Gi 块存储卷的服务 (new_service)。内联规范包括用于初始化块存储卷的快照名称。

      CREATE SERVICE new_service
        IN COMPUTE POOL tutorial_compute_pool
        FROM SPECIFICATION $$
      spec:
        containers:
        - name: echo
          image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:tutorial
          volumeMounts:
          - name: fromsnapshotvol
            mountPath: /opt/block/path
          readinessProbe:
            port: 8080
            path: /healthcheck
        endpoints:
        - name: echoendpoint
          port: 8080
          public: true
        volumes:
        - name: fromsnapshotvol
          source: block
          size: 50Gi
          blockConfig:
            initialContents:
              fromSnapshot: MY_SNAPSHOT
      $$
      min_instances=3
      max_instances=3;
      
      Copy
    • 在现有服务的存储卷上恢复快照: 此示例将原始块卷内容替换为快照中的内容,从而重新启动您创建的第一项服务 (my_service)。

      1. 暂停该服务,以便您可以在块存储卷上恢复快照。

        ALTER SERVICE my_service SUSPEND;
        
        Copy
      2. 恢复挂载在 new_service 实例容器上的块存储卷上的快照。您只运行一个 Echo 服务实例,因此您指定实例 ID 0。

        ALTER SERVICE my_service RESTORE     -- this will auto RESUME the service.
          VOLUME "block-vol1"
          INSTANCES 0
          FROM SNAPSHOT my_snapshot;
        
        Copy
      3. 验证服务状态。

        call SYSTEM$GET_SERVICE_STATUS('my_service');
        
        Copy
  2. 使用 DROP SNAPSHOT 命令删除快照。

    DROP SNAPSHOT my_snapshot;
    
    Copy

清理

移除您创建的资源。

  1. 删除您创建的两项服务:

DROP SERVICE my_service;
DROP SERVICE new_service;
Copy
  1. 按照 教程 1 中的步骤清理教程 1 中创建的其他资源。

下一步是什么?

现在您已经完成了本教程,您可以返回 高级教程 来探索其他主题。

语言: 中文