IBM Cloud Docs
Empacotando apps para reutilização em múltiplos ambientes com o Kustomize

Empacotando apps para reutilização em múltiplos ambientes com o Kustomize

Como parte de um aplicativo nativo da nuvem de doze fatores, você deseja manter a paridade dev-to-prod configurando um pipeline de desenvolvimento e entrega contínuos que usa uma fonte de base de código comum e controlada por versão. Em seus repositórios de base de código, você armazena seus arquivos de manifesto de configuração de recursos Kubernetes, geralmente no formato YAML. É possível usar o projeto do Kubernetes Kustomize para padronizar e customizar as implementações em vários ambientes.

Por exemplo, você pode configurar um arquivo kustomization YAML básico para declarar objetos Kubernetes, como implantações e PVCs, que são compartilhados em seus ambientes de desenvolvimento, teste e produção. Em seguida, você pode definir arquivos kustomization YAML separados que tenham configurações personalizadas para cada ambiente, como, por exemplo, mais réplicas em produção do que em teste. Esses arquivos YAML personalizados podem então se sobrepor ao arquivo YAML de base compartilhada, de modo que você possa gerenciar ambientes que são praticamente idênticos, exceto por algumas diferenças de configuração de sobreposição que você controla na fonte. Para obter mais informações sobre o site Kustomize, como um glossário e perguntas frequentes, consulte os documentos do site Kustomize.

Antes de Iniciar:

Para configurar arquivos de configuração com o Kustomize:

  1. Instale a ferramenta kustomize.

    • Para macOS, é possível usar o gerenciador de pacotes brew.
      brew install kustomize
      
    • Para Windows, é possível usar o gerenciador de pacote chocolatey.
      choco install kustomize
      
  2. Crie um diretório para seu app em um sistema de controle de versão, tal como Git.

    git init ~/<my_app>
    
  3. Crie a estrutura de repositório para o diretório kustomize base , diretório overlay e diretórios de ambiente, como preparação e produção. Nas etapas subsequentes, você configurará esses repositórios para uso com kustomize.

    mkdir -p ~/<my_app>/base &&
    mkdir -p ~/<my_app>/overlay &&
    mkdir -p ~/<my_app>/overlay/staging &&
    mkdir -p ~/<my_app>/overlay/prod
    

    Exemplo de estrutura de repositório

    .
    ├── base
    └── overlay
        ├── prod
        └── staging
    
  4. Configure o repositório base.

    1. Navegue para o repositório base.

      cd ~/<my_app>/base
      
    2. Crie um conjunto inicial de arquivos YAML de configuração do Kubernetes para a implementação do app. Você pode usar o wasliberty Exemplo de YAML para criar uma implantação, serviço, mapa de configuração e reivindicação de volume persistente.

    3. Crie um arquivo kustomization que especifique a configuração base a ser aplicada em ambientes. O arquivo kustomization deve incluir a lista de YAMLs de configuração de recurso do Kubernetes que são armazenados no mesmo repositório base. No arquivo kustomization, também é possível incluir configurações que se aplicam a todos os YAMLs de recurso no repositório base, como um prefixo ou sufixo que é anexado a todos os nomes de recurso, um rótulo, o namespace existente no qual todos os recursos são criados, segredos, configmaps e muito mais.

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namespace: wasliberty
      namePrefix: kustomtest-
      nameSuffix: -v2
      commonLabels:
        app: kustomized-wasliberty
      resources:
      - deployment.yaml
      - service.yaml
      - pvc.yaml
      - configmap.yaml
      - secret.yaml
      

      Os nomes dos YAMLs resources devem corresponder aos nomes dos outros arquivos no repositório base. Você pode incluir diversas configurações no mesmo arquivo, mas, no exemplo, as configurações são arquivos separados, como deployment.yaml, service.yaml e pvc.yaml.

    4. Construa seus arquivos YAML de recurso com as configurações que você definiu no arquivo YAML base kustomization. Os recursos são construídos combinando as configurações no kustomization e os YAMLs de recurso juntos. Os arquivos YAML combinados são retornados em stdout na saída. Use esse mesmo comando para construir qualquer mudança subsequente que você fizer no YAML kustomization, como incluir um rótulo.

      kustomize build
      
  5. Configure seu repositório de sobreposição com arquivos YAML kustomization exclusivos para cada um de seus ambientes, como preparação e produção.

    1. No repositório de preparação, crie um arquivo kustomization.yaml. Inclua quaisquer configurações que sejam exclusivas para preparação, como um rótulo, tag de imagem ou YAML para um novo componente que você deseja testar.

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namePrefix: staging-
      commonLabels:
        env: staging
        owner: TeamA
      bases:
      - ../../base
      patchesStrategicMerge:
      - configmap.yaml
      - new_staging_resource.yaml
      resources:
      - new_staging_resource.yaml
      
      Compreensão dos componentes YAML
      Componente Descrição
      namePrefix Especifique um prefixo para anexar ao nome de cada recurso que você deseja criar com seu arquivos kustomization de preparação, comostaging-.
      commonLabels Inclua rótulos que sejam exclusivos para os objetos de preparação, como o ambiente de preparação e a equipe responsável.
      bases Inclua um caminho relativo em um diretório ou URL para uma reposição remota que contenha um arquivo kustomization de base. Neste exemplo, o caminho relativo aponta para o arquivo kustomization de base na reposição de base criado anteriormente. Este campo é necessário para kustomization de sobreposição.
      patchesStrategicMerge Liste os arquivos YAML de configuração de recursos que deseja mesclar com kustomization de base. É também necessário incluir estes arquivos no mesmo repositório que o arquivo kustomization, como overlay/staging. Esses arquivos de configuração de recurso podem conter pequenas mudanças que são mescladas nos arquivos de configuração base com o mesmo nome que uma correção. O recurso recebe todos os componentes que estão no arquivo de configuração de base, além de qualquer outro componente qiue você especificar no arquivo de configuração de overlay. Se a configuração for um novo arquivo que não está na base, inclua também o nome do arquivo no campo resources.
      resources Liste quaisquer arquivos YAML de configuração de recurso que sejam exclusivos para o repositório de preparação e não estejam incluídos no repositório base. Inclua estes arquivos também no campo patchesStrategicMerge e os inclua no mesmo repsitório que o arquivo kustomization, como overlay/staging.
      Outras configurações possíveis Para obter mais configurações que podem ser incluídas no arquivo, consulte Criar um arquivo kustomization.
    2. Construa seus arquivos de configuração de sobreposição de preparação.

      kustomize build overlay/staging
      
    3. Repita essas etapas para criar seu kustomization de sobreposição de produção e outros arquivos YAML de configuração. Por exemplo, você pode aumentar o número de réplicas em seu deployment.yaml para que seu ambiente de produção possa manipular mais solicitações do usuário.

    4. Revise a estrutura do repositório kustomize para certificar-se de que ela inclua todos os arquivos de configuração YAML necessários. A estrutura pode ser semelhante ao exemplo a seguir.

      ├── base
      │   ├── configmap.yaml
      │   ├── deployment.yaml
      │   ├── kustomization.yaml
      │   ├── pvc.yaml
      │   ├── secret.yaml
      │   └── service.yaml
      └── overlay
          ├── prod
          │   ├── deployment.yaml
          │   ├── kustomization.yaml
          │   └── new_prod_resource.yaml
          └── staging
              ├── configmap.yaml
              ├── kustomization.yaml
              └── new_staging_resource.yaml
      
  6. Aplique os recursos do Kubernetes para o ambiente que você deseja implementar. O exemplo a seguir usa o repositório de preparação.

    1. Navegue até o diretório de sobreposição de preparação. Se você não construiu seus recursos na etapa anterior, crie-os agora.
      cd overlay/staging && kustomize build
      
    2. Aplique os recursos do Kubernetes ao seu cluster. Inclua a opção -k e o diretório em que o arquivo kustomization está localizado. Por exemplo, se você já estiver no diretório de preparação, inclua ../staging para marcar o caminho para o diretório.
      kubectl apply -k ../staging
      
      Saída de exemplo
      configmap/staging-kustomtest-configmap-v2 created
      secret/staging-kustomtest-secret-v2 created
      service/staging-kustomtest-service-v2 created
      deployment.apps/staging-kustomtest-deployment-v2 created
      job.batch/staging-pi created
      persistentvolumeclaim/staging-kustomtest-pvc-v2 created
      
    3. Certificar-se de que as mudanças exclusivas de preparação sejam aplicadas. Por exemplo, se você incluiu um prefixo staging-, os pods e outros recursos que forem criados incluirão esse prefixo em seus nomes.
      kubectl get -k ../staging
      
      Saída de exemplo
      NAME                                        DATA   AGE
      configmap/staging-kustomtest-configmap-v2   2      90s
      
      NAME                                  TYPE     DATA   AGE
      secret/staging-kustomtest-secret-v2   Opaque   2      90s
      
      NAME                                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
      service/staging-kustomtest-service-v2   NodePort   172.21.xxx.xxx   <none>        9080:30200/TCP   90s
      
      NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/staging-kustomtest-deployment-v2   0/3     3            0           91s
      
      NAME                   COMPLETIONS   DURATION   AGE
      job.batch/staging-pi   1/1           41s        2m37s
      
      NAME                                              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS       AGE
      persistentvolumeclaim/staging-kustomtest-pvc-v2   Pending                                      ibmc-file-bronze   90s
      
    4. Repita essas etapas para cada ambiente que você deseja construir.
  7. Opcional: limpe seu ambiente removendo todos os recursos que você aplicou com o Kustomize.

    kubectl delete -k <directory>
    

    Saída de exemplo

    configmap "staging-kustomtest-configmap-v2" deleted
    secret "staging-kustomtest-secret-v2" deleted
    service "staging-kustomtest-service-v2" deleted
    deployment.apps "staging-kustomtest-deployment-v2" deleted
    job.batch "staging-pi" deleted
    persistentvolumeclaim "staging-kustomtest-pvc-v2" deleted