支持使用 MgmtDriver 的 Kubernetes 集群的 Docker 私有仓库

https://blueprints.launchpad.net/tacker/+spec/cir-k8s-cluster

问题描述

Tacker Wallaby 版本支持规范“支持使用 MgmtDriver 部署 Kubernetes 集群” [1]。部署的 Kubernetes 集群仅支持在 Docker 公共仓库中注册的镜像,不支持 Docker 私有仓库中的镜像。本规范添加了功能,以支持在 Kubernetes 集群环境中使用的 Docker 私有仓库镜像。本规范假定规范“支持使用 MgmtDriver 部署 Kubernetes 集群” [1]

提议的变更

支持以下操作

  1. 在部署 Kubernetes 集群 VNF 之前,部署 Docker 私有仓库 VNF。

  2. 部署 Kubernetes 集群 VNF,该 VNF 可以支持上述创建的 Docker 私有仓库以及在 Tacker 之外创建的任何其他仓库。

Docker 私有仓库 VNF 的 LCM 操作需要以下更改

  • 使用 MgmtDriver 执行实例化操作以安装 Docker 私有仓库。

  • 使用 MgmtDriver 执行修复操作以重新安装 Docker 私有仓库。

注意

  • 不支持伸缩操作。

  • 终止操作在本规范中超出范围。Docker 私有仓库 VNF 的终止过程中没有特定流程,因此已通过现有实现支持。

Kubernetes 集群 VNF 的 LCM 操作需要以下更改

  • 使用 MgmtDriver 执行 Kubernetes 集群的实例化操作 [1]

    更改:MgmtDriver 在新创建的所有 Master/Worker VM 上配置与 Docker 私有仓库的连接。

  • 使用 MgmtDriver 执行 Kubernetes 集群 Worker 节点的伸缩操作 [2]

    更改:MgmtDriver 在新创建的 Worker VM 上配置与 Docker 私有仓库的连接。

  • 使用 MgmtDriver 执行整个 Kubernetes 集群的修复操作 [3]

    更改:MgmtDriver 在所有创建的 Master/Worker VM 上配置与 Docker 私有仓库的连接。

  • 使用 MgmtDriver 执行 Kubernetes 集群中单个节点(Master/Worker)的修复操作 [3]

    更改:MgmtDriver 在创建的 Master/Worker VM 上配置与 Docker 私有仓库的连接。

为 Kubernetes 集群部署 Docker 私有仓库 VNF

将 Docker 私有仓库作为 VNF 部署到 Kubernetes 集群。下图显示了创建 VM 并设置 Docker 私有仓库

                                    +--------------+ +---------+
                                    | Docker Image | |  VNFD   |
                                    | (Optional)   | |         |
                                    +------------+-+ +-+-------+
                                                 |     |
                                                 v     v    +---------------+
                                              +----------+  | Instantiation |
                                              |          |  | Request with  |
                                              |   CSAR   |  | Additional    |
                                              |          |  | Params        |
                                              +----+-----+  +-+-------------+
                                                   |          | 1. Instantiate VNF
                                                   |          |
                                             +-----+----------+-------------+
                                             |     v          v        VNFM |
                                             |  +-------------------+       |
                                             |  |   Tacker-server   |       |
                                             |  +-------+-----------+       |
                                             |          |                   |
                                             |          v                   |
+--------------------------+ 4. Run Private  |  +------------------------+  |
|                          |    registry     |  |                        |  |
|  +--------------------+  |    container    |  |    +--------------+    |  |
|  | Docker container   |<-+-----------------+--+----+              |    |  |
|  | (Private registry) |  |                 |  |    |  MgmtDriver  |    |  |
|  +--------------------+  | 3. Docker       |  |    |              |    |  |
|  +--------------------+  |    Installation |  |    |              |    |  |
|  |       Docker       |<-+-----------------+--+----+              |    |  |
|  +--------------------+  |                 |  |    +--------------+    |  |
|                          |                 |  |    +--------------+    |  |
|                          | 2. Create VM    |  |    | OpenStack    |    |  |
|                          |<----------------+--+----+ Infra Driver |    |  |
|                          |                 |  |    +--------------+    |  |
|            VM            |                 |  |                        |  |
+--------------------------+                 |  |    Tacker-conductor    |  |
+--------------------------+                 |  +------------------------+  |
|    Hardware Resources    |                 |                              |
+--------------------------+                 +------------------------------+

