You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
容器配置
VCI Pod 原地重启
复制全文
下载 pdf
VCI Pod 原地重启
弹性容器实例(VCI)基于 OpenKruise 的原地升级功能,支持 VCI Pod 原地重启能力。本文介绍如何使用 Openkruise 对 VCI Pod 进行原地升级。​
背景信息​
OpenKruise 是基于 Kubernetes 的一个扩展套件,主要聚焦于云原生应用的自动化,例如部署、发布、运维以及可用性防护。通过在 VKE 中部署 OpenKruise,可以实现对工作负载中的 Pod 进行原地升级。详细说明,请参见 OpenKruise 原地升级。​
使用说明​
  • 目前支持原地升级容器的镜像和部分metadata(如annotation、label)的功能。​
说明​
【邀测·申请试用】:其中,更新metadata并原地重启 VCI Pod 的能力处于邀测阶段,如需使用,请提交申请。​
  • 目前支持原地升级的 Workload 如下:​
前提条件​
  • 已通过 kubectl 连接集群。详细操作,请参见 连接集群。​
操作步骤​
场景一:更新容器的镜像​
  1. 在 VCI 业务集群中,安装 OpenKruise(VKE 应用模板名称为 Kruise)。详细操作,请参见 应用模板。​
  • ​alt​​
  1. 通过 kubectl 创建一个 OpenKruise 的 Workload,并指定部署到 VCI。示例 YAML 文件vci-openkruise.yaml代码如下:​
  • ​
    apiVersion: apps.kruise.io/v1alpha1​
    kind: CloneSet​
    metadata:​
    labels:​
    app: vci-cloneset​
    name: vci-cloneset​
    spec:​
    replicas: 5 # CloneSet 副本数。​
    selector:​
    matchLabels:​
    app: vci-cloneset​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/burst-to-vci: enforce # 强制部署到 VCI 上。​
    labels:​
    app: vci-cloneset​
    spec:​
    containers:​
    - name: nginx​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    ​
  1. 执行如下命令,创建 OpenKruise 的 Workload(本示例中为 CloneSet)。​
  • ​
    kubectl apply -f <CloneSet 的 YAML 配置文件路径>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl apply -f vci-openkruise.yaml​
    ​
  1. 成功创建 Workload 后,查看并记录 Pod 的名称和 VCI 实例 ID。​
  1. 执行以下命令获取 CloneSet 下 Pod 的名称。​
  • ​
    kubectl get pods -l <与 CloneSet 相关的标签键>=<标签值>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl get pods -l cloneset=vci-cloneset​
    ​
  • 从返回信息的NAME字段下获取 Pod 的名称。​
  1. 执行以下命令,查看 Pod 的详情,获取 VCI 实例 ID。​
  • ​
    kubectl describe pod <Pod 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl describe pod vci-cloneset-79886764b9-fm7tn​
    ​
  • 从返回信息的 Annotation:vci.vke.volcengine.com/instance-id 中获取 VCI 实例 ID。​
  1. 修改 Workload 的 YAML,验证 Pod 原地重启能力。将image字段更新为其他版本的容器镜像。示例 YAML 内容如下:​
  • ​
    apiVersion: apps.kruise.io/v1alpha1​
    kind: CloneSet​
    metadata:​
    labels:​
    app: vci-cloneset​
    name: vci-cloneset​
    spec:​
    replicas: 5​
    selector:​
    matchLabels:​
    app: vci-cloneset​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/burst-to-vci: enforce # 强制部署到 VCI 上。​
    labels:​
    app: vci-cloneset​
    spec:​
    containers:​
    - name: nginx​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v2.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。本示例将原先的镜像 tag:1.0 替换为 2.0。​
    ​
  1. 查看 Workload(本示例中为 CloneSet)更新状态,等待 Pod 重启完成。​
  • ​
    kubectl get cloneset -n <CloneSet 所在命名空间> <CloneSet 的名称>​
    ​
  • 预期输出结果如下,表示 Pod 重启完成:​
  • ​
    NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE​
    vci-cloneset 1 1 0 0 1 2d5h​
    ​
  1. 参考步骤 4 中的命令,再次查看并记录 Workload 中 Pod 的名称、VCI 实例 ID。​
  • Pod 将会重新拉取镜像,但 Pod 的名称和 VCI 实例 ID 不会发生变化。​
场景二:更新容器的 metadata​
说明​
【邀测·申请试用】:该部分功能目前处于邀测阶段,如需使用,请提交申请。​
  1. 在 VCI 业务集群中,安装 OpenKruise(VKE 应用模板名称为 Kruise)。详细操作,请参见 应用模板。​
