ETSI NFV-SOL CNF 更新,带管理驱动¶
本文档描述了在 Tacker v1 API 中使用管理驱动更新 CNF 的方法。
注意
这是 Tacker v1 API 的文档。有关 Tacker v2 API,请参阅 ETSI NFV-SOL CNF 更新,带管理驱动。
注意
本文档的内容已确认使用以下 VNF 包。
概述¶
下图显示了 CNF 更新的概述。
请求更新 VNF
用户通过请求
update VNF作为修改 VNF 信息操作,请求 tacker-server 更新 CNF。调用 Kubernetes API
收到 tacker-client 的请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会根据 VNF 包中的 VNFD 内容再次重定向到匹配的管理驱动程序(在本例中为容器更新的管理驱动程序)。然后,管理驱动程序调用 Kubernetes API。
更新资源
Kubernetes Master 根据 API 调用更新资源。
管理驱动程序介绍¶
管理驱动程序使用户能够在 VNF 生命周期管理操作之前和/或之后配置其 VNF。用户可以通过实现自己的管理驱动程序来自定义管理驱动程序的逻辑,这些自定义由 NFV-SOL001 v2.6.1 中的“接口”定义指定。
本用户指南中的管理驱动程序支持使用 modify_information_start 和 modify_information_end 操作更新 CNF。
用例¶
在本用户指南中,提供的示例 VNF 包将被实例化然后更新。示例管理驱动程序将在更新期间更新 Kubernetes 上的资源。更新 ConfigMap 和 Secret,并更新 Pod、Deployment、DaemonSet 和 ReplicaSet 中的镜像,其他资源将不会更改。
先决条件¶
应安装以下软件包
tacker
python-tackerclient
安装上述软件包后,还需要导入示例管理驱动程序文件。您可以参考 ETSI NFV-SOL CNF 更新,带管理驱动 中的 Set Tacker Configuration 以了解管理驱动程序文件的用法。
注意
您可以在以下路径中找到示例管理驱动程序文件。 samples/mgmt_driver/kubernetes/container_update/container_update_mgmt.py
您还可以参考 ETSI NFV-SOL CNF(容器化 VNF)部署,了解从“准备 Kubernetes VIM”到“实例化 VNF”的步骤。
如何实例化用于更新的 VNF¶
您可以使用以下示例 VNF 包来实例化要更新的 VNF。 在本文档中,TACKER_ROOT 是服务器上 tacker 仓库的根目录。
$ cd TACKER_ROOT/samples/tests/etc/samples/etsi/nfv/test_cnf_container_update_before
从示例目录复制官方定义文件。 NFV-SOL001 v2.6.1 规定了基于 TOSCA 规范的 VNFD 的结构和格式。
$ cp TACKER_ROOT/samples/vnf_packages/Definitions/etsi_nfv_sol001_common_types.yaml Definitions/
$ cp TACKER_ROOT/samples/vnf_packages/Definitions/etsi_nfv_sol001_vnfd_types.yaml Definitions/
CSAR 包应压缩为 ZIP 文件进行上传。以下命令是压缩 VNF 包的示例
注意
示例管理驱动程序文件还需要复制到 CSAR 包中。
$ mkdir Scripts
$ cp TACKER_ROOT/samples/mgmt_driver/kubernetes/container_update/container_update_mgmt.py Scripts/
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/ Scripts/
使用 openstack vnf package create 创建 VNF 包后,当 Onboarding State 为 CREATED,Operational State 为 DISABLED,Usage State 为 NOT_IN_USE 时,表示创建成功。
$ openstack vnf package create
+-------------------+-------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------------+-------------------------------------------------------------------------------------------------+
| ID | d2e2689f-0850-47b6-bfed-0d8f1612601a |
| Links | { |
| | "self": { |
| | "href": "/vnfpkgm/v1/vnf_packages/d2e2689f-0850-47b6-bfed-0d8f1612601a" |
| | }, |
| | "packageContent": { |
| | "href": "/vnfpkgm/v1/vnf_packages/d2e2689f-0850-47b6-bfed-0d8f1612601a/package_content" |
| | } |
| | } |
| Onboarding State | CREATED |
| Operational State | DISABLED |
| Usage State | NOT_IN_USE |
| User Defined Data | {} |
+-------------------+-------------------------------------------------------------------------------------------------+
运行以下命令将 CSAR zip 文件上传到 VNF 包:openstack vnf package upload --path <vnf 包路径> <vnf 包 ID>。
以下是上传 VNF 包的示例
$ openstack vnf package upload --path deployment.zip d2e2689f-0850-47b6-bfed-0d8f1612601a
Upload request for VNF package d2e2689f-0850-47b6-bfed-0d8f1612601a has been accepted.
通过运行 openstack vnflcm create <VNFD ID> 创建 VNF 实例。
注意
可以通过 openstack vnf package show <vnf 包 ID> 命令找到 VNFD ID。
以下是创建 VNF 的示例
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a7774
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
| ID | beaf9797-ccf5-41f7-a546-0ff675475e5a |
| Instantiation State | NOT_INSTANTIATED |
| Links | { |
| | "self": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/beaf9797-ccf5-41f7-a546-0ff675475e5a" |
| | }, |
| | "instantiate": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/beaf9797-ccf5-41f7-a546-0ff675475e5a/instantiate" |
| | } |
| | } |
| VNF Configurable Properties | |
| VNF Instance Description | |
| VNF Instance Name | vnf-beaf9797-ccf5-41f7-a546-0ff675475e5a |
| VNF Package ID | d2e2689f-0850-47b6-bfed-0d8f1612601a |
| VNF Product Name | Sample VNF |
| VNF Provider | Company |
| VNF Software Version | 1.0 |
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a7774 |
| VNFD Version | 1.0 |
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
以下示例显示了部署 Kubernetes 资源的 yaml 文件。 您可以看到资源定义文件作为 additionalParams 中的 lcm-kubernetes-def-files 的值包含在内。
$ cat ./instance_kubernetes.json
{
"flavourId": "simple",
"additionalParams": {
"lcm-kubernetes-def-files": [
"Files/kubernetes/configmap_1.yaml",
"Files/kubernetes/deployment.yaml",
"Files/kubernetes/pod_env.yaml",
"Files/kubernetes/pod_volume.yaml",
"Files/kubernetes/replicaset.yaml",
"Files/kubernetes/secret_1.yaml",
"Files/kubernetes/configmap_3.yaml",
"Files/kubernetes/pod_env_2.yaml",
"Files/kubernetes/pod_volume_2.yaml",
"Files/kubernetes/daemonset.yaml",
"Files/kubernetes/deployment_2.yaml",
"Files/kubernetes/secret_3.yaml"
],
"namespace": "default"
},
"vimConnectionInfo": [
{
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
"vimId": "fcb8fc03-5c57-4221-92d5-ebbdf86baf68",
"vimType": "kubernetes"
}
]
}
执行上述命令后,通过运行以下命令实例化 VNF:openstack vnflcm instantiate <VNF 实例 ID> <json 文件>。
$ openstack vnflcm instantiate beaf9797-ccf5-41f7-a546-0ff675475e5a instance_kubernetes.json
Instantiate request for VNF Instance beaf9797-ccf5-41f7-a546-0ff675475e5a has been accepted.
CNF 更新过程¶
如 先决条件 中所述,在执行更新之前必须实例化 VNF。
接下来,用户可以使用原始 vnf 包作为模板来创建新的 vnf 包,其中可以更改 ConfigMap、Secret、Pod、Deployment、DaemonSet 和 ReplicaSet 的 yaml 文件。
注意
可以更改 ConfigMap 和 Secret 的 yaml 文件。 种类、命名空间和名称不能更改,但文件名和文件路径可以更改。
也可以更改 Pod、Deployment、DaemonSet 和 ReplicaSet 的 yaml 文件,但只能更改镜像字段,不能更改其他字段。
不允许更改其他 yaml 文件。
如果在 Pod、Deployment、DaemonSet 和 ReplicaSet 的 yaml 文件中进行了图像以外的更改,则这些更改将不会生效。 但是,如果此时修复整个 VNF,则资源将在实例化期间基于新的 yaml,并且所有更改将生效。
然后,在创建并上传新的 vnf 包后,可以执行更新操作。 更新后,管理驱动程序将重新启动 pod 以更新并重新创建 deployment、DaemonSet 和 ReplicaSet 以进行更新。
注意
本文档提供了新的 vnf 包,samples/tests/etc/samples/etsi/nfv/test_cnf_container_update_after
CLI 命令的详细信息在 使用 v1 Tacker 进行 VNF 生命周期管理 中描述。
如何更新 CNF¶
执行更新 CLI 命令,并在更新前后检查资源的的状态。
这是为了确认在更新 CNF 后 Kubernetes 中部署的资源是否已更新。 以下是整个过程的示例。 更新前的资源信息
ConfigMap
$ kubectl get configmaps NAME DATA AGE cm-data 1 10m cm-data3 1 10m kube-root-ca.crt 1 26d $ $ kubectl describe configmaps cm-data Name: cm-data Namespace: default Labels: <none> Annotations: <none> Data ==== cmKey1.txt: ---- configmap data foo bar BinaryData ==== Events: <none> $ $ kubectl describe configmaps cm-data3 Name: cm-data3 Namespace: default Labels: <none> Annotations: <none> Data ==== cmKey1.txt: ---- configmap data foo bar BinaryData ==== Events: <none>
Secret
$ kubectl get secrets NAME TYPE DATA AGE default-token-k8svim kubernetes.io/service-account-token 3 18h secret-data Opaque 2 12m secret-data3 Opaque 2 12m $ $ kubectl describe secrets secret-data Name: secret-data Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 15 bytes secKey1.txt: 15 bytes $ $ kubectl describe secrets secret-data3 Name: secret-data3 Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 15 bytes secKey1.txt: 15 bytes
Pod
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES daemonset-vdu5-r6vvl 1/1 Running 0 13m 10.0.0.89 vagrant <none> <none> deployment2-vdu6-86579d6868-dh57h 1/1 Running 0 13m 10.0.0.112 vagrant <none> <none> env-test 1/1 Running 0 13m 10.0.0.118 vagrant <none> <none> env-test2 1/1 Running 0 13m 10.0.0.104 vagrant <none> <none> vdu1-update-6fcf66b5dd-khdbw 1/1 Running 0 13m 10.0.0.90 vagrant <none> <none> vdu2-update-cqlpw 1/1 Running 0 13m 10.0.0.102 vagrant <none> <none> volume-test 1/1 Running 0 13m 10.0.0.107 vagrant <none> <none> volume-test2 1/1 Running 0 13m 10.0.0.109 vagrant <none> <none> $ $ kubectl describe pod volume-test Name: volume-test Namespace: default ... Containers: nginx: Container ID: cri-o://dd4972166ad302d20ff105df964546603bbba60c21a08ce45a13b4e5e37c8400 Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data Optional: false ... $ $ kubectl describe pod volume-test2 Name: volume-test2 Namespace: default ... Containers: nginx: Container ID: cri-o://1227dda5ddca12b95d9c47883eb9eae5f7d0cedfe0db4d5f5247d5002c2c7636 Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data3 Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data3 Optional: false ...
部署
$ kubectl get deployments.apps -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR deployment2-vdu6 1/1 1 1 15m nginx nginx app=webserver vdu1-update 1/1 1 1 15m nginx nginx app=webserver $ $ kubectl describe pod vdu1-update-6fcf66b5dd-khdbw Name: vdu1-update-6fcf66b5dd-khdbw Namespace: default ... Containers: nginx: Container ID: cri-o://dbe3738cf68cfd223b484dcca6e9355bed59f4e074366a2fb08da9d41772efa0 Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Environment Variables from: cm-data ConfigMap with prefix 'CM_' Optional: false secret-data Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false ... $ $ kubectl describe pod deployment2-vdu6-86579d6868-dh57h Name: deployment2-vdu6-86579d6868-dh57h Namespace: default ... Containers: nginx: Container ID: cri-o://2a18bd975ba189e93a6dbafd353b1fe5d17612cf685a51dc4669eaa5b104170d Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Environment Variables from: cm-data3 ConfigMap with prefix 'CM_' Optional: false secret-data3 Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data3'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data3'> Optional: false ...
DaemonSet
$ kubectl get daemonset.apps -o wide NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR daemonset-vdu5 1 1 1 1 1 <none> 16m nginx nginx app=nginx $ $ kubectl describe pod daemonset-vdu5-r6vvl Name: daemonset-vdu5-r6vvl Namespace: default ... Containers: nginx: Container ID: cri-o://a6f53b97124212db820f951bae869fa38d5ad97f3f02eab2fe196d1e4d8af2e2 Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Environment Variables from: cm-data ConfigMap with prefix 'CM_' Optional: false secret-data Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false ...
ReplicaSet
$ kubectl get replicaset.apps -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR deployment2-vdu6-86579d6868 1 1 1 17m nginx nginx app=webserver,pod-template-hash=86579d6868 vdu1-update-6fcf66b5dd 1 1 1 17m nginx nginx app=webserver,pod-template-hash=6fcf66b5dd vdu2-update 1 1 1 17m nginx nginx app=webserver $ $ kubectl describe pod vdu2-update-cqlpw Name: vdu2-update-cqlpw Namespace: default ... Containers: nginx: Container ID: cri-o://59a9920844d78f75e5facad7284b95f43684059fe5da3708518be5d75643deef Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data Optional: false ...
可以通过以下 CLI 命令执行更新 CNF。
$ openstack vnflcm update VNF_INSTANCE_ID --I sample_param_file.json
本文档中 sample_param_file.json 的内容如下
{
"vnfdId": "b1bb0ce7-ebca-4fa7-95ed-4840d70a8883",
"vnfInstanceName": "update_vnf_after",
"metadata": {
"configmap_secret_paths": [
"Files/kubernetes/configmap_2.yaml",
"Files/kubernetes/secret_2.yaml"
]
}
}
注意
如果要更新 ConfigMap 和 Secret,不仅需要更新它们的 yaml,还需要在请求输入参数的 metadata 字段中指定更新的 yaml 文件路径。
metadata 中指定的
configmap_secret_paths不存储在 VnfInstance DB 中。
以下是更新 CNF 的示例
$ openstack vnflcm update beaf9797-ccf5-41f7-a546-0ff675475e5a --I sample_param_file.json
Update vnf:beaf9797-ccf5-41f7-a546-0ff675475e5a
更新后的资源信息
ConfigMap
$ kubectl describe configmaps cm-data Name: cm-data Namespace: default Labels: <none> Annotations: <none> Data ==== cmKey1.txt: ---- configmap2 data2 foo2 bar2 BinaryData ==== Events: <none> $ $ kubectl describe configmaps cm-data3 Name: cm-data3 Namespace: default Labels: <none> Annotations: <none> Data ==== cmKey1.txt: ---- configmap data foo bar BinaryData ==== Events: <none>
Secret
$ kubectl describe secrets secret-data Name: secret-data Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 16 bytes secKey1.txt: 18 bytes $ $ kubectl describe secrets secret-data3 Name: secret-data3 Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 15 bytes secKey1.txt: 15 bytes
Pod
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES daemonset-vdu5-6nrgg 1/1 Running 0 7m3s 10.0.0.92 vagrant <none> <none> deployment2-vdu6-86579d6868-dh57h 1/1 Running 0 27m 10.0.0.112 vagrant <none> <none> env-test 1/1 Running 1 (7m6s ago) 27m 10.0.0.118 vagrant <none> <none> env-test2 1/1 Running 0 27m 10.0.0.104 vagrant <none> <none> vdu1-update-5d87858fc6-hxqlt 1/1 Running 0 7m6s 10.0.0.103 vagrant <none> <none> vdu2-update-z4t48 1/1 Running 0 7m6s 10.0.0.122 vagrant <none> <none> volume-test 1/1 Running 1 (7m6s ago) 27m 10.0.0.107 vagrant <none> <none> volume-test2 1/1 Running 0 27m 10.0.0.109 vagrant <none> <none> $ $ kubectl describe pod volume-test Name: volume-test Namespace: default ... Containers: nginx: Container ID: cri-o://832b9df0c03b01a16710ea7b19be5dbff5dcf81fbccb080824795e0c3dd4e5ae Image: cirros Image ID: docker.io/library/cirros@sha256:6b2d9f5341bce2b1fb29669ff46744a145079ccc6a674849de3a4946ec3d8ffb ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data Optional: false ... $ $ kubectl describe pod volume-test2 Name: volume-test2 Namespace: default ... Containers: nginx: Container ID: cri-o://1227dda5ddca12b95d9c47883eb9eae5f7d0cedfe0db4d5f5247d5002c2c7636 Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data3 Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data3 Optional: false ...
部署
$ kubectl get deployments.apps -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR deployment2-vdu6 1/1 1 1 33m nginx nginx app=webserver vdu1-update 1/1 1 1 33m nginx cirros app=webserver $ $ kubectl describe pod vdu1-update-5d87858fc6-hxqlt Name: vdu1-update-5d87858fc6-hxqlt Namespace: default ... Containers: nginx: Container ID: cri-o://4a7b4a264f76b775c2740ed0a6debf77a02c097f15b2ae10fa999718d42afd8d Image: cirros Image ID: docker.io/library/cirros@sha256:6b2d9f5341bce2b1fb29669ff46744a145079ccc6a674849de3a4946ec3d8ffb ... Environment Variables from: cm-data ConfigMap with prefix 'CM_' Optional: false secret-data Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false ... $ $ kubectl describe pod deployment2-vdu6-86579d6868-dh57h Name: deployment2-vdu6-86579d6868-dh57h Namespace: default ... Containers: nginx: Container ID: cri-o://2a18bd975ba189e93a6dbafd353b1fe5d17612cf685a51dc4669eaa5b104170d Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Environment Variables from: cm-data3 ConfigMap with prefix 'CM_' Optional: false secret-data3 Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data3'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data3'> Optional: false ...
DaemonSet
$ kubectl get daemonset.apps -o wide NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR daemonset-vdu5 1 1 1 1 1 <none> 35m nginx cirros app=nginx $ $ kubectl describe pod daemonset-vdu5-6nrgg Name: daemonset-vdu5-6nrgg Namespace: default ... Containers: nginx: Container ID: cri-o://7f18db12324ed751f28201bb0957aff513c93ed6b49d80d896dbac919bff5f30 Image: cirros Image ID: docker.io/library/cirros@sha256:6b2d9f5341bce2b1fb29669ff46744a145079ccc6a674849de3a4946ec3d8ffb ... Environment Variables from: cm-data ConfigMap with prefix 'CM_' Optional: false secret-data Secret with prefix 'SEC_' Optional: false Environment: CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false ...
ReplicaSet
$ kubectl get replicaset.apps -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR deployment2-vdu6-86579d6868 1 1 1 38m nginx nginx app=webserver,pod-template-hash=86579d6868 vdu1-update-5d87858fc6 1 1 1 18m nginx cirros app=webserver,pod-template-hash=5d87858fc6 vdu1-update-6fcf66b5dd 0 0 0 38m nginx nginx app=webserver,pod-template-hash=6fcf66b5dd vdu2-update 1 1 1 38m nginx nginx app=webserver $ $ kubectl describe pod vdu2-update-z4t48 Name: vdu2-update-z4t48 Namespace: default ... Containers: nginx: Container ID: cri-o://4909dcdf39e101535a603ff5263298f3e52c5993d3822f3a0750860d889f6ebc Image: nginx Image ID: docker.io/library/nginx@sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c ... Volumes: cm-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: cm-data Optional: false sec-volume: Type: Secret (a volume populated by a Secret) SecretName: secret-data Optional: false ...
可以看到,只有 ConfigMap/Secret 或镜像已更新的 Pod 会重新启动。 对于 ConfigMap/Secret 或镜像已更新的 Deployments、DaemonSets 和 ReplicaSets,它们的 pod 将被删除并重新创建。