[Cloud Native] ferramenta de gerenciamento de pacotes de aplicativos kubernetes Helm

 

 

Leme

  • O que é Helm

  • Instalar o Helm

  • conceitos importantes

  • Usando Helm

1. Introdução

Endereço do site oficial: Helm

Helm é uma ferramenta de gerenciamento de pacotes de aplicativos Kubernetes que permite gerenciar e implantar facilmente aplicativos Kubernetes. Helm simplifica a implantação e o gerenciamento de aplicativos Kubernetes usando modelos predefinidos chamados Gráficos. O gráfico contém um conjunto de definições de objetos do Kubernetes que podem descrever a implantação completa e os requisitos de recursos de um aplicativo, incluindo implantação, serviço, ConfigMap, segredo, etc. Usando o Helm, você pode facilmente instalar, atualizar, desinstalar e reverter aplicativos Kubernetes.

Ao mesmo tempo, Helm também fornece algumas funções convenientes, como gerenciamento de dependências, variáveis ​​globais, renderização condicional, etc., que podem ajudá-lo a gerenciar melhor a implantação de aplicativos. O Helm tem dois componentes principais: cliente Helm (helm) e servidor Helm (Tiller). O cliente Helm pode ser executado localmente, enquanto o Tiller é executado no cluster Kubernetes e é responsável por converter gráficos em objetos Kubernetes.

2 instalação

Endereço para download: Lançamentos · helm/helm · GitHub

Cada versão do Helm fornece versões binárias para vários sistemas operacionais, que podem ser baixadas e instaladas manualmente.

  1. Baixe a versão necessária

  2. descompacte ( tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)

  3. Encontre o programa no diretório descompactado helme mova-o para o diretório necessário ( mv linux-amd64/helm /usr/local/bin/helm)

  4. Adicionar repositório: helm repo add bitnami https://charts.bitnami.com/bitnami

  5. Verifique a instalação: helm help.

3 conceitos importantes

  • O gráfico representa o pacote Helm. Ele contém todas as definições de recursos necessárias para executar aplicativos, ferramentas ou serviços dentro de um cluster Kubernetes. Você pode pensar nisso como o equivalente Kubernetes da fórmula Homebrew, Apt dpkg ou Yum RPM.

  • Repositório é um local usado para armazenar e compartilhar gráficos. É como a rede de repositórios CPAN do Perl ou o repositório de pacotes do Fedora , exceto que é para pacotes Kubernetes.

  • Release é uma instância de um gráfico em execução em um cluster Kubernetes. Geralmente, um gráfico pode ser instalado diversas vezes no mesmo cluster. Cada instalação cria uma nova versão . Tomando o gráfico MySQL como exemplo, se quiser executar dois bancos de dados em seu cluster, você pode instalar o gráfico duas vezes. Cada banco de dados terá seu próprio lançamento e nome de lançamento .

4 uso

4.1 Gráficos de pesquisa

Helm vem com um poderoso comando de pesquisa que pode ser usado para pesquisar em duas fontes:

  • helm search hubEncontre e liste gráficos de leme no Artifact Hub . Existem vários repositórios diferentes armazenados no Artifact Hub.

  • helm search repoProcure nos repositórios que você adicionou (usou helm repo add) em seu cliente helm local. Este comando pesquisa com base em dados locais e não requer conexão com a Internet.

4.2 Instalação

Use helm installo comando para instalar um novo pacote helm. O método mais simples de uso requer apenas a passagem de dois parâmetros: o nome da versão que você nomeou e o nome do gráfico que deseja instalar.

[root@k8s-node1 ~]# helm install nginx bitnami/nginx
NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4
** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:
    nginx.kube-system.svc.cluster.local (port 80)
To access NGINX from outside the cluster, follow the steps below:
1. Get the NGINX URL by running these commands:
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'
    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

Nota: Um novo objeto de lançamento é criado durante a instalação do gráfico. A versão acima é chamada de nginx. (Se você quiser que o Helm gere um nome, remova o nome de publicação e use --generate-name.)

