Canais de lançamento

Neste tópico, apresentamos os canais de lançamento, que fornecem as práticas recomendadas do Google Kubernetes Engine (GKE) para o controle de versão e o upgrade dos clusters do GKE.

Visão geral

O Kubernetes lança atualizações com frequência para fornecer atualizações de segurança, corrigir problemas conhecidos e introduzir novos recursos. Os canais de lançamento oferecem aos clientes a capacidade de equilibrar estabilidade e o conjunto de recursos da versão implantada no cluster.

Quando você inscreve um novo cluster em um canal de lançamento, o Google gerencia automaticamente a versão e a cadência do upgrade para o cluster e os respectivos pools de nós. Todos os canais oferecem versões compatíveis do GKE e são considerados de disponibilidade geral, embora os recursos individuais nem sempre sejam de disponibilidade geral, conforme marcado. Os lançamentos do Kubernetes nesses canais são lançamentos oficiais e incluem as APIs Kubernetes Beta e de disponibilidade geral (conforme marcado). As novas versões do Kubernetes são lançadas inicialmente no Canal rápido e, com o tempo, são promovidas para o Canal normal e estável. Isso permite que você inscreva seu cluster em um canal que atenda às suas necessidades de negócios, estabilidade e funcionalidade.

Quais canais estão disponíveis?

Os canais de lançamento a seguir estão disponíveis. Cada canal oferece um equilíbrio entre disponibilidade de recursos e rotatividade de atualizações. Cada canal tem uma barra de qualificação diferente, mas todos os canais oferecem versões de teste de disponibilidade geral do Kubernetes.

Channel Disponibilidade da nova versão do Kubernetes Propriedades
Rápido Várias semanas após o lançamento de disponibilidade geral do código aberto Instale a versão mais recente do Kubernetes o quanto antes e use os novos recursos do GKE assim que estiverem disponíveis para todos os usuários. Seu cluster é frequentemente atualizado para permanecer na versão de patch mais recente disponível e fornece recursos mais recentes do Kubernetes.
Normal (padrão) Dois a três meses após o lançamento no formato rápido Acesse os recursos do GKE e do Kubernetes de maneira razoável logo em seguida, mas use uma versão que seja qualificada por um período maior. Oferece um equilíbrio de disponibilidade e estabilidade de recurso e é o que recomendamos para a maioria dos usuários.
Estável De dois a três meses após o lançamento no formato normal. Prioriza a estabilidade em relação à nova funcionalidade. Mudanças e novas versões neste canal são implantadas por último, depois de serem validadas nos canais rápido e regular, o que permite ainda mais tempo para validação.

Quando você inscreve um cluster em um canal de lançamento, esse cluster é atualizado automaticamente quando uma nova versão é disponibilizada nesse canal.

Quando uma versão secundária tiver acumulado o uso e demonstrado estabilidade no Canal rápido, ela será promovida para o Canal normal. Por fim, a versão secundária é promovida para o Canal estável, que recebe apenas atualizações de alta prioridade. Cada promoção sinaliza um nível gradual de estabilidade e preparação para a produção, com base no desempenho observado dos clusters que executam essa versão.

Patches de segurança críticos são entregues a todos os canais de lançamento para proteger seus clusters e a infraestrutura do Google.

As programações de lançamento exatas dependem de vários fatores, como o lançamento de código aberto e a programação de patches. Por isso, estão sujeitas a alterações. Para acompanhar as últimas informações, revise as notas da versão do GKE ou inscreva-se no feed RSS do seu canal.

Quais versões estão disponíveis em um canal?

Cada canal de lançamento oferece uma versão padrão e um conjunto de versões disponíveis para esse canal, permitindo que você qualifique a operabilidade de suas cargas de trabalho com novas versões disponíveis antes de fazer o upgrade do ambiente de produção. Essas versões atingiram a barra de qualificação para esse canal específico.

  • Novas versões de patch ficam disponíveis uma semana antes de se tornarem padrão.
  • Os lançamentos secundários são disponibilizados quatro semanas antes de se tornarem padrão.

O GKE recomenda testar as versões disponíveis para reduzir a interrupção relacionada ao upgrade. A assinatura de um ambiente de pré-produção para receber todas as versões disponíveis em um canal é uma dessas abordagens. Caso mais tempo seja necessário para testar ou validar, o GKE recomenda o uso de janelas de exclusão para adiar o upgrade automático.

O GKE automaticamente faz upgrade gradual de clusters para a versão padrão. Se for necessário mais controle sobre o processo de upgrade, recomendamos fazer upgrade antecipadamente para uma versão disponível. O processo de upgrade automático do GKE não modifica os recursos do cluster quando eles têm uma versão igual ou superior à meta do upgrade automático. Clusters ou nós podem ser manualmente atualizados com antecedência para pular o processo de upgrade automático.

Para visualizar as versões padrão e disponíveis dos canais de lançamento, execute o seguinte comando, substituindo compute-zone pela zona do Compute:

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

Como ficar por dentro das novidades de um canal

Para saber quais são as novidades de um canal de lançamento, confira as notas da versão. Há notas de versão separadas para cada canal de lançamento, além das notas da versão gerais.

Canal de lançamento Notas da versão
Canal rápido HTML ou Atom feed.
Canal normal HTML ou Atom feed.
Canal estável HTML ou Atom feed.

Qual canal devo usar?

Os canais incluem apenas versões de disponibilidade geral do Kubernetes, e cada canal representa um nível diferente de qualidade e maturidade das versões do Kubernetes e do GKE. O diagrama a seguir ilustra o ciclo de adoção dos canais de lançamento:

Ciclo de adoção dos canais de lançamento

