Azure Stack Hub에서 AKS 엔진을 사용하여 Kubernetes 클러스터 업그레이드

AKS 엔진을 사용하면 Azure Stack Hub의 도구를 사용하여 원래 배포된 Kubernetes 클러스터를 업그레이드할 수 있습니다. AKS 엔진을 사용하여 클러스터를 유지할 수 있습니다. 유지 관리 작업은 모든 IaaS 시스템과 비슷합니다. 새 업데이트의 가용성을 알고 있어야 하며 AKS 엔진을 사용하여 적용해야 합니다.

클러스터 업그레이드

업그레이드 명령은 Kubernetes 버전 및 기본 OS 이미지를 업데이트합니다. 업그레이드 명령을 실행할 때마다 클러스터의 모든 노드에 대해 AKS 엔진은 사용된 aks-engine 버전과 연결된 AKS 기본 이미지를 사용하여 새 VM을 만듭니다.

AKS 엔진 버전 0.73.0 이하의 경우 명령을 사용하여 aks-engine upgrade 클러스터의 모든 master 및 에이전트 노드의 통화를 유지할 수 있습니다.

AKS 엔진 버전 0.75.3 이상의 경우 명령을 사용하여 aks-engine-azurestack upgrade 클러스터의 모든 master 및 에이전트 노드의 통화를 유지할 수 있습니다.

Microsoft는 클러스터를 관리하지 않습니다. 그러나 Microsoft는 클러스터를 관리하는 데 사용할 수 있는 도구와 VM 이미지를 제공합니다.

배포된 클러스터의 경우 업그레이드는 다음을 다룹니다.

  • Kubernetes
  • Azure Stack Hub Kubernetes 공급자
  • 기본 OS

프로덕션 클러스터를 업그레이드할 때 다음을 고려합니다.

  • 대상 클러스터에 올바른 클러스터 사양(apimodel.json) 및 리소스 그룹을 사용하고 있나요?
  • 클라이언트 컴퓨터에서 AKS 엔진을 실행하고 업그레이드 작업을 수행하는 신뢰할 수 있는 컴퓨터를 사용하고 있나요?
  • 백업 클러스터가 있고 작동 중인지 확인합니다.
  • 가능하면 Azure Stack Hub 환경 내의 VM에서 명령을 실행하여 네트워크 홉 및 잠재적인 연결 실패를 줄입니다.
  • 구독에 전체 프로세스에 충분한 공간이 있는지 확인합니다. 프로세스는 프로세스 중에 새 VM을 할당합니다.
  • 시스템 업데이트 또는 예약된 작업은 계획되지 않습니다.
  • 프로덕션 클러스터로 정확히 구성된 클러스터에서 단계적 업그레이드를 설정하고 프로덕션 클러스터에서 업그레이드를 테스트하기 전에 해당 클러스터에서 업그레이드를 테스트합니다.

최신 Kubernetes 버전으로 업그레이드하는 단계

참고

AKS 기본 이미지는 최신 버전의 aks-engine을 사용 중이며 마켓플레이스에서 이미지를 사용할 수 있는 경우에도 업그레이드됩니다.

다음 지침에서는 최소 단계를 사용하여 업그레이드를 수행합니다. 자세한 내용은 Kubernetes 클러스터 업그레이드 문서를 참조하세요.

  1. 먼저 업그레이드를 대상으로 지정할 수 있는 버전을 결정해야 합니다. 이 버전은 현재 있는 버전에 따라 달라지고 해당 버전 값을 사용하여 업그레이드를 수행합니다. AKS 엔진에서 지원하는 Kubernetes 버전은 다음 명령을 실행하여 나열할 수 있습니다.

    참고

    AKSe 버전 0.75.3 이상의 경우 AKS 엔진 버전을 가져오는 명령은 입니다 aks-engine-azurestack get-versions.

    aks-engine get-versions --azure-env AzureStackCloud
    

    AKS 엔진, AKS 기본 이미지 및 Kubernetes 버전의 전체 매핑은 지원되는 AKS 엔진 버전을 참조하세요.

  2. 명령을 실행하는 데 필요한 정보를 수집합니다 upgrade . 명령은 upgrade 다음 매개 변수를 사용합니다.

    매개 변수 예제 Description
    azure-env AzureStackCloud AKS 엔진에 대상 플랫폼이 Azure Stack Hub임을 나타내려면 를 사용합니다 AzureStackCloud.
    위치 로컬 Azure Stack Hub의 지역 이름입니다. ASDK의 경우 지역은 로 설정 local됩니다.
    resource-group kube-rg 새 리소스 그룹의 이름을 입력하거나 기존 리소스 그룹을 선택합니다. 리소스 이름은 영숫자 및 소문자여야 합니다.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 구독 ID를 입력합니다. 자세한 내용은 제품 구독을 참조하세요.
    api-model ./kubernetes-azurestack.json 클러스터 구성 파일 또는 API 모델의 경로입니다.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 서비스 주체 GUID를 입력합니다. Azure Stack Hub 관리자가 서비스 주체를 만들 때 애플리케이션 ID로 식별된 클라이언트 ID입니다.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 서비스 주체 암호를 입력합니다. 서비스를 만들 때 설정한 클라이언트 암호입니다.
    identity-system adfs 선택 사항입니다. AD FS(Active Directory Federated Services)를 사용하는 경우 ID 관리 솔루션을 지정합니다.
  3. 값을 배치한 상태에서 다음 명령을 실행합니다.

    참고

    AKSe 버전 0.75.3 이상의 경우 AKS 엔진을 업그레이드하는 명령은 입니다 aks-engine-azurestack upgrade.

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. 어떤 이유로든 업그레이드 작업에 오류가 발생하면 문제를 해결한 upgrade 후 명령을 다시 실행할 수 있습니다. AKS 엔진은 이전에 실패한 작업을 다시 시작합니다.

