출시 채널

이 주제에서는 GKE 클러스터 버전 관리 및 업그레이드에 대한 Google Kubernetes Engine(GKE) 권장사항을 제공하는 출시 채널을 소개합니다.

개요

Kubernetes는 보안 업데이트를 제공하고 알려진 문제를 해결하며 새로운 기능을 소개하기 위해 자주 업데이트를 출시합니다. 출시 채널을 사용하면 클러스터에 배포된 버전의 안정성과 기능의 조합 간에 균형을 맞출 수 있습니다.

새 클러스터를 출시 채널에 등록하면 Google에서 클러스터와 노드 풀의 버전과 업그레이드 주기를 자동으로 관리합니다. 모든 채널은 지원되는 GKE 출시 버전을 제공하며 GA로 간주됩니다(단, 표시된 대로 개별 기능이 항상 GA로 간주되지는 않음). 이러한 채널의 Kubernetes 출시는 공식 Kubernetes 출시이며 GA 및 베타 Kubernetes API(표시됨)를 모두 포함합니다. 새 Kubernetes 버전은 신속 채널에 먼저 출시되며 시간이 지남에 따라 일반 및 공개 버전 채널에 승격됩니다. 이렇게 하면 비즈니스, 안정성, 기능 요구사항을 충족하는 채널에 사용자의 클러스터를 등록할 수 있습니다.

가용 채널

다음 출시 채널을 사용할 수 있습니다. 채널마다 기능 가용성과 업데이트 빈도의 절충안을 제공합니다. 채널마다 다른 인증 표시줄이 있지만 모든 채널은 테스트된 Kubernetes의 GA 버전을 제공합니다.

채널 새로운 Kubernetes 출시 가용성 속성
신속 업스트림 오픈소스 GA 후 몇 주 이내 가능한 한 빨리 최신 Kubernetes 버전을 다운로드하고, GA로 전환하는 즉시 새로운 GKE 기능을 사용할 수 있습니다. 클러스터는 최신의 이용 가능한 패치 버전을 유지하기 위해 자주 업데이트되며 새로운 Kubernetes 기능을 제공합니다.
일반(기본값) 신속 채널에 출시 후 2~3개월 오랜 기간 동안 검증된 버전에서 GKE 및 Kubernetes 기능이 출시된 후에는 빠른 시일 내에 액세스할 수 있습니다. 사용 가능한 기능과 출시 안정성의 균형이 유지되며, 대부분의 사용자에게 권장됩니다.
정식 일반 채널에 출시 후 2~3개월 새로운 기능보다 안정성을 우선시합니다. 이 채널의 변경사항 및 새 버전은 신속 채널 및 일반 채널에서 검증된 후 가장 마지막으로 출시되므로 유효성 검사에 더 많은 시간을 할애할 수 있습니다.

새 클러스터를 출시 채널에 등록하면 채널에 새 버전을 사용할 수 있을 때 클러스터가 자동으로 업그레이드됩니다.

신속 채널에서 새 부 버전의 누적 사용량이 증가하고 안정성이 입증되면 일반 채널로 승격됩니다. 결국 부 버전은 공개 버전 채널로 승격되어 중요도가 높은 업데이트만 수신합니다. 각 승격은 해당 버전을 실행하는 클러스터의 성능을 기준으로 단계적 안정성 및 프로덕션 준비 상태를 나타냅니다.

클러스터 및 Google 인프라를 보호하기 위해 모든 출시 채널에 중요한 보안 패치가 제공됩니다.

정확한 출시 일정은 오픈소스 출시 및 패치 일정을 포함한 여러 요소에 따라 달라지므로 변경될 수 있습니다. 최신 정보를 받아 보려면 GKE 출시 노트를 검토하거나 채널의 RSS 피드를 구독하세요.

채널에서 사용할 수 있는 버전은 무엇인가요?

각 출시 채널은 기본 버전과 해당 채널에 사용 가능한 버전 모음을 제공하며, 프로덕션 환경을 업그레이드하기 전에 사용 가능한 새로운 버전으로 워크로드를 실행할 수 있는 기능을 제공합니다. 버전이 해당 특정 채널의 자격 요건을 충족했습니다.

  • 새 패치 출시 버전은 기본 버전이 되기 1주일 전에 제공됩니다.
  • 새로운 부 버전은 기본 버전이 되기 4주 전에 제공됩니다.

