[Cloud Native] Introdução ao Helm no Kuberneter para praticar

 

introdução

Helm é uma ferramenta de gerenciamento de pacotes para k8s. Usando o helm, você pode implantar e atualizar aplicativos k8s de uma forma mais simplificada e sistemática.

helm é um projeto graduado da CNCF, e a comunidade também é bastante ativa.   Você pode encontrar muitos gráficos de helm prontos em https://artifacthub.io/ , que podem ser usados ​​no ambiente de produção com pequenas modificações, o que é muito conveniente.

Este artigo apresentará os principais conceitos do leme e usará um exemplo para ajudá-lo a entendê-lo de forma mais intuitiva. Você pode seguir este exemplo e operá-lo. Acredito que será muito útil para entender o leme.

(Endereço do tutorial: tutorial nativo da nuvem )

o que é leme

Primeiro contato com o leme

Leme em grego significa: leme; volante. Diz-se que o fundador do Helm, Mutt Butcher, o encontrou pesquisando nos manuais de navegação para encontrar uma palavra que corresponda ao tema Kubernetes.

Endereço do site oficial: https://helm.sh/

A explicação oficial é: Helm é a melhor maneira de encontrar, compartilhar e usar software desenvolvido para Kubernetes. Isso significa que Helm é a melhor maneira de encontrar, compartilhar e construir aplicativos em Kubernetes.

Esta afirmação certamente não é um exagero. Helm é na verdade uma ferramenta de gerenciamento de pacotes para aplicativos Kubernetes, usada para gerenciar gráficos (um recurso de pacote de instalação pré-configurado), um pouco semelhante ao APT do Ubuntu e YUM no CentOS. Portanto, o surgimento do leme resolve o problema da falta de recursos de gerenciamento de aplicativos k8s.

Além disso, o leme também é uma ponte entre desenvolvimento e operações. Quando o pessoal de operação e manutenção usa o leme, por um lado, eles não precisam entender um grande número de vários elementos k8s no gráfico, e só precisam configurar um pequeno número de variáveis ​​​​de ambiente para instalar; por outro lado, o leme também oferece oportunidades de aprendizado para o pessoal júnior de operação e manutenção. Eles podem aprender e compreender vários elementos do k8s no gráfico, para que possam dominar o k8s mais rapidamente.

A seguir lista algumas informações importantes sobre o leme

  • Helm 3 foi lançado em 13 de novembro de 2019;
  • Graduado pela CNCF em 30 de abril de 2020;
  • Existem atualmente cerca de 1,90.000 estrelas no GitHub;
  • Versão mais recente: 3.5.0;
  • Autor principal: Mutt Butcher, atualmente na Microsoft, com foco principalmente na área de DevOps.

Comparação entre helm e apt

Quando somos expostos a algo novo, a melhor maneira de aprender é fazer analogias com coisas com as quais estamos familiarizados, o que pode nos ajudar a compreender rapidamente os conceitos básicos.

Como Mutt Butcher fez muitas referências aos designs do apt e do homebrew ao projetar o helm, aqui usamos o apt para comparação para ajudar todos a entender melhor o helm.

Como pode ser visto na tabela abaixo, a comparação conceitual entre helm e apt. Acredito que os alunos familiarizados com o apt possam rapidamente ter uma compreensão preliminar do helm.

visão geral do leme

Depois de ter uma impressão preliminar do helm, vamos fazer uma visão geral do helm, incluindo uma breve compreensão dos principais conceitos, processos operacionais, comandos comuns e gráficos do helm. Dessa forma, estaremos melhor preparados para nosso estudo aprofundado subsequente e estudo do leme Pratique o trabalho de um programa para evitar perder a floresta pelas árvores.

três conceitos principais de leme

  • Gráfico : Gráfico é o pacote helm, que contém todos os elementos para executar um aplicativo k8s, como serviço, implantação, configmap, serviceaccount, rbac, etc. e finalmente renderizado. Produza um arquivo yaml que pode ser executado por k8s;
  • repositório : O repositório é uma coleção de gráficos que facilita o compartilhamento e distribuição. Abaixo estão os endereços do armazém do site oficial e do armazém Alibaba Cloud. Você pode entrar e dar uma olhada;
  • release : release é uma instância em execução do gráfico helm no kubernetes. Você pode instalar o mesmo gráfico várias vezes com nomes de versão diferentes. Por exemplo, quando várias instâncias do Redis são necessárias no cluster, você pode usar arquivos de configuração diferentes para instalar o gráfico do Redis.

