升级 Astra 控制中心
要升级 Astra 控制中心,请从 NetApp 支持站点下载安装包,然后按照以下说明升级环境中的 Astra 控制中心组件。您可以使用此操作步骤在互联网连接或通风环境中升级 Astra 控制中心。
-
确保所有集群操作员均处于运行状况良好且可用。
OpenShift 示例:
oc get clusteroperators
-
确保所有 API 服务均处于运行状况良好且可用。
OpenShift 示例:
oc get apiservices
-
从 Astra 控制中心注销。
Astra 控制中心升级过程将指导您完成以下高级步骤:
请勿在整个升级过程中执行以下命令以避免删除所有 Astra 控制中心 Pod : kubectl delete -f Astra_control_center_operator_deploy.yaml
|
如果计划,备份和快照未运行,请在维护窗口中执行升级。 |
如果您使用的是 Red Hat 的 Podman 而不是 Docker 引擎,则可以使用 Podman 命令代替 Docker 命令。 |
下载 Astra Control Center 捆绑包
-
从下载 Astra Control Center 升级包(
Astra-control-center-[version].tar.gz
) "NetApp 支持站点"。 -
(可选)使用以下命令验证捆绑包的签名:
openssl dgst -sha256 -verify astra-control-center[version].pub -signature <astra-control-center[version].sig astra-control-center[version].tar.gz
打开软件包的包装并更改目录
-
提取映像:
tar -vxzf astra-control-center-[version].tar.gz
-
更改为 Astra 目录。
cd astra-control-center-[version]
将映像添加到本地注册表
-
将 Astra Control Center 映像目录中的文件添加到本地注册表中。
有关自动加载映像的信息,请参见下面的示例脚本。 -
登录到 Docker 注册表:
docker login [your_registry_path]
-
将映像加载到 Docker 中。
-
标记图像。
-
[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 控制中心操作员
-
编辑 Astra 控制中心操作员部署 YAML (
Astra_control_center_operator_deploy.yaml
)以参考您的本地注册表和机密。vim astra_control_center_operator_deploy.yaml
-
如果您使用的注册表需要身份验证,请将默认行
imagePullSecs : []
替换为以下内容:imagePullSecrets: - name: <name_of_secret_with_creds_to_local_registry>
-
将
Kube-RBAC 代理
映像的 ` [yor_registry_path]` 更改为将映像推入的注册表路径 上一步。 -
将
Acc-operator-controller-manager
映像的 ` [yor_registry_path]` 更改为在中推送映像的注册表路径 上一步。 -
将以下值添加到
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: []
-
-
安装更新后的 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 控制中心
-
编辑 Astra 控制中心自定义资源( CR )(
Astra_control_center_min.yaml
),并将 Astra 版本(AstraVersion
Insidem ofSPec
)编号更改为最新:kubectl edit acc -n [netapp-acc or custom namespace]
注册表路径必须与中推送映像的注册表路径匹配 上一步。 -
在 Astra 控制中心 CR 的
SPec
内的addtionalValues
中添加以下行:additionalValues: nautilus: startupProbe: periodSeconds: 30 failureThreshold: 600
-
执行以下操作之一:
-
如果您没有自己的 InvorsController 或入口,并且一直使用带有其 Traefik 网关的 Astra 控制中心作为负载平衡器类型的服务,并且希望继续进行此设置,请指定另一个字段
ingressType
(如果尚未显示)并将其设置为AccTraefik
。ingressType: AccTraefik
-
如果您要切换到默认的 Astra 控制中心通用传入部署,请提供您自己的内部控制器 / 传入设置(采用 TLS 终止等),打开通往 Astra 控制中心的路由,并将
ingressType
设置为Generic
。ingressType: Generic
如果省略此字段,则此过程将成为通用部署。如果您不希望使用通用部署,请务必添加此字段。
-
-
(可选)验证 Pod 是否终止并重新可用:
watch kubectl get po -n [netapp-acc or custom namespace]
-
等待 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
-
重新登录并验证所有受管集群和应用程序是否仍然存在并受到保护。
-
如果操作员未更新证书管理器,请接下来升级第三方服务。
升级第三方服务(可选)
在先前的升级步骤中,不会升级第三方服务 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 。
-
编辑
Acc
CR :kubectl edit acc -n [netapp-acc or custom namespace]
-
根据需要将
externalTraefik
字段和shouldUpgrade
字段更改为true
或false
。crds: externalTraefik: false externalCertManager: false shouldUpgrade: false
验证系统状态
-
登录到 Astra 控制中心。
-
验证所有受管集群和应用程序是否仍存在并受到保护。
设置传入以进行负载平衡
您可以设置 Kubernetes 入口对象,用于管理对服务的外部访问,例如集群中的负载平衡。
-
默认升级使用通用传入部署。在这种情况下,您还需要设置入口控制器或入口资源。
-
如果您不需要入口控制器,但希望保留现有控制器,请将
ingressType
设置为AccTraefik
。
有关 "loadbalancer" 服务类型和入口的其他详细信息,请参见 "要求"。 |
根据您使用的入口控制器类型,步骤会有所不同:
-
nginx 入口控制器
-
OpenShift 入口控制器
-
使用现有密钥
secure-testing-cert
或创建类型的密钥 "8a637503539b25b68130b6e8003579d9" 用于NetApp-Accc
(或自定义命名)命名空间中的 TLS 专用密钥和证书,如中所述 "TLS 密钥"。 -
在
NetApp-Accc
(或自定义命名)命名空间中为已弃用或新模式部署入站资源:-
对于已弃用的模式,请遵循以下示例:
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
-
对于新模式,请遵循以下示例:
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
-
-
获取证书并获取密钥,证书和 CA 文件,以供 OpenShift 路由使用。
-
创建 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
验证入口设置
您可以先验证入口设置,然后再继续操作。
-
确保已将负载平衡器中的 Traefik 更改为
clusterIP
:kubectl get service traefik -n [netapp-acc or custom namespace]
-
验证 Traefik 中的路由:
Kubectl get ingressroute ingressroutetls -n [netapp-acc or custom namespace] -o yaml | grep "Host("
结果应为空。