Docker 私有仓库 VNF 的 VNFD

VNFD 需要一个 VDU 和一个或多个 CP,以及 instantiate_endheal_end 的接口定义,如下所示示例

node_templates:
 VNF:
   ...
   interfaces:
     Vnflcm:
       ...
       instantiate_end:
         implementation: mgmt-drivers-private-registry
       heal_end:
         implementation: mgmt-drivers-private-registry
   artifacts:
     mgmt-drivers-private-registry:
       description: Management driver for Docker private registry
       type: tosca.artifacts.Implementation.Python
       file: Scripts/private_registry_mgmt.py

 PrivateRegistryVDU:
   type: tosca.nodes.nfv.Vdu.Compute
   ...

 CP1:
   type: tosca.nodes.nfv.VduCp
   ...
   requirements:
     - virtual_binding: PrivateRegistryVDU
   ...

实例化 Docker 私有仓库 VNF 操作的请求参数

用户提供 ETSI NFV-SOL003 v2.6.1 中定义的 InstantiateVnfRequest 数据类型 [4] 作为请求参数。它基本上与规范“基于 ETSI NFV-SOL 规范的 VNF REST API” [5] 中描述的参数相同。用户可以使用以下 additionalParams

属性名称

基数

参数描述

private_registry_installation_param

1

私有仓库安装配置。

>ssh_cp_name

1

MgmtDriver 在 SSH/SFTP 访问私有仓库 VM 时使用的 CP 名称。

>ssh_username

1

MgmtDriver 在 SSH/SFTP 访问私有仓库 VM 时使用的用户名。

>ssh_password

1

MgmtDriver 在 SSH/SFTP 访问私有仓库 VM 时使用的用户密码。

>image_path

0..1

可选。私有仓库容器在 Docker 上运行的 VNF 包中 Docker 镜像文件的路径。如果省略此属性,则从 Docker 公共仓库拉取私有仓库容器的镜像。如果私有仓库 VM 无法连接到 Docker 公共仓库,请使用“docker save”命令创建的文件放入 VNF 包中,并在该属性中指定文件的路径。

>port_no

0..1

可选。默认值为 5000。提供私有仓库服务的 TCP 端口号。

以下是 Instantiate VNF 请求 POST /vnflcm/v1/vnf_instances/{vnfInstanceId}/instantiate 中提供的 body 的示例