GKE는 업그레이드 관련 중단을 완화하기 위해 사용 가능한 버전을 테스트하는 것을 권장합니다. 사전 프로덕션 환경을 구독하여 채널에서 제공되는 모든 버전을 수신하는 것이 한 가지 방법입니다. 테스트 또는 검증에 더 많은 시간이 필요한 경우 GKE는 제외 기간을 사용하여 자동 업그레이드를 연기하는 것이 좋습니다.

GKE는 클러스터를 기본 버전으로 점진적으로 자동 업그레이드합니다. 업그레이드 프로세스를 보다 세밀하게 제어해야 하는 경우 사용 가능한 버전으로 미리 업그레이드하는 것을 권장합니다. GKE 자동 업그레이드 프로세스는 해당 리소스가 자동 업그레이드 대상 버전과 같거나 그 이상의 버전이 있는 경우 클러스터 리소스를 수정하지 않습니다. 클러스터 또는 노드는 자동 업그레이드를 건너뛰기 위해 사전에 수동으로 업그레이드될 수 있습니다.

출시 채널의 기본 및 사용 가능한 버전을 보려면 다음 명령어를 실행합니다. 여기서 compute-zone컴퓨팅 영역으로 바꿉니다.

gcloud container get-server-config --format "yaml(channels)" --zone compute-zone

채널의 새로운 소식 확인하기

출시 채널의 새로운 기능을 알아보려면 출시 노트를 검토하세요. 각 출시 채널과 전체 출시 노트에 별도의 출시 노트가 있습니다.

출시 채널 출시 노트
신속 채널 HTML 또는 Atom 피드
일반 채널 HTML 또는 Atom 피드
공개 버전 채널 HTML 또는 Atom 피드

어떤 채널을 사용해야 하나요?

채널에는 Kubernetes의 GA 버전만 포함되며, 각 채널은 Kubernetes 및 GKE 출시 버전의 다양한 품질 및 성숙도를 나타냅니다. 다음 다이어그램은 출시 채널의 채택 주기를 보여줍니다.

출시 채널 채택 주기

최신 Kubernetes API 및 기능에 의존하는 워크로드와 사전 체험판에 신속 채널을 사용하여 출시 버전이 성숙하고 일반 및 공개 버전 채널로 승급되기 전에 신작을 테스트하고 검증하는 것이 좋습니다.

최신 기능에 대한 성숙도가 필요한 프로덕션 워크로드의 경우 일반(기본) 채널 또는 공개 버전 채널을 사용하는 것이 좋습니다.

  • 새로운 기능을 면밀히 추적해야 하는 경우 Kubernetes OSS 버전의 안정성과 최신 상태 사이의 균형을 제공하는 일반 채널을 사용하는 것이 좋습니다.
  • 특히 프로덕션 클러스터에 대한 요구 사항이 성숙도인 경우 안정 채널을 사용합니다.

GKE는 클러스터를 채널의 품질 기준을 충족하는 최신 버전으로 업그레이드합니다. 하지만 다음과 같은 이점을 제공하기 때문에 클러스터를 미리 업그레이드하는 것이 좋습니다.

  • 업그레이드를 더 효과적으로 제어하고 근무 시간에 맞출 수 있습니다.
  • GKE는 출시 대상(예: 다음 대상 버전으로 수동으로 업그레이드된 클러스터)을 충족하는 자동 업그레이드 클러스터를 건너뛰므로 예측 가능성이 향상됩니다. 노드를 제어 영역(마스터) 버전과 일치시키고 취약점 및 지원되지 않는 버전 편향으로부터 보호하기 위해 선택한 채널에서 권장 버전으로 노드가 자동으로 업그레이드됩니다.

출시 채널에 클러스터 등록하기

출시 채널에 새 클러스터 또는 기존 클러스터를 등록할 수 있습니다.

새 클러스터 등록하기

gcloud 또는 Google Cloud Console을 사용하여 출시 채널에 새 클러스터를 만들고 등록할 수 있습니다.