Recomendamos o uso do Canal rápido para cargas de trabalho que dependam de APIs e recursos mais recentes do Kubernetes, bem como para ter acesso antecipado e testar e validar novas versões antes que a versão mature e seja promovida para os Canais normal e estável.

Para as cargas de trabalho de produção que exigem maturidade sobre a funcionalidade mais recente, recomendamos o uso do canal Regular (padrão) ou do Canal estável.

  • Para acompanhar atentamente novos recursos, use o Canal normal, que oferece equilíbrio entre estabilidade e atualização da versão do Kubernetes OSS.
  • Se o requisito for maturidade, principalmente para clusters de produção, use o Canal estável.

O GKE realiza upgrade de clusters para uma versão mais recente que atenda à barra de qualidade do canal. No entanto, recomendamos fazer upgrade dos clusters com antecedência, porque isso oferece:

  • melhor controle dos upgrades e alinhamento com seu horário de trabalho;
  • melhor previsibilidade, já que o GKE pula os clusters de upgrade automático que atendam ao destino da versão, ou seja, clusters que foram atualizados manualmente para a próxima versão de destino. Os nós são atualizados automaticamente para a versão recomendada no canal selecionado para se alinhar à versão do plano de controle (mestre) e proteger você contra vulnerabilidades e desvio da versão incompatível.

Como registrar um cluster em um canal de lançamento

É possível inscrever um cluster novo ou atual em um canal de lançamento.

Como registrar novos clusters

É possível criar e inscrever um novo cluster em um canal de lançamento usando gcloud ou o Console do Google Cloud.

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Clique no botão Criar cluster.

  3. Em Versão principal, selecione Canal de lançamento.

  4. Na lista suspensa Canal de lançamento, selecione um canal de lançamento para registrar o cluster.

  5. Continue criando o cluster como quiser.

  6. Clique em Criar.

gcloud

Para criar e registrar um cluster em um canal de lançamento, execute o seguinte comando:

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

Substitua:

  • cluster-name: o nome do novo cluster;
  • compute-zone: a zona do Compute do cluster;
  • channel: o tipo de canal de lançamento: rapid, regular ou stable;
  • additional-flags: quaisquer outras sinalizações que devem ser especificadas ao criar seu cluster. Para ver a lista completa de sinalizações opcionais, consulte a documentação de gcloud container clusters create.

Como registrar clusters atuais

É possível inscrever um cluster atual em um canal de lançamento, desde que a versão do plano de controle do cluster possa fazer upgrade para o padrão do canal de lançamento. Isso significa que a versão padrão do canal de lançamento precisa ser igual ou no máximo uma versão secundária maior que a versão do plano de controle atual.

Para se inscrever, atualize o canal de lançamento do cluster para o channel desejado.

Como encontrar o canal do cluster

Determine o canal de lançamento do cluster usando gcloud ou o Console do Google Cloud.

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do Google Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Selecione o cluster desejado.

  3. Em "Detalhes do cluster", leia o valor no campo Canal de lançamento (por exemplo, "Canal normal").

gcloud

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

Substitua:

  • cluster-name: o nome do cluster.
  • compute-zone: a zona do Compute do cluster;

Como selecionar um novo canal de lançamento

A migração entre canais de lançamento é compatível com cenários limitados.

Uma transição que resulta em um único upgrade de versão secundária, como a migração de Estável para Normal, é compatível.

Os downgrades, como a migração de Normal para Estável, não são possíveis devido ao risco de downgrade em versões secundárias do Kubernetes. Da mesma forma, upgrades de mais de uma versão secundária, como a migração de Estável para Rápida, não são compatíveis.

Para selecionar um novo canal de lançamento, atualize o canal de lançamento do cluster para o channel desejado.

Se não for possível selecionar um novo canal de lançamento, recomendamos que você crie um novo cluster no canal desejado e migre suas cargas de trabalho.

Como cancelar o registro em um canal de lançamento

Se você cancelar a inscrição em um canal, os pools de nós do cluster continuarão com o upgrade e o reparo automáticos ativados, mesmo depois da desativação dos canais de lançamento.

Para cancelar a inscrição, atualize o canal de lançamento do cluster com um channel definido como Nenhum.

Como atualizar o canal de lançamento do cluster

Para editar a propriedade do canal de lançamento de um cluster, execute o comando a seguir:

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

Substitua:

  • cluster-name: o nome do cluster.
  • channel: o canal de lançamento desejado, que pode ser rapid, regular, stable ou None.

Advertências

Lembre-se das condições a seguir ao usar canais de lançamento.

Diferenças entre clusters de canais rápidos e clusters alfa

Os clusters criados usando o canal de lançamento rápido não são clusters Alfa. Veja as diferenças:

  • Os clusters que usam canais de lançamento podem ser atualizados, e o upgrade automático é ativado (e não pode ser desativado). Clusters alpha não podem receber upgrade.
  • Os clusters que usam canais de lançamento não expiram. Clusters Alfa expiram após 30 dias.
  • As APIs Alpha Kubernetes não estão ativadas em clusters que usam canais de lançamento.

Recuperar destinos de upgrade (exemplo de script)

É possível usar o script de amostra a seguir para recuperar os destinos de upgrade dos clusters. O script realiza as seguintes tarefas:

  • Extrai as versões válidas mais recentes de cada canal de lançamento usando a API get-server-config.
  • Verifica as versões atuais do plano de controle e do pool de nós do cluster. Se a versão atual for anterior à última válida, o script iniciará uma orquestração personalizada de upgrade (plano de controle e depois pools de nós). Se o cluster não usar canais de lançamento, o script verificará a versão estável mais recente.

Exemplo de script: recuperar destinos de upgrade de cluster

#!/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

A seguir