OS 이미지만 업그레이드하는 단계

  1. 지원되는 kubernetes-version 테이블을 검토하고 업그레이드를 계획하는 aks-engine 및 AKS 기본 이미지 버전이 있는지 확인합니다. AKS 엔진 버전 0.73.0 이하인 경우 aks-engine 실행 aks-engine version버전을 보려면 입니다. AKS 엔진 버전 0.75.3 이상인 경우 aks-engine 실행 aks-engine-azurestack version버전을 보려면 입니다.
  2. aks-engine run ./get-akse.sh --version vx.xx.x 을 설치한 컴퓨터에서 그에 따라 AKS 엔진을 업그레이드합니다. x.xx.x 를 대상 버전으로 바꿉니다.
  3. Azure Stack Hub 운영자에게 사용하려는 Azure Stack Hub Marketplace에 필요한 AKS 기본 이미지 버전을 추가하도록 요청합니다.
  4. aks-engine upgrade 이미 사용 중인 동일한 버전의 Kubernetes를 사용하여 명령을 실행하지만 를 추가합니다--force. 업그레이드 강제 적용에서 예제를 볼 수 있습니다.

클러스터를 OS 버전 Ubuntu 20.04로 업데이트하는 단계

AKS 엔진 버전 0.75.3 이상을 사용하면 클러스터 VM을 Ubuntu 18.04에서 20.04로 업그레이드할 수 있습니다. 다음 단계를 수행합니다.

  1. 배포 중에 api-model.json 생성된 파일을 찾아 편집합니다. 이 파일은 를 사용하여 업그레이드 또는 크기 조정 작업에 사용되는 파일과 aks-engine동일해야 합니다. AKS 엔진 버전 0.75.3 이상에서 를 사용합니다 aks-engine-azurestack.
  2. 해당 섹션 내에서 및 에 대한 masterProfile 섹션을 찾은 다음 의 distro 값을 로 변경합니다aks-ubuntu-20.04.agentPoolProfiles
  3. api-model.json 파일을 저장하고 최신 Kubernetes 버전으로 업그레이드하는 단계와 마찬가지로 명령에 파일을 aks-engin upgrade 사용합니다api-model.json.

AKS 엔진 v0.70.0 이상에서 스토리지 볼륨을 사용하는 경우 클러스터를 업그레이드하는 단계

Azure용 클라우드 공급자 프로젝트(트리 외부 클라우드 공급자 또는 외부 클라우드 공급자라고도 함cloud-controller-manager)는 Azure 클라우드에 대한 Kubernetes 클라우드 공급자 인터페이스를 구현합니다. 트리 외부 구현은 사용되지 않는 트리 내 구현을 대체합니다.

Azure Stack Hub에서 Kubernetes v1.21부터 AKS 엔진 기반 클러스터는 를 독점적으로 사용합니다 cloud-controller-manager. 따라서 Kubernetes v1.21+ 클러스터를 배포하려면 API 모델(: )에서 를 로 설정 orchestratorProfile.kubernetesConfig.useCloudControllerManagertrue 해야 합니다. AKS 엔진의 업그레이드 프로세스는 플래그를 자동으로 업데이트합니다 useCloudControllerManager .

참고

업그레이드 고려 사항: Kubernetes 클러스터를 v1.20(또는 하위 버전)에서 v1.21(이상 버전)로 업그레이드하는 프로세스로 인해 트리 내 볼륨 프로비저닝기를 사용하는 워크로드에 kubernetes.io/azure-disk 가동 중지 시간이 발생합니다. Kubernetes v1.21+로 업그레이드하기 전에 애플리케이션 데이터의 전체 백업을 수행하고 사전 프로덕션 환경에서 클러스터 스토리지 리소스(PV 및 PVC)를 새 볼륨 프로비저닝기로 마이그레이션할 수 있는지 확인하는 것이 좋습니다. 여기에서 Azure Disk CSI 드라이버로 마이그레이션하는 방법을 알아봅니 .