sequência de instalação do helm: Helm | Usando o Helm


4.3 Ver lista

Você pode helm listver todas as versões implantadas atualmente por meio do comando:

[root@k8s-node1 ~]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
nginx   kube-system     1               2023-04-05 07:34:48.421708425 -0400 EDT deployed        nginx-13.2.34   1.23.4 

4.3 Ver status

Você pode usar helm statuspara rastrear o status da versão ou reler as informações de configuração:

[root@k8s-node1 ~]# helm status nginx
NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4
** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:
    nginx.kube-system.svc.cluster.local (port 80)
To access NGINX from outside the cluster, follow the steps below:
1. Get the NGINX URL by running these commands:
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'
    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

4.4 Desinstalar

[root@k8s-node1 ~]# helm uninstall nginx
release "nginx" uninstalled

5 Instale o gráfico personalizado

O método de instalação acima usará apenas as opções de configuração padrão do gráfico. Muitas vezes precisamos customizar gráficos para especificar a configuração que desejamos.

5.1 Obtenha gráficos personalizados

[root@k8s-node1 ~]# helm criar aplicativo

注意: 当前目录中会出现一个 nginx-xxx.tgz 文件 这个文件就是 charts 的包。

5.2 Ver estrutura de diretórios do gráfico

app/
  Chart.yaml
  values.yaml
  charts/
  templates/
  ...
  • templates/O diretório contém arquivos de modelo. Quando o Helm avalia o gráfico, todos os arquivos são enviados para templates/o diretório por meio do mecanismo de renderização de modelo. Os resultados do modelo são então coletados e enviados ao Kubernetes.

  • values.yamlO arquivo também é importado para o modelo. Este arquivo contém os valores padrão do gráfico . Esses valores serão sobrescritos quando o usuário executar helm installou .helm upgrade

  • Chart.yamlO arquivo contém uma descrição do gráfico. Você pode acessá-lo a partir do modelo. charts/Os diretórios podem conter outros gráficos (chamados de subgráficos ).

5.3 Modelo personalizado

$ rm -rf mychart/templates/*
  • Escreva namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: {
   
   { .Chart.Name }}
  namespace: {
   
   { .Values.namespace }}
  • Escreva implantação.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {
   
   { .Chart.Name}}
  namespace: {
   
   {.Values.namespace}}
  labels:
    app: {
   
   { .Chart.Name}}
spec:
  replicas: {
   
   { .Values.replicas }}
  template:
    metadata:
      name: {
   
   { .Chart.Name}}
      labels:
        app: {
   
   { .Chart.Name}}
    spec:
      containers:
        - name: {
   
   { .Chart.Name}}
          image: {
   
   { .Values.image}}
          imagePullPolicy: {
   
   {.Values.imagePullPolicy}}
          ports:
            - containerPort: {
   
   {.Values.containerPort}}
      restartPolicy: {
   
   { .Values.restartPolicy }}
  selector:
    matchLabels:
      app: {
   
   { .Chart.Name}}
  • Escreva service.yml

apiVersion: v1
kind: Service
metadata:
  name: {
   
   {.Chart.Name}}
  namespace: {
   
   {.Values.namespace}}
spec:
  selector:
    app: {
   
   {.Chart.Name}}
  ports:
    - port: {
   
   {.Values.service.port}}
      targetPort: {
   
   {.Values.containerPort}}
  type: {
   
   { .Values.service.type }}
  • Escreva Chart.yml

apiVersion: v2
name: app
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"
  • Escreva valores.yaml

replicas: 1
namespace: app
image: nginx:1.19
imagePullPolicy: IfNotPresent
restartPolicy: Always
containerPort: 80
service:
  port: 80
  type: ClusterIP

5.4 Verifique se há erros

$ aplicativo helm lint

5.5 Empacotando gráficos personalizados

$ aplicativo de pacote helm

5.6 Gráfico de instalação

$ helm instalar aplicativo myapp-1.tgz

Guess you like

Origin blog.csdn.net/weixin_53678904/article/details/132375509