processo de execução do leme

Recomendo que você leia a imagem abaixo várias vezes, pode-se dizer que se você dominar esta imagem, terá dominado o núcleo do leme.

Como você pode ver na figura abaixo, o processo principal de execução do helm é dividido nas seguintes etapas:

  • Obtenha o gráfico do armazém de gráficos;
  • Os usuários configuram seu próprio arquivo de valores e modificam os valores de acordo com seu próprio ambiente operacional;
  • O arquivo de valores padrão e o arquivo de valores do usuário serão mesclados para formar o arquivo de valores finais;
  • Use o arquivo de valores finais para renderizar o modelo de gráfico para formar um yaml que pode ser executado pelo kubernetes;
  • Chame kube apply para enviar yaml ao kubernetes

Aqui, precisamos prestar atenção à fronteira entre desenvolvedores de gráficos e usuários. É justamente porque ao cruzar essa fronteira, da necessidade de entender um grande número de configurações para a necessidade de entender apenas uma pequena quantidade de configurações, que o trabalho das operações torna-se mais fácil, o que também é o núcleo da filosofia de design do helm. Depois de ler o artigo inteiro, mesmo que você não se lembre de nada além desta foto, você ganhará muito.

Comandos comumente usados ​​do Helm

Ao usar o helm, você pode usar gráficos desenvolvidos por terceiros ou desenvolver gráficos você mesmo. A seguir estão os comandos comuns usados ​​em ambos os casos. Para comandos mais detalhados, você pode usar a ajuda do helm para visualizá-lo após a instalação do helm ou visualizar a documentação oficial.

Use gráficos desenvolvidos por terceiros

Antes da implantação

  • repo: adicionar, listar, remover, atualizar e indexar repositórios de gráficos
  • pesquisa: pesquise uma palavra-chave em gráficos

Após a implantação

  • instalar: instalar um gráfico
  • lista: lista lançamentos
  • status: exibe o status da versão nomeada
  • atualizar: atualizar uma versão
  • rollback: reverter uma versão para uma revisão anterior
  • desinstalar: desinstalar uma versão

Desenvolva você mesmo os gráficos

  • lint: examine um gráfico para possíveis problemas
  • pacote: empacota um diretório gráfico em um arquivo gráfico
  • push: empurra o gráfico do leme para o chartmuseum
  • push de gráfico: envia o gráfico do helm para o repositório OCI

gráfico

Pode-se dizer que gráfico é o conceito mais importante do leme. Há muito o que aprender sobre gráficos. Aqui está uma enumeração.

  • Desenvolvimento de gráficos : refere-se principalmente ao uso de tecnologia de modelo para desenvolver um gráfico, que será apresentado em detalhes posteriormente;
  • Ganchos de gráfico : No ciclo de vida do gráfico, alguns ganchos são fornecidos para facilitar algumas pré ou pós-operações.
    • Antes de instalar o gráfico, crie o Secret exigido pela aplicação
    • Antes de instalar o gráfico, faça backup do banco de dados
    • Depois que o gráfico for desinstalado, faça algum trabalho de limpeza
  • teste de gráfico : depois de instalar um gráfico, como saber se a versão está funcionando normalmente? O teste de gráfico fornece uma maneira de testar para verificar se seu aplicativo está funcionando normalmente, como:
    • Verifique se o aplicativo mysql pode se conectar normalmente e aceitar solicitações
    • Verifique se os serviços podem realizar o balanceamento de carga normalmente
  • Gráfico de biblioteca : Um gráfico que existe na forma de uma biblioteca e pode ser compartilhado entre gráficos de aplicativos para evitar duplicação de lógica; semelhante a uma biblioteca pública em uma linguagem de programação;
  • Verificação de gráficos : Baseado em PKI, GnuPG e outras tecnologias, o pacote helm é assinado para garantir segurança durante a transmissão ou liberação;
  • Suporte OCI (Open Container Initiative, especificação de publicação de contêiner) : introduzido o helm 3 (EXPERIMENTAL), que pode enviar gráficos para armazéns que suportam OCI, como porto, nexus, etc.
  • 保存chart:helm chart save kubeedge/some-harbor-repo/kubeedge-cloud-chart:1.0.0
  • 登录repo: login do registro do Helm  https://some-harbor-repo
  • 推送chart:helm chart push some-harbor-repo/kubeedge-cloud-chart:1.0.0
  • Características avançadas
    • pós-renderização: fornece um mecanismo para operar e configurar manifestos antes da instalação do helm; geralmente usado em conjunto com kustomize. por exemplo:
      • Insira sidecar durante a instalação para adicionar funcionalidade à implantação
      • Altere a configuração dos manifestos sem modificar o gráfico original.