콘솔

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기 버튼을 클릭합니다.

  3. 마스터 버전에서 출시 채널을 선택합니다.

  4. 출시 채널 드롭다운 목록에서 클러스터를 등록할 출시 채널을 선택합니다.

  5. 계속해서 클러스터를 원하는 대로 만듭니다.

  6. 만들기를 클릭합니다.

gcloud

출시 채널에서 클러스터를 만들고 등록하려면 다음 명령어를 실행합니다.

gcloud container clusters create cluster-name \
    --zone compute-zone \
    --release-channel channel \
    additional-flags

다음을 바꿉니다.

  • cluster-name: 새 클러스터의 이름입니다.
  • compute-zone: 클러스터의 컴퓨팅 영역입니다.
  • channel: 출시 채널의 유형입니다(rapid, regular 또는 stable 중 하나).
  • additional-flags: 클러스터를 만들 때 지정해야 하는 다른 플래그입니다. 선택적 플래그의 전체 목록은 gcloud container clusters create 문서를 참조하세요.

기존 클러스터 등록하기

클러스터 제어 영역 버전을 출시 채널 기본값으로 업그레이드할 수 있는 경우 출시 채널에 기존 클러스터를 등록할 수 있습니다. 즉, 출시 채널의 기본 버전은 기존 제어 영역 버전과 같거나 높은 부 버전(최대 하나)이어야 합니다.

등록하려면 원하는 channel클러스터 출시 채널을 업데이트합니다.

클러스터 채널 확인

gcloud 또는 Google Cloud Console을 사용하여 클러스터의 출시 채널을 확인할 수 있습니다.

Console

  1. Google Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 원하는 클러스터를 선택합니다.

  3. 클러스터 세부정보에서 출시 채널 필드의 값을 읽습니다(예: '일반 채널').

gcloud

gcloud container clusters describe cluster-name \
    --zone compute-zone --format="value(releaseChannel.channel)"

다음을 바꿉니다.

  • cluster-name: 클러스터 이름입니다.
  • compute-zone: 클러스터의 컴퓨팅 영역입니다.

새 출시 채널 선택

출시 채널 간 마이그레이션은 제한된 시나리오에서 지원됩니다.

Stable에서 Regular로의 마이그레이션과 같은 단일 부 버전 업그레이드가 이루어지는 전환이 지원됩니다.

Kubernetes 부 버전을 다운그레이드할 위험이 있기 때문에 Regular에서 Stable로의 마이그레이션과 같은 다운그레이드는 할 수 없습니다. 마찬가지로 Stable에서 Rapid로의 마이그레이션과 같은 단일 부 버전 2개 이상의 업그레이드는 지원되지 않습니다.

새 출시 채널을 선택하려면 원하는 channel클러스터 출시 채널을 업데이트합니다.

새 출시 채널을 선택할 수 없는 경우에는 원하는 채널에서 새 클러스터를 만들고 워크로드를 마이그레이션하는 것이 좋습니다.

출시 채널에서 구독 취소

채널 구독을 취소하는 경우 클러스터의 노드 풀은 출시 채널을 사용 중지한 후에도 계속 자동 업그레이드 및 자동 복구가 사용 설정된 상태로 유지됩니다.

구독을 취소하려면 channelNone으로 클러스터 출시 채널을 업데이트합니다.

클러스터 출시 채널 업데이트

기존 클러스터의 출시 채널 속성을 수정하려면 다음 명령어를 실행합니다.

gcloud container clusters update cluster-name \
    --release-channel channel

다음을 바꿉니다.

  • cluster-name: 클러스터 이름입니다.
  • channel: rapid, regular, stable 또는 None 중 원하는 출시 채널입니다.

주의사항

출시 채널을 사용할 때는 다음 사항에 유의하세요.

신속 채널 클러스터와 알파 클러스터의 차이점

신속 출시 채널을 사용하여 만든 클러스터는 알파 클러스터가 아닙니다. 차이점은 다음과 같습니다.

  • 출시 채널을 사용하는 클러스터는 업그레이드할 수 있으며, 자동 업그레이드를 사용하도록 설정되고 이를 사용 중지할 수 없습니다. 알파 클러스터는 업그레이드할 수 없습니다.
  • 출시 채널을 사용하는 클러스터는 만료되지 않습니다. 알파 클러스터는 30일 후에 만료됩니다.
  • Alpha Kubernetes API는 출시 채널을 사용하는 클러스터에서 사용 설정되지 않습니다.