说明​
如已安装,无需重复安装。​
  • ​alt​​
  1. 通过 kubectl 创建一个 OpenKruise 的 Workload,并指定部署到 VCI。示例 YAML 文件vci-openkruise-demo.yaml代码如下:​
  • ​
    apiVersion: apps.kruise.io/v1alpha1​
    kind: CloneSet​
    metadata:​
    labels:​
    app: env001​
    name: env001​
    namespace: long123​
    spec:​
    replicas: 1​
    selector:​
    matchLabels:​
    app: env001​
    template:​
    metadata:​
    annotations:​
    aaa: ooo​
    vci.volcengine.com/tls-enable: "false" # 不开启日志采集。​
    vke.volcengine.com/burst-to-vci: enforce # 强制部署到 VCI 上。​
    labels:​
    app: env001​
    ccc: hhh​
    eee: ggg​
    spec:​
    containers:​
    - env:​
    - name: vci-c1​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.annotations['aaa']​
    - name: vci-c2​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.labels['ccc']​
    image: vci-cn-beijing.cr.volces.com/vci_qa_20220506/debian-long:1.0.4 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    name: c1​
    resources: {}​
    terminationMessagePath: /dev/termination-log​
    terminationMessagePolicy: File​
    args:​
    - -c​
    - sleep 3000​
    command:​
    - /bin/bash​
    - env:​
    - name: vci-c1​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.annotations['aaa']​
    - name: vci-c2​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.labels['ccc']​
    image: vci-cn-beijing.cr.volces.com/vci_qa_20220506/debian-long:1.0.4 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    name: c2​
    resources: {}​
    terminationMessagePath: /dev/termination-log​
    terminationMessagePolicy: File​
    dnsPolicy: ClusterFirst​
    restartPolicy: Always​
    schedulerName: default-scheduler​
    securityContext: {}​
    terminationGracePeriodSeconds: 30​
    ​
  1. 执行如下命令,创建 OpenKruise 的 Workload(本示例中为 CloneSet)。​
  • ​
    kubectl apply -f <CloneSet 的 YAML 配置文件路径>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl apply -f vci-openkruise-demo.yaml​
    ​
  1. 成功创建 Workload 后,查看并记录 Pod 的名称和 VCI 实例 ID。​
  1. 执行以下命令获取 CloneSet 下 Pod 的名称。​
  • ​
    kubectl get pods -l <与 CloneSet 相关的标签键>=<标签值>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl get pods -l cloneset=venv001​
    ​
  • 从返回信息的NAME字段下获取 Pod 的名称。​
  1. 执行以下命令,查看 Pod 的详情,获取 VCI 实例 ID。​
  • ​
    kubectl describe pod <Pod 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl describe pod vci-cloneset-98346566b9-a3htn​
    ​
  • 从返回信息的 Annotation:vci.vke.volcengine.com/instance-id 中获取 VCI 实例 ID。​
  1. 修改 Workload 的 YAML,验证 Pod 原地重启能力。按如下示例更新容器metadata下的annotation和label。​
  • ​
    apiVersion: apps.kruise.io/v1alpha1​
    kind: CloneSet​
    metadata:​
    labels:​
    app: env001​
    name: env001​
    namespace: long123​
    spec:​
    replicas: 1​
    selector:​
    matchLabels:​
    app: env001​
    template:​
    metadata:​
    annotations:​
    aaa: abc # 修改 Label Value(例如将 ooo 改为 abc)。​
    vci.volcengine.com/tls-enable: "false"​
    vke.volcengine.com/burst-to-vci: enforce​
    labels:​
    app: env001 ​
    ccc: def # 修改 Label Value(例如将 hhh 改为 def)。​
    eee: ggg​
    spec:​
    containers:​
    - env:​
    - name: vci-c1 # 容器名称。​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.annotations['aaa']​
    - name: vci-c2 # 容器名称。​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.labels['ccc']​
    image: vci-cn-beijing.cr.volces.com/vci_qa_20220506/debian-long:1.0.4 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    name: c1​
    resources: {}​
    terminationMessagePath: /dev/termination-log​
    terminationMessagePolicy: File​
    args:​
    - -c​
    - sleep 3000​
    command:​
    - /bin/bash​
    - env:​
    - name: vci-c1​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.annotations['aaa']​
    - name: vci-c2​
    valueFrom:​
    fieldRef:​
    apiVersion: v1​
    fieldPath: metadata.labels['ccc']​
    image: vci-cn-beijing.cr.volces.com/vci_qa_20220506/debian-long:1.0.4 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    name: c2​
    resources: {}​
    terminationMessagePath: /dev/termination-log​
    terminationMessagePolicy: File​
    dnsPolicy: ClusterFirst​
    restartPolicy: Always​
    schedulerName: default-scheduler​
    securityContext: {}​
    terminationGracePeriodSeconds: 30​
    ​
  1. 查看 Workload(本示例中为 CloneSet)更新状态,等待 Pod 重启完成。​
  • ​
    kubectl get cloneset -n <CloneSet 所在命名空间> <CloneSet 的名称>​
    ​
  • 预期输出结果如下,表示 Pod 重启完成:​
  • ​
    NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE​
    env001 1 1 0 0 1 1d5h​
    ​
  1. 进入对应的容器,查看容器env信息是否已更新。​
  • ​
    kubectl exec <Pod 的名称> -n <Pod 所属命名空间> -c <容器的名称> --env​
    ​
  • 容器的 Label Value 已发生变更,但 Pod 的名称和 VCI 实例 ID 不会发生变化。​
​
最近更新时间:2026.08.19 11:25:21
这个页面对您有帮助吗?
有用
有用
无用
无用