Skip to main content
本产品推出了新版本。
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

升级 Astra 控制中心

贡献者

要升级 Astra 控制中心,请从 NetApp 支持站点下载安装包,然后按照以下说明升级环境中的 Astra 控制中心组件。您可以使用此操作步骤在互联网连接或通风环境中升级 Astra 控制中心。

您需要的内容
关于此任务

Astra 控制中心升级过程将指导您完成以下高级步骤:

重要说明 请勿在整个升级过程中执行以下命令以避免删除所有 Astra 控制中心 Pod : kubectl delete -f Astra_control_center_operator_deploy.yaml
提示 如果计划,备份和快照未运行,请在维护窗口中执行升级。
备注 如果您使用的是 Red Hat 的 Podman 而不是 Docker 引擎,则可以使用 Podman 命令代替 Docker 命令。

下载 Astra Control Center 捆绑包

  1. 从下载 Astra Control Center 升级包(Astra-control-center-[version].tar.gz"NetApp 支持站点"

  2. (可选)使用以下命令验证捆绑包的签名:

    openssl dgst -sha256 -verify astra-control-center[version].pub -signature <astra-control-center[version].sig astra-control-center[version].tar.gz

打开软件包的包装并更改目录

  1. 提取映像:

    tar -vxzf astra-control-center-[version].tar.gz
  2. 更改为 Astra 目录。

    cd astra-control-center-[version]

将映像添加到本地注册表

  1. 将 Astra Control Center 映像目录中的文件添加到本地注册表中。

    备注 有关自动加载映像的信息,请参见下面的示例脚本。
    1. 登录到 Docker 注册表:

      docker login [your_registry_path]
    2. 将映像加载到 Docker 中。

    3. 标记图像。

    4. [substep_image_local_registry_push]] 将映像推送到本地注册表。

      export REGISTRY=[your_registry_path]
      for astraImageFile in $(ls images/*.tar)
        # Load to local cache. And store the name of the loaded image trimming the 'Loaded images: '
        do astraImage=$(docker load --input ${astraImageFile} | sed 's/Loaded image: //')
        astraImage=$(echo ${astraImage} | sed 's!localhost/!!')
        # Tag with local image repo.
        docker tag ${astraImage} ${REGISTRY}/${astraImage}
        # Push to the local repo.
        docker push ${REGISTRY}/${astraImage}
      done

安装更新后的 Astra 控制中心操作员

  1. 编辑 Astra 控制中心操作员部署 YAML (Astra_control_center_operator_deploy.yaml )以参考您的本地注册表和机密。

    vim astra_control_center_operator_deploy.yaml
    1. 如果您使用的注册表需要身份验证,请将默认行 imagePullSecs : [] 替换为以下内容:

      imagePullSecrets:
      - name: <name_of_secret_with_creds_to_local_registry>
    2. Kube-RBAC 代理 映像的 ` [yor_registry_path]` 更改为将映像推入的注册表路径 上一步

    3. Acc-operator-controller-manager 映像的 ` [yor_registry_path]` 更改为在中推送映像的注册表路径 上一步

    4. 将以下值添加到 env 部分:

      - name: ACCOP_HELM_UPGRADETIMEOUT
        value: 300m
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          control-plane: controller-manager
        name: acc-operator-controller-manager
        namespace: netapp-acc-operator
      spec:
        replicas: 1
        selector:
          matchLabels:
            control-plane: controller-manager
        template:
          metadata:
            labels:
              control-plane: controller-manager
          spec:
            containers:
            - args:
              - --secure-listen-address=0.0.0.0:8443
              - --upstream=http://127.0.0.1:8080/
              - --logtostderr=true
              - --v=10
              image: [your_registry_path]/kube-rbac-proxy:v4.8.0
              name: kube-rbac-proxy
              ports:
              - containerPort: 8443
                name: https
            - args:
              - --health-probe-bind-address=:8081
              - --metrics-bind-address=127.0.0.1:8080
              - --leader-elect
              command:
              - /manager
              env:
              - name: ACCOP_LOG_LEVEL
                value: "2"
              - name: ACCOP_HELM_UPGRADETIMEOUT
                value: 300m
              image: [your_registry_path]/acc-operator:[version x.y.z]
              imagePullPolicy: IfNotPresent
            imagePullSecrets: []
  2. 安装更新后的 Astra 控制中心操作员:

    kubectl apply -f astra_control_center_operator_deploy.yaml

    响应示例:

    namespace/netapp-acc-operator unchanged
    customresourcedefinition.apiextensions.k8s.io/astracontrolcenters.astra.netapp.io configured
    role.rbac.authorization.k8s.io/acc-operator-leader-election-role unchanged
    clusterrole.rbac.authorization.k8s.io/acc-operator-manager-role configured
    clusterrole.rbac.authorization.k8s.io/acc-operator-metrics-reader unchanged
    clusterrole.rbac.authorization.k8s.io/acc-operator-proxy-role unchanged
    rolebinding.rbac.authorization.k8s.io/acc-operator-leader-election-rolebinding unchanged
    clusterrolebinding.rbac.authorization.k8s.io/acc-operator-manager-rolebinding configured
    clusterrolebinding.rbac.authorization.k8s.io/acc-operator-proxy-rolebinding unchanged
    configmap/acc-operator-manager-config unchanged
    service/acc-operator-controller-manager-metrics-service unchanged
    deployment.apps/acc-operator-controller-manager configured

升级 Astra 控制中心

  1. 编辑 Astra 控制中心自定义资源( CR )(Astra_control_center_min.yaml ),并将 Astra 版本(AstraVersion Insidem of SPec )编号更改为最新:

    kubectl edit acc -n [netapp-acc or custom namespace]
    备注 注册表路径必须与中推送映像的注册表路径匹配 上一步
  2. 在 Astra 控制中心 CR 的 SPec 内的 addtionalValues 中添加以下行:

    additionalValues:
        nautilus:
          startupProbe:
            periodSeconds: 30
            failureThreshold: 600
  3. 执行以下操作之一:

    1. 如果您没有自己的 InvorsController 或入口,并且一直使用带有其 Traefik 网关的 Astra 控制中心作为负载平衡器类型的服务,并且希望继续进行此设置,请指定另一个字段 ingressType (如果尚未显示)并将其设置为 AccTraefik

      ingressType: AccTraefik
    2. 如果您要切换到默认的 Astra 控制中心通用传入部署,请提供您自己的内部控制器 / 传入设置(采用 TLS 终止等),打开通往 Astra 控制中心的路由,并将 ingressType 设置为 Generic

      ingressType: Generic
      提示 如果省略此字段,则此过程将成为通用部署。如果您不希望使用通用部署,请务必添加此字段。
  4. (可选)验证 Pod 是否终止并重新可用:

    watch kubectl get po -n [netapp-acc or custom namespace]
  5. 等待 Astra 状态条件指示升级已完成且准备就绪:

    kubectl get -o yaml -n [netapp-acc or custom namespace] astracontrolcenters.astra.netapp.io astra

    响应:

    conditions:
      - lastTransitionTime: "2021-10-25T18:49:26Z"
        message: Astra is deployed
        reason: Complete
        status: "True"
        type: Ready
      - lastTransitionTime: "2021-10-25T18:49:26Z"
        message: Upgrading succeeded.
        reason: Complete
        status: "False"
        type: Upgrading
  6. 重新登录并验证所有受管集群和应用程序是否仍然存在并受到保护。

  7. 如果操作员未更新证书管理器,请接下来升级第三方服务。

升级第三方服务(可选)

在先前的升级步骤中,不会升级第三方服务 Traefik 和 Cert-manager 。您可以选择使用此处所述的操作步骤对其进行升级,也可以在系统需要时保留现有服务版本。

  • * 任务期限 * :默认情况下, Astra 控制中心负责管理任务期限部署的生命周期。如果将 externalTraefik 设置为 false (默认),则表示系统中不存在外部 Traefik ,并且 Astra 控制中心正在安装和管理 Traefik 。在这种情况下, externalTraefik 设置为 false

    另一方面,如果您有自己的 Traefik 部署,请将 externalTraefik 设置为 true 。在这种情况下,您将保持部署状态,并且 Astra 控制中心不会升级 CRD ,除非 shouldUpgrade 设置为 true

  • * 证书管理器 * :默认情况下, Astra 控制中心会安装证书管理器(和 CRD ),除非您将 externalCertManager 设置为 true 。将 shoulldUpgrade 设置为 true 让 Astra Control Center 升级 CRD 。

如果满足以下任一条件,则升级 Traefik :

  • externalTraefik : false 或

  • externalTraefik : true , shouldUpgrade : true 。

步骤
  1. 编辑 Acc CR :

    kubectl edit acc -n [netapp-acc or custom namespace]
  2. 根据需要将 externalTraefik 字段和 shouldUpgrade 字段更改为 truefalse

    crds:
        externalTraefik: false
        externalCertManager: false
        shouldUpgrade: false

验证系统状态

  1. 登录到 Astra 控制中心。

  2. 验证所有受管集群和应用程序是否仍存在并受到保护。

设置传入以进行负载平衡

您可以设置 Kubernetes 入口对象,用于管理对服务的外部访问,例如集群中的负载平衡。

  • 默认升级使用通用传入部署。在这种情况下,您还需要设置入口控制器或入口资源。

  • 如果您不需要入口控制器,但希望保留现有控制器,请将 ingressType 设置为 AccTraefik

备注 有关 "loadbalancer" 服务类型和入口的其他详细信息,请参见 "要求"

根据您使用的入口控制器类型,步骤会有所不同:

  • nginx 入口控制器

  • OpenShift 入口控制器

您需要的内容
  • 在 CR 规范中,

    • 如果存在 crd.externalTraefik ,则应将其设置为 false

    • 如果 crd.externalTraefiktrue ,则 crd.shouldUpgrade 也应为 true

  • 所需 "入口控制器" 应已部署。

  • "入口类" 应已创建与入口控制器对应的。

  • 您使用的是介于 v1.19 和 v1.21 之间的 Kubernetes 版本,包括 v1.19 和 v1.21 。

nginx 入口控制器的步骤
  1. 使用现有密钥 secure-testing-cert 或创建类型的密钥 "8a637503539b25b68130b6e8003579d9" 用于 NetApp-Accc (或自定义命名)命名空间中的 TLS 专用密钥和证书,如中所述 "TLS 密钥"

  2. NetApp-Accc (或自定义命名)命名空间中为已弃用或新模式部署入站资源:

    1. 对于已弃用的模式,请遵循以下示例:

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: ingress-acc
        namespace: [netapp-acc or custom namespace]
        annotations:
          kubernetes.io/ingress.class: nginx
      spec:
        tls:
        - hosts:
          - <ACC address>
          secretName: [tls secret name]
        rules:
        - host: [ACC address]
          http:
            paths:
            - backend:
              serviceName: traefik
              servicePort: 80
              pathType: ImplementationSpecific
    2. 对于新模式,请遵循以下示例:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: netapp-acc-ingress
      namespace: [netapp-acc or custom namespace]
    spec:
      ingressClassName: [class name for nginx controller]
      tls:
      - hosts:
        - <ACC address>
        secretName: [tls secret name]
      rules:
      - host: <ACC address>
        http:
          paths:
            - path:
              backend:
                service:
                  name: traefik
                  port:
                    number: 80
              pathType: ImplementationSpecific
OpenShift 入口控制器的步骤
  1. 获取证书并获取密钥,证书和 CA 文件,以供 OpenShift 路由使用。

  2. 创建 OpenShift 路由:

    oc create route edge --service=traefik
    --port=web -n [netapp-acc or custom namespace]
    --insecure-policy=Redirect --hostname=<ACC address>
    --cert=cert.pem --key=key.pem

验证入口设置

您可以先验证入口设置,然后再继续操作。

  1. 确保已将负载平衡器中的 Traefik 更改为 clusterIP

    kubectl get service traefik -n [netapp-acc or custom namespace]
  2. 验证 Traefik 中的路由:

    Kubectl get ingressroute ingressroutetls -n [netapp-acc or custom namespace]
    -o yaml | grep "Host("
    备注 结果应为空。