볼륨 프로비저닝기

트리 내 볼륨 프로비저닝기는 트리 내 클라우드 공급자와만 호환됩니다. 따라서 사용자 워크로드가 영구 스토리지를 사용하는 경우 v1.21 이상 클러스터에는 CSI(Container Storage Interface) 드라이버가 포함되어야 합니다. Azure Stack Hub에서 사용할 수 있는 몇 가지 솔루션이 여기에 나열되어 있습니다.

AKS 엔진은 기본적으로 Azure Stack Hub에서 CSI 드라이버를 사용하도록 설정 하지 않습니다 . CSI 드라이버가 필요한 워크로드의 경우 추가 기능(Linux 전용 클러스터)을 명시적으로 사용하도록 설정 azuredisk-csi-driver 하거나 를 사용하여 Helm 차트(Linux 및/또는 Windows 클러스터)를 설치 azuredisk-csi-driver 할 수 있습니다.

영구 스토리지를 Azure Disk CSI 드라이버로 마이그레이션

AKS 엔진 기반 클러스터를 v1.20(또는 더 낮은 버전)에서 v1.21(이상 버전)로 업그레이드하는 프로세스는 이 프로비저닝자가 Azure용 클라우드 공급자의 일부가 아니기 때문에 트리 내 볼륨 프로비저닝기를 사용하는 kubernetes.io/azure-disk 워크로드에 가동 중지 시간이 발생합니다.

기본 Azure 디스크에 유지되는 데이터를 보존해야 하는 경우 클러스터 업그레이드 프로세스가 완료되면 다음 추가 단계가 필요합니다.

  1. Azure Disk CSI 드라이버 설치
  2. 사용되지 않는 트리 내 스토리지 클래스 제거
  3. 영구 볼륨 및 클레임 다시 만들기

1. Azure Disk CSI 드라이버를 수동으로 설치

다음 스크립트는 를 사용하여 Helm Azure Disk CSI 드라이버를 설치합니다.

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2. 스토리지 클래스 바꾸기

kube-addon-manager 트리 내 스토리지 클래스(disk.csi.azure.com)가 수동으로 삭제되면 Azure Disk CSI 드라이버 스토리지 클래스(kubernetes.io/azure-disk)를 자동으로 만듭니다.

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3. 영구 볼륨 다시 만들기

Azure Disk CSI 드라이버가 설치되고 스토리지 클래스가 교체되면 다음 단계는 Azure Disk CSI 드라이버(또는 대체 CSI 솔루션)를 사용하여 PV(영구 볼륨) 및 PVC(영구 볼륨 클레임)를 다시 만드는 것입니다.

이 프로세스는 이러한 리소스가 처음 배포된 방식에 따라 다를 수 있는 다단계 프로세스입니다. 개략적인 단계는 다음과 같습니다.

  • 마이그레이션할 PV + PVC 쌍을 참조하는 배포 또는 상태 저장 집합을 삭제합니다(필요한 경우 백업 리소스 정의).
  • PV의 persistentVolumeReclaimPolicy 속성이 값 Retain ()으로 설정되어 있는지 확인합니다.
  • 마이그레이션할 PV + PVC 쌍을 삭제합니다(필요한 경우 백업 리소스 정의).
  • 마이그레이션하려면 개체를 제거하고 azureDisk 원래 AzureDisk(: )에 대한 참조가 있는 개체를 csi 추가하여 PV의 리소스 정의를 업데이트합니다.
  • 다음 순서대로 PV 리소스/s, PVC 리소스/s(필요한 경우) 및 마지막으로 배포 또는 상태 저장 집합을 다시 만듭니다.

다음 마이그레이션 스크립트 는 템플릿으로 제공됩니다.

마이그레이션 스크립트를 실행한 후 "볼륨을 연결하거나 탑재할 수 없음" 오류로 Pod가 중단된 경우 Azure Disk CSI 드라이버가 설치되었고스토리지 클래스가 다시 만들어졌는지 확인합니다.

업그레이드 강제 적용

클러스터를 강제로 업그레이드할 수 있는 조건이 있을 수 있습니다. 예를 들어 첫날에는 최신 Kubernetes 버전을 사용하여 연결이 끊긴 환경에서 클러스터를 배포합니다. 다음 날 Ubuntu는 Microsoft에서 새 AKS 기본 이미지를 생성하는 취약성에 대한 패치를 릴리스합니다. 이미 배포한 동일한 Kubernetes 버전을 사용하여 업그레이드를 강제로 적용하여 새 이미지를 적용할 수 있습니다.

참고

AKSe 버전 0.75.3 이상의 경우 AKS 엔진을 업그레이드하는 명령은 입니다 aks-engine-azurestack upgrade.

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

자세한 내용은 강제 업그레이드를 참조하세요.

다음 단계