{
  "flavourId": "simple",
  "extVirtualLinks": [
    {
      "id": "net0",
      "resourceId": "f0c82461-36b5-4d86-8322-b0bc19cda65f",
      "extCps": [
        {
          "cpdId": "CP1",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET"
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "additionalParams": {
    "private_registry_installation_param": {
      "ssh_cp_name": "CP1",
      "ssh_username": "ubuntu",
      "ssh_password": "ubuntu",
      "image_path": "Files/images/private_registry.tar"
    }
  },
  "vimConnectionInfo": [
    {
      "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
      "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
      "vimType": "openstack"
    }
  ]
}

实例化 Docker 私有仓库 VNF 操作的序列

../../_images/0130.png

该过程包括以下步骤,如图所示

  1. 客户端发送 POST Instantiate VNF 请求。

  2. 它基本上与规范“基于 ETSI NFV-SOL 规范的 VNF REST API” [5] 的“2) VNF 实例实例化流程”章节中描述的序列相同,除了 MgmtDriver 之外。

  3. 以下流程在 instantiate_end 中执行。

    1. MgmtDriver 从 Heat 获取私有仓库 VM 的 IP 地址。

    2. MgmtDriver 在私有仓库 VM 上安装 Docker。

    3. 如果请求参数“image_path”指定,MgmtDriver 将 Docker 镜像文件传输到私有仓库 VM。

    4. MgmtDriver 使用 Docker 镜像在 Docker 上运行私有仓库容器。

      MgmtDriver 使用如下命令启动私有仓库容器

      sudo docker run -d -p 5000:5000 -v /home/ubuntu/registry:/var/lib/registry --restart=always --name private_registry registry:latest
      

      注意

      私有仓库容器的 Docker 镜像名称为 registry。如果指定了请求参数“image_path”,则使用“docker load”命令从传输的镜像文件加载 registry 镜像。如果省略了请求参数“image_path”,则使用“docker pull”命令从 Docker 公共仓库拉取 registry 镜像。

      注意

      上述示例命令假定私有仓库 VM 的操作系统为 Ubuntu 20.04。

使用 MgmtDriver 的 Docker 私有仓库 VNF 的修复操作

下图显示了 Docker 私有仓库 VNF 的 Heal VNF 操作

                                                  +--------------+
                                                  | Heal Request |
                                                  +-+------------+
                                                    | 1. Heal VNF
                                                    |
                                              +-----+------------------------+
                                              |     v                   VNFM |
                                              |  +-------------------+       |
                                              |  |   Tacker-server   |       |
                                              |  +-------+-----------+       |
                                              |          |                   |
+--------------------------+                  |          v                   |
|                          | 5. Run Private   |  +------------------------+  |
|                          |    registry      |  |                        |  |
|  +--------------------+  |    container     |  |    +--------------+    |  |
|  | Docker container   |<-+------------------+--+----+              |    |  |
|  | (Private registry) |  |                  |  |    |  MgmtDriver  |    |  |
|  +--------------------+  | 4. Docker        |  |    |              |    |  |
|  +--------------------+  |    Installation  |  |    |              |    |  |
|  |       Docker       |<-+------------------+--+----+              |    |  |
|  +--------------------+  |                  |  |    +--------------+    |  |
|                          | 3. Create new VM |  |    +--------------+    |  |
|            VM            |<-----------------+--+----+ OpenStack    |    |  |
+--------------------------+                  |  |    | Infra Driver |    |  |
                             2. Delete     +--+--+----+              |    |  |
+--------------------------+    failed VM  |  |  |    +--------------+    |  |
|            VM            |<--------------+  |  |                        |  |
+--------------------------+                  |  |    Tacker-conductor    |  |
+--------------------------+                  |  +------------------------+  |
|    Hardware Resources    |                  |                              |
+--------------------------+                  +------------------------------+

修复操作的 VNFD

与“Docker 私有仓库 VNF 的 VNFD”章节相同。

修复 Docker 私有仓库 VNF 操作的请求参数

与规范“基于 ETSI NFV-SOL 规范的 VNF REST API” [5] 中描述的参数相同。

修复 Docker 私有仓库 VNF 操作的序列

../../_images/0220.png

该过程包括以下步骤,如图所示

  1. 客户端发送 POST Heal VNF 请求。

  2. 它基本上与规范“基于 ETSI NFV-SOL 规范的 VNF REST API” [5] 的“3) VNF 实例修复流程”章节中描述的序列相同,除了 MgmtDriver 之外。

  3. 以下流程在 heal_end 中执行。

    1. MgmtDriver 从 Heat 获取新的私有仓库 VM 的 IP 地址。

    2. MgmtDriver 从 VnfInstance(Tacker DB)获取 Instantiate VNF 请求的 additionalParams

    3. MgmtDriver 在新的私有仓库 VM 上安装 Docker。

    4. 如果 Instantiate VNF 请求参数“image_path”指定,MgmtDriver 将 Docker 镜像文件传输到新的私有仓库 VM。

    5. MgmtDriver 使用 Docker 镜像在 Docker 上运行私有仓库容器。

可以连接到 Docker 私有仓库的 Kubernetes 集群 VNF 的部署

基于规范“支持使用 MgmtDriver 部署 Kubernetes 集群” [1],添加连接到 Docker 私有仓库的功能。

下图显示了创建 Kubernetes 集群并配置与 Docker 私有仓库的连接

                                       +---------+ +---------+
                                       | Cluster | |         |
                                       | Install | |  VNFD   |
                                       | Script  | |         |
                   +----------------+  +-------+-+ +-+-------+
                   | CA certificate +--+       |     |
                   +----------------+  |       v     v
                    +---------------+  |    +----------+  +---------------+
                    | LCM operation |  +--->|          |  | Instantiation |
                    | UserData      +------>|   CSAR   |  | Request with  |
                    +---------------+       |          |  | Additional    |
                       +------------+  +--->|          |  | Params        |
                       | Heat       |  |    +----+-----+  +-+-------------+
                       | Template   +--+         |          | 1. Instantiate VNF
                       | (Base HOT) |            |          |
                       +------------+      +-----+----------+-------------+
                                           |     v          v        VNFM |
                                           |  +------------------+        |
                                           |  |   Tacker-server  |        |
                                           |  +-------+----------+        |
        3. Kubernetes Cluster              |          |                   |
           Installation                    |          v                   |
        4. Configure connections           |  +------------------------+  |
           to Docker private registries    |  |    +--------------+    |  |
        +-------------+--------------------+--+----+  MgmtDriver  |    |  |
        |             |                    |  |    +--------------+    |  |
+-------+-------------+--------+           |  |                        |  |
|       |             |        |           |  |                        |  |
|  +----+-----+  +----+-----+  |           |  |                        |  |
|  |    v     |  |    v     |  |           |  |    +--------------+    |  |
|  | +------+ |  | +------+ |  |           |  |    | OpenStack    |    |  |
|  | |Worker| |  | |Master| |<-+-----------+--+----+ Infra Driver |    |  |
|  | +------+ |  | +------+ |  | 2. Create |  |    +--------------+    |  |
|  |    VM    |  |    VM    |  |    VMs    |  |                        |  |
|  +----------+  +----------+  |           |  |                        |  |
+------------------------------+           |  |    Tacker-conductor    |  |
+------------------------------+           |  +------------------------+  |
|      Hardware Resources      |           |                              |
+------------------------------+           +------------------------------+

Kubernetes 集群 VNF 的 VNFD

与用户指南“如何使用 Mgmt Driver 部署 Kubernetes 集群” [6] 没有变化。

带有 Docker 私有仓库的请求参数

将以下属性添加到用户指南“如何使用 Mgmt Driver 部署 Kubernetes 集群” [6] 中描述的 additionalParams 中。

属性名称

基数

参数描述

k8s_cluster_installation_param

1

Kubernetes 集群安装配置。

>private_registry_connection_info

0..N

可选。配置连接到 Docker 私有仓库。

>>connection_type

1

连接类型。设置以下值之一。
0:HTTP,1:HTTPS
如果通过 HTTP 连接到部署的 Docker 私有仓库 VNF 或 Tacker 之外的 Docker 私有仓库,则设置为 0。
如果通过 HTTPS 连接到 Tacker 之外的 Docker 私有仓库,则设置为 1。

>>server

1

要连接的 Docker 私有仓库的服务器名称。例如,“192.168.0.10:5000”

>>username

0..1

可选。登录到 Docker 私有仓库的用户名。

>>password

0..1

可选。登录到 Docker 私有仓库的密码。

>>certificate_path

0..1

可选。用于 HTTPS 连接的 CA 证书文件的路径。

>>hosts_string

0..1

可选。要添加到 /etc/hosts 的字符串。基本的 Kubernetes 集群环境没有 DNS 服务器,必须添加到 /etc/hosts。该值由“<IP 地址> <FQDN>”组成。例如,“192.168.0.20 registry.example.com”

以下是 Instantiate VNF 请求 POST /vnflcm/v1/vnf_instances/{vnfInstanceId}/instantiate 中提供的 body 的示例

{
  "flavourId": "simple",
  "additionalParams": {
    "k8s_cluster_installation_param": {
      "script_path": "Scripts/install_k8s_cluster.sh",
      "vim_name": "kubernetes_vim",
      "master_node": {
        "aspect_id": "master_instance",
        "ssh_cp_name": "masterNode_CP1",
        "nic_cp_name": "masterNode_CP1",
        "username": "ubuntu",
        "password": "ubuntu",
        "pod_cidr": "192.168.3.0/24",
        "cluster_cidr": "10.199.187.0/24",
        "cluster_cp_name": "masterNode_CP1"
      },
      "worker_node": {
        "aspect_id": "worker_instance",
        "ssh_cp_name": "workerNode_CP2",
        "nic_cp_name": "workerNode_CP2",
        "username": "ubuntu",
        "password": "ubuntu"
      },
      "proxy": {
        "http_proxy": "http://user1:password1@host1:port1",
        "https_proxy": "https://user2:password2@host2:port2",
        "no_proxy": "192.168.246.0/24,10.0.0.1,registry.example.com",
        "k8s_node_cidr": "192.168.0.0/24"
      },
      "private_registry_connection_info": [
        {
          "connection_type": "0",
          "server": "192.168.0.10:5000"
        },
        {
          "connection_type": "1",
          "server": "registry.example.com",
          "username": "user01",
          "password": "user01",
          "certificate_path": "Files/registries/ca.crt",
          "hosts_string": "192.168.0.20 registry.example.com"
        }
      ]
    },
    "lcm-operation-user-data": "./UserData/k8s_cluster_user_data.py",
    "lcm-operation-user-data-class": "KubernetesClusterUserData"
  },
  "extVirtualLinks": [
    {
      "id": "net0_master",
      "resourceId": "f0c82461-36b5-4d86-8322-b0bc19cda65f",
      "extCps": [
        {
          "cpdId": "masterNode_CP1",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": "net0_worker",
      "resourceId": "f0c82461-36b5-4d86-8322-b0bc19cda65f",
      "extCps": [
        {
          "cpdId": "workerNode_CP2",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET"
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "vimConnectionInfo": [
    {
      "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
      "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
      "vimType": "openstack"
    }
  ]
}

使用 Docker 私有仓库实例化 Kubernetes 集群 VNF 的序列

../../_images/0310.png

该过程由上述序列中说明的以下步骤组成。

  1. 客户端发送 POST Instantiate VNF 请求。

  2. 它基本上与规范“支持使用 MgmtDriver 部署 Kubernetes 集群” [1] 中描述的序列相同,除了以下其他流程。

  3. 以下流程添加到 instantiate_end 中。

    1. MgmtDriver 从 Heat 获取私有仓库 VM 的 IP 地址。

    2. MgmtDriver 在所有 Master/Worker VM 上配置与 Docker 私有仓库的连接。

使用 MgmtDriver 伸缩 Kubernetes 集群 Worker 节点的规模操作

基于规范“支持使用 Mgmtdriver 伸缩 Kubernetes Worker 节点” [2],添加连接到 Docker 私有仓库的功能。

下图显示了伸缩 VNF 操作

                                                           +---------------+
                                                           | Scale Request |
                                                           +--+------------+
                                                              | 1. Scale VNF
                                                              |    (Scale-out)
                                             +----------------+------------+
                                             |                v       VNFM |
                                             |  +------------------+       |
                                             |  |   Tacker-server  |       |
                                             |  +-------+----------+       |
             3. Kubernetes Cluster           |          |                  |
                Installation                 |          v                  |
             4. Configure connections        |  +-----------------------+  |
                to Docker private registries |  |    +-------------+    |  |
                      +----------------------+--+----+ MgmtDriver  |    |  |
                      |                      |  |    +-------------+    |  |
+---------------------+--------+             |  |                       |  |
|                     |        |             |  |                       |  |
|  +----------+  +----+-----+  |             |  |                       |  |
|  |          |  |    v     |  | 2. Add      |  |    +-------------+    |  |
|  | +------+ |  | +------+ |  |    new VM   |  |    | OpenStack   |    |  |
|  | |Master| |  | |Worker| |<-+-------------+--+----+ InfraDriver |    |  |
|  | +------+ |  | +------+ |  |             |  |    +-------------+    |  |
|  |    VM    |  |    VM    |  |             |  |                       |  |
|  +----------+  +----------+  |             |  |                       |  |
|                +----------+  |             |  |                       |  |
|                | +------+ |  |             |  |                       |  |
|                | |Worker| |  |             |  |                       |  |
|                | +------+ |  |             |  |                       |  |
|                |    VM    |  |             |  |                       |  |
|                +----------+  |             |  |                       |  |
+------------------------------+             |  |    Tacker-conductor   |  |
+------------------------------+             |  +-----------------------+  |
|      Hardware Resources      |             |                             |
+------------------------------+             +-----------------------------+

伸缩操作的 VNFD

与规范“支持使用 Mgmtdriver 伸缩 Kubernetes Worker 节点” [2] 没有变化。

伸缩操作的请求参数

与规范“支持使用 Mgmtdriver 伸缩 Kubernetes Worker 节点” [2] 没有变化。

伸缩操作的序列

../../_images/046.png

该过程由上述序列中说明的以下步骤组成。

  1. 客户端发送 POST Scale VNF 请求。

  2. 它基本上与规范“支持使用 Mgmtdriver 伸缩 Kubernetes Worker 节点” [2] 中描述的序列相同,除了以下其他流程。

  3. 以下流程添加到 scale_end 中。

    1. MgmtDriver 从 VnfInstance(Tacker DB)获取 Instantiate VNF 请求的 private_registry_connection_info

    2. MgmtDriver 将 CA 证书文件传输到新的 Worker VM(如果 Instantiate VNF 请求参数指定)。

    3. MgmtDriver 在新的 Worker VM 上配置与 Docker 私有仓库的连接。

使用 MgmtDriver 的整个 Kubernetes 集群的修复操作

基于规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3],添加连接到 Docker 私有仓库的功能。

下图显示了 Heal VNF(整个 Kubernetes 集群)操作

                                                           +--------------+
                                                           | Heal Request |
                                                           +-+------------+
                                                             | 1. Heal VNF
                                                             |
                                            +----------------+------------+
                                            |                v       VNFM |
                                            |  +-------------------+      |
                                            |  |   Tacker-server   |      |
                                            |  +---------+---------+      |
           5. Kubernetes Cluster            |            |                |
              Installation                  |            v                |
           6. Configure connections         |  +-----------------------+  |
              to Docker private registries  |  |    +-------------+    |  |
        +-------------+---------------------+--+----+ MgmtDriver  |    |  |
        |             |                     |  |    +-------------+    |  |
        |             |                     |  |  2. Delete old        |  |
        |             |                     |  |  Kubernetes cluster   |  |
        |             |                     |  |  information          |  |
        |             |                     |  |  7. Register new      |  |
+-------+-------------+--------+            |  |  Kubernetes cluster   |  |
|       |             |        |            |  |  information          |  |
|  +----+-----+  +----+-----+  |            |  |                       |  |
|  |    v     |  |    v     |  | 4. Create  |  |    +-------------+    |  |
|  | +------+ |  | +------+ |  | new VMs    |  |    | OpenStack   |    |  |
|  | |Master| |  | |Worker| |  |<-----------+--+----+ InfraDriver |    |  |
|  | +------+ |  | +------+ |  |            |  |    +---+---------+    |  |
|  |    VM    |  |    VM    |  |            |  |        |              |  |
|  +----------+  +----------+  |            |  |        |              |  |
|   Kubernetes cluster(new)    |            |  |        |              |  |
+------------------------------+            |  |        |              |  |
+------------------------------+            |  |        |              |  |
|  +----------+  +----------+  | 3. Delete  |  |        |              |  |
|  | +------+ |  | +------+ |  | failed VMs |  |        |              |  |
|  | |Master| |  | |Worker| |  |<-----------+--+--------+              |  |
|  | +------+ |  | +------+ |  |            |  |                       |  |
|  |    VM    |  |    VM    |  |            |  |                       |  |
|  +----------+  +----------+  |            |  |                       |  |
|   Kubernetes cluster(old)    |            |  |                       |  |
+------------------------------+            |  |   Tacker-conductor    |  |
+------------------------------+            |  +-----------------------+  |
|      Hardware Resources      |            |                             |
+------------------------------+            +-----------------------------+

修复操作的 VNFD

与规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3] 没有变化。

修复操作的请求参数

与规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3] 没有变化。

修复(整个 Kubernetes 集群)操作的序列

../../_images/055.png

该过程由上述序列中说明的以下步骤组成。

  1. 客户端发送 POST Heal VNF 请求。

  2. 它基本上与规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3] 中描述的序列相同,除了以下其他流程。

  3. 以下流程添加到 heal_end 中。

    1. MgmtDriver 从 VnfInstance(Tacker DB)获取 Instantiate VNF 请求的 private_registry_connection_info

    2. MgmtDriver 将 CA 证书文件传输到所有新的 Master/Worker VM(如果 Instantiate VNF 请求参数指定)。

    3. MgmtDriver 在所有新的 Master/Worker VM 上配置与 Docker 私有仓库的连接。

使用 MgmtDriver 的 Kubernetes 集群中单个节点(Master/Worker)的修复操作

基于规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3],添加连接到 Docker 私有仓库的功能。

下图显示了 Heal VNF(单个节点)操作

                                                     +--------------+
                                                     | Heal Request |
                                                     +-+------------+
                                                       | 1. Heal VNF
                                                       |
                                      +----------------+------------+
                                      |                v       VNFM |
                                      |  +-------------------+      |
                                      |  |   Tacker-server   |      |
                                      |  +---------+---------+      |
      5. Kubernetes Cluster           |            |                |
         Installation                 |            v                |
      6. Configure connections        |  +-----------------------+  |
         to Docker private registries |  |    +-------------+    |  |
             +------------------------+--+----+ MgmtDriver  |    |  |
             |                        |  |    +------------++    |  |
             |                        |  |  2. Evacuating  |     |  |
             |                        |  |  Pods(Worker)   |     |  |
+------------+------------+           |  |  and removing   |     |  |
|            |            |           |  |  failed node    |     |  |
|            |            |           |  |  from cluster   |     |  |
|            |            |           |  | (Master/Worker) |     |  |
|  +---------+---------+  |           |  |                 |     |  |
|  |         v         |  | 4. Create |  | +-------------+ |     |  |
|  | +---------------+ |  | new VM    |  | | OpenStack   | |     |  |
|  | | Master/Worker | |<-+-----------+--+-+ InfraDriver | |     |  |
|  | +---------------+ |  |           |  | +------+------+ |     |  |
|  |         VM        |  |           |  |        |        |     |  |
|  +-------------------+  |           |  |        |        |     |  |
|  +-------------------+  | 3. Delete |  |        |        |     |  |
|  | +---------------+ |  | failed VM |  |        |        |     |  |
|  | | Master/Worker | |<-+-----------+--+--------+        |     |  |
|  | +---------------+ |  |           |  |                 |     |  |
|  |         VM        |<-+-----------+--+-----------------+     |  |
|  +-------------------+  |           |  |                       |  |
+-------------------------+           |  |   Tacker-conductor    |  |
+-------------------------+           |  +-----------------------+  |
|   Hardware Resources    |           |                             |
+-------------------------+           +-----------------------------+

修复操作的 VNFD

与规范“支持使用 Mgmtdriver 修复 Kubernetes Master/Worker 节点” [3] 没有变化。

修复操作的请求参数

与规范“使用Mgmtdriver支持修复Kubernetes Master/Worker节点”相比没有变化 [3]

修复操作(单个节点)的流程

../../_images/062.png

该过程由上述序列中说明的以下步骤组成。

  1. 客户端发送 POST Heal VNF 请求。

  2. 它基本上与规范“使用Mgmtdriver支持修复Kubernetes Master/Worker节点”中描述的流程相同 [3],除了以下附加流程。

  3. 以下流程添加到 heal_end 中。

    1. MgmtDriver 从 VnfInstance(Tacker DB)获取 Instantiate VNF 请求的 private_registry_connection_info

    2. 如果实例化VNF请求参数指定,MgmtDriver会将CA证书文件传输到新的Master/Worker VM。

    3. MgmtDriver配置对新Master/Worker VM上Docker私有注册表的连接。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Masaki Ueno <masaki.ueno.up@hco.ntt.co.jp>

其他贡献者

伊藤良人 <yoshito.itou.dr@hco.ntt.co.jp>

Yoshiyuki Katada <katada.yoshiyuk@fujitsu.com>

Ayumu Ueha <ueha.ayumu@fujitsu.com>

陆梁 <lu.liang@fujitsu.com>

工作项

  • 提供由MgmtDriver执行的以下示例脚本

    • 对于Docker私有注册表VNF

      instantiate_endheal_end中安装Docker私有注册表。

    • 对于Kubernetes集群VNF

      根据Wallaby发布的Kubernetes集群脚本,添加连接到Docker私有注册表的流程。

  • 添加新的单元和功能测试。

依赖项

Kubernetes集群的LCM操作取决于以下规范

  • Kubernetes集群的实例化操作

    依赖于规范“使用MgmtDriver支持部署Kubernetes集群” [1]

  • Kubernetes集群的伸缩操作

    依赖于规范“使用Mgmtdriver支持伸缩Kubernetes Worker节点” [2]

  • Kubernetes集群的修复操作

    依赖于规范“使用Mgmtdriver支持修复Kubernetes Master/Worker节点” [3]

测试

将添加单元和功能测试,以涵盖规范所需的用例。

文档影响

完整的用户指南将添加,以解释如何部署Docker私有注册表VNF以及如何从Kubernetes集群连接到Docker私有注册表。

参考资料