업그레이드 대상 가져오기(샘플 스크립트)

다음 샘플 스크립트를 사용하여 클러스터의 업그레이드 대상을 검색할 수 있습니다. 스크립트는 다음 작업을 수행합니다.

  • get-server-config API를 사용하여 각 출시 채널의 최신 유효 버전을 가져옵니다.
  • 클러스터의 제어 영역과 노드 풀의 현재 버전을 확인합니다. 현재 버전이 최신 유효 버전보다 오래된 경우 스크립트는 커스텀 업그레이드 조정(제어 영역 다음 노드 풀)을 시작합니다. 클러스터가 출시 채널을 사용하지 않는 경우 스크립트는 유효한 최신 정식 버전을 확인합니다.

샘플 스크립트: 클러스터 업그레이드 대상 검색

#!/bin/bash

# semver_lt checks whether the first semver is less than the second semver.
# It returns 1 if it is less than, and 0 otherwise.
semver_lt() {
    # Get the smaller version by sorting them in ascending semver
    # and grabbing the first line.
    smaller=$(printf "$1\n$2" | sort -V | head -n1)
    if [[ ${1} == "${smaller}" && ${1} != ${2} ]]; then
            return 1
    fi
    return 0
}

# get_latest_valid gets the latest valid version for a release channel.
get_latest_valid() {
        channel=$1
        echo $(gcloud container get-server-config \
        --format="table(channels:format='table(channel,validVersions)')" |\
        grep ${channel} | cut -d"'" -f 2)
}

upgrade_master() {
    echo "Cluster $1 needs to upgrade to $2."
    # Actuate master upgrade.
}

upgrade_np() {
    echo "Node pool $1/$2 needs to upgrade to $3."
    # Actuate node pool upgrade.
}

# Get the latest valid channel versions from server-config.
stable_target=$(get_latest_valid "STABLE")
regular_target=$(get_latest_valid "REGULAR")
rapid_target=$(get_latest_valid "RAPID")
echo "stable version from gcloud: ${stable_target}"
echo "regular version from gcloud: ${regular_target}"
echo "rapid version from gcloud: ${rapid_target}"

# List the clusters by name, master version, zone, and release channel.
clusters=$(gcloud container clusters list \
  --format="table[no-heading](name,master_version(),zone,release_channel.channel)")

IFS=$'\n'
for cluster in ${clusters}
do
    echo ""
    cname=$(printf "${cluster}" | awk '{print $1}')
    master_version=$(printf "${cluster}" | awk '{print $2}')
    zone=$(printf "${cluster}" | awk '{print $3}')
    channel=$(printf "${cluster}" | awk '{print $4}')

    # Determine the target version (default to latest valid stable version).
    target=${stable_target}
    case ${channel} in
        "RAPID")
            target=${rapid_target}
            ;;
        "REGULAR")
            target=${regular_target}
            ;;
        "STABLE")
            target=${stable_target}
            ;;
        esac

    # Check if the master needs to upgrade to the target version.
    semver_lt "${master_version}" "${target}"
    need_upgrade=$?
    if [[ ${need_upgrade} -eq 1 ]]; then
        upgrade_master ${cname} ${target}
    else
        echo "Cluster ${cname} does not need to upgrade."
    fi

    # Then check if the cluster's node pools need to upgrade too.
    nps=$(gcloud container node-pools list --cluster ${cname} --zone ${zone} \
            --format="table[no-heading](name,version)")
    for np in ${nps}
    do
        np_name=$(printf "${np}" | awk '{print $1}')
        np_version=$(printf "${np}" | awk '{print $2}')

        semver_lt "${np_version}" "${target}"
        need_upgrade=$?
        if [[ ${need_upgrade} -eq 1 ]]; then
            upgrade_np ${cname} ${np_name} ${target}
        else
            echo "Node pool ${np_name} does not need to upgrade."
        fi
    done
done

다음 단계