Isso pode não ser muito fácil de entender. Aqui está um exemplo. Suponha que eu precise fazer uma pequena quantidade de modificações em um gráfico de terceiros para atender aos meus requisitos de implantação. Em seguida, posso bifurcar uma cópia do gráfico e fazer modificações no mas desta forma preciso de algum trabalho de manutenção adicional. Quando este gráfico for atualizado, ainda preciso fazer o trabalho de mesclagem, o que é muito inconveniente.

Portanto, a pós-renderização fornece um mecanismo: você só precisa usar um script escrito por pós-renderização+kustomize para fazer algumas alterações personalizadas no conteúdo do gráfico original antes da instalação, evitando trabalhos de manutenção adicionais. Como mostrado abaixo. (kustomize é uma ferramenta de configuração de código aberto que pode facilmente fazer algumas modificações personalizadas na configuração existente do aplicativo k8s. Endereço do site oficial: https://kustomize.io/ )

  • go sdk: helm fornece golang sdk para fácil uso na linguagem go;
  • back-end de armazenamento: Especifique o tipo de armazenamento das informações de lançamento, o padrão é secreto; você pode especificar configmap, secret e postgreSQL; a figura a seguir mostra como as informações da versão do helm são armazenadas em segredo.

  • plugin helm: suporta a expansão das funções do helm na forma de plug-ins.

demonstração do leme

Vamos usar uma demonstração para ter uma compreensão mais intuitiva do leme. Nesta demonstração, nosso objetivo é implantar um cluster Redis, incluindo as seguintes etapas:

  • Instalar o leme
  • Use helm install redis de nó único
  • Use a atualização do helm para atualizar para mestre-escravo
  • Use a reversão do leme para reverter para o modo de nó único

Passo 1: Instale o helm (via apt)

A seguir está o comando para instalar o helm através do apt. Para outros métodos de instalação, consulte o site oficial:

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add – 
sudo apt-get install apt-transport-https --yes 
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list 
sudo apt-get update 
sudo apt-get install helm=3.4.2-1

Etapa 2: adicione o warehouse e encontre o gráfico Redis

  • Adicionar repositório: helm repo add stable  https://charts.helm.sh/stable
  • Veja os repositórios que foram adicionados: helm repo list
  • Quais gráficos existem no repositório de pesquisa: helm search repo stable
  • Atualize a lista de repositórios localmente: helm repo update
  • Pesquisar redis: helm search repo redis
  • Ver detalhes do gráfico redis: helm show chart stable/redis
  • Ver valores redis (valores: equivalentes ao arquivo de configuração do gráfico): helm mostra valores estáveis/redis

Etapa 3: instalar/atualizar/reverter/desinstalar

  • Crie um arquivo de configuração mestre único denominado only-master.values
## Cluster settings   
cluster:     
  enabled: false

## Redis pod Security Context   
securityContext:     
  enabled: false

## Use password authentication   
usePassword: true   

## Redis password (both master and slave)   
password: "admin"

## Redis Master parameters   
master:     
  persistence:       
    enabled: false 

Então --dry-run para ver se há algum problema com o arquivo yaml gerado:

helm install redis-demo stable/redis -f ./only-master.values --dry-run

Se não houver problemas, prossiga para a instalação real

helm install redis-demo stable/redis -f ./only-master.values

Após a instalação ser bem-sucedida, você pode fazer login no redis para operação e verificação adicional:

redis-cli -h `kubectl get svc redis-demo-master -o=jsonpath="{.spec.clusterIP}"` -a admin
set name zhangsan  
get name
info replication
# 可以看到这时候没有slave连接 
  • Crie um arquivo de configuração mestre-escravo chamado master-slave.values
## Cluster settings   
cluster:     
  enabled: true     
  slaveCount: 1

securityContext:     
  enabled: false

## Use password authentication   
usePassword: true   
password: "admin"

## Mount secrets as files instead of environment variables   
usePasswordFile: false

## Redis Master parameters   
master:     
  persistence:       
    enabled: false

## Redis Slave properties   
slave:     
  persistence:       
  enabled: false

--dry-run para ver se há algum problema com o arquivo yaml gerado; como já existe uma versão do redis-demo no sistema, use upgrade para atualizar:

helm upgrade redis-demo stable/redis -f ./master-slave.values --dry-run   helm upgrade redis-demo stable/redis -f ./master-slave.values

Verifique se o escravo foi instalado e sincronizado com sucesso

redis-cli -h `kubectl get svc redis-demo-slave -o=jsonpath="{.spec.clusterIP}"` -a admin   
get name
  • Finalmente, volte para o modo mestre único
  • Ver histórico de implantação: histórico do helm redis-demo
  • Reverta para a versão master única correspondente: helm rollback redis-demo REVISION
  • A reconexão com o escravo falhou:
redis-cli -h `kubectl get svc redis-demo-slave -o=jsonpath="{.spec.clusterIP}"` -a admin
  • Somente o mestre pode conectar:
redis-cli -hkubectl get svc redis-demo-master -o=jsonpath="{.spec.clusterIP}"` -a admin
# 输入命令测试一下
get age
  • Desinstalar redis-demo
helm uninstall redis-demo 

Explicação detalhada do gráfico

A estrutura geral

A imagem abaixo é a estrutura de diretórios do gráfico do leme do wordpress. A explicação de cada elemento é a seguinte:

  • Chart.yaml : informações do gráfico, incluindo informações de versão do gráfico, informações de descrição, dependências, etc.
  • LICENÇA : (opcional) informações de LICENÇA do gráfico
  • README.md : (opcional) arquivo de descrição do gráfico
  • valores.yaml : informações de configuração padrão do gráfico
  • valores.schema.json : (opcional) meta-informação de informações de configuração de valores (tipo de campo, descrição de campo, dependências entre campos, etc.), formato json
  • gráficos : outros gráficos dependentes
  • crds : definições de recursos personalizados
  • modelos : modelos de implantação, combinados com valores.yaml renderizarão o arquivo yaml do Kubernetes
  • templates/NOTES.txt : (opcional) instruções de instalação

Gráfico.yaml

Chart.yaml é equivalente às instruções do gráfico, descrevendo as funções, versões, dependências, palavras-chave e outras informações do gráfico.

A imagem abaixo é Chart.yaml do redis

  • apiVersion: versão da API do gráfico, atualmente o helm 3 está corrigido para v2
  • nome: nome do gráfico
  • descrição: descrição do gráfico
  • tipo:
    • aplicação: gráfico implantável
    • biblioteca: não implementável, lógica comum pode ser compartilhada entre gráficos diferentes
  • versão: versão do gráfico
  • appVersion: a versão do aplicativo no gráfico, como a versão redis
  • kubeVersion: versão k8s compatível
  • palavras-chave: palavras-chave, usadas na pesquisa do Helm
  • dependências: gráficos dependentes
  • gerentes: desenvolvedores de gráficos
  • ícone: ícone do gráfico, será exibido no hub

modelo

O modelo armazena o conteúdo principal do gráfico e existe principalmente na forma de modelo.Variáveis, instruções de controle, funções, etc. podem ser usadas no modelo, e as funções são muito ricas.

hub de gráficos e repositório de gráficos

Capacete CICD

Você pode usar o helm para construir um pipeline CICD. Aqui está um exemplo de CICD:

Como você pode ver, todo o CICD é dividido em três etapas. Claro, isso é apenas um exemplo. Os desenvolvedores podem ajustar esta etapa de acordo com as necessidades reais:

  • estágio 1 : depois que os desenvolvedores codificam e passam no autoteste, eles enviam a ramificação do recurso, acionam a construção do pipeline, geram imagens do docker e gráficos do helm com as mesmas tags e implantam o gráfico do helm.
  • stage2 : o revisor analisa o código. Depois de passar no teste, mescle-o no branch de lançamento, modifique o número da versão, gere a imagem do docker e o gráfico do leme da nova tag e implante-o no cluster.
  • estágio 3 : Teste, produto, cliente, após passar na verificação na preparação, implantar diretamente o gráfico do leme no ambiente de produção

Quais são as mudanças do helm v2 para v3?

Como você pode ver na imagem abaixo, a maior mudança é a remoção do leme. O principal motivo é que o k8s já oferece suporte ao RBAC e um componente "redundante" como o leme não é mais necessário para o gerenciamento de permissões. Várias outras modificações são mostradas na imagem abaixo., para obter detalhes, consulte a documentação oficial.

Acho que você gosta

Origin blog.csdn.net/weixin_53678904/article/details/132357481
Recomendado
Clasificación