Gerenciamento de campos do Kubernetes - Amazon EKS

Gerenciamento de campos do Kubernetes

Os complementos do Amazon EKS são instalados no cluster usando as configurações padrão de prática recomendada. Para obter mais informações sobre como adicionar um complemento do Amazon EKS ao cluster, consulte Complementos do Amazon EKS.

Talvez você queira personalizar a configuração de um complemento do Amazon EKS para habilitar recursos avançados. O Amazon EKS usa o recurso de aplicação no lado do servidor do Kubernetes para permitir o gerenciamento de um complemento pelo Amazon EKS sem substituir a configuração por configurações que não são gerenciadas pelo Amazon EKS. Para obter mais informações, consulte Server-Side Apply (Aplicação no lado do servidor) na documentação do Kubernetes. Para isso, o Amazon EKS gerencia um conjunto mínimo de campos para cada complemento instalado. Você pode modificar todos os campos que não forem gerenciados pelo Amazon EKS ou por outro processo do ambiente de gerenciamento do Kubernetes, como kube-controller-manager, sem problemas.

Importante

A modificação de um campo gerenciado pelo Amazon EKS impede que o Amazon EKS gerencie o complemento e pode resultar na substituição das alterações quando um complemento for atualizado.

Exibir status do gerenciamento do campo

Você pode usar o kubectl para ver quais campos são gerenciados pelo Amazon EKS para qualquer complemento do Amazon EKS.

Para ver o status de gerenciamento de um campo
  1. Determine qual complemento você deseja examinar. Para ver todas as deployments e os DaemonSets implantados no cluster, consulte Visualizar os recursos do Kubernetes.

  2. Exiba os campos gerenciados para um complemento executando o seguinte comando:

    kubectl get type/add-on-name -n add-on-namespace -o yaml

    Por exemplo, você pode ver os campos gerenciados do complemento CoreDNS com o comando a seguir.

    kubectl get deployment/coredns -n kube-system -o yaml

    O gerenciamento de campo é listado na seção a seguir no resultado retornado.

    [...]
    managedFields:
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:                        
    [...]               
    nota

    Se a saída não exibir managedFields, adicione --show-managed-fields ao comando e execute-o novamente. A versão do kubectl que você está usando determina se os campos gerenciados serão retornados por padrão.

Entender a sintaxe de gerenciamento de campo na API do Kubernetes

Quando você visualiza os detalhes de um objeto do Kubernetes, tanto os campos gerenciados quanto os não gerenciados são retornados na saída. Os campos gerenciados podem ser de um dos seguintes tipos:

  • Fully managed (Totalmente gerenciado) – Todas as chaves para o campo são gerenciadas pelo Amazon EKS. Modificações em qualquer valor neste campo geram conflito.

  • Partially managed (Parcialmente gerenciado) – Algumas chaves para o campo são gerenciadas pelo Amazon EKS. Somente modificações nas chaves gerenciadas explicitamente pelo Amazon EKS geram conflito.

Ambos os tipos de campos são marcados com manager: eks.

Cada chave é um . que representa o próprio campo, que sempre mapeia para um conjunto vazio, ou uma string que representa um subcampo ou item. A saída para o gerenciamento de campo consiste nos seguintes tipos de declarações:

  • f:name, em que name é o nome de um campo em uma lista.

  • k:keys, em que keys é um mapa dos campos do item em uma lista.

  • v:value, em que value é o valor exato formatado em JSON do item de uma lista.

  • i:index, em que index é a posição de um item na lista.

As seguintes partes do resultado para o complemento CoreDNS ilustram as declarações anteriores:

  • Fully managed fields (Campos totalmente gerenciados) – Se um campo gerenciado tiver um (campo) f: especificado, mas não k: (chave), todo o campo é gerenciado. Modificações em quaisquer valores neste campo causam um conflito.

    No resultado a seguir, é possível ver que o contêiner chamado coredns é gerenciado pelo eks. Os subcampos args, image e imagePullPolicy também são gerenciados pelo eks. Modificações em qualquer valor nesse campo geram conflito.

    [...]
    f:containers:
      k:{"name":"coredns"}:
      .: {}
      f:args: {}
      f:image: {}
      f:imagePullPolicy: {}
    [...]
    manager: eks
    [...]
  • Partially managed fields (campos parcialmente gerenciados) – Se uma chave gerenciada tiver um valor especificado, as chaves declaradas são gerenciadas para esse campo. A modificação das chaves especificadas gera conflito.

    No resultado a seguir, é possível ver que o eks gerencia os volumes config-volume e tmp, definidos com a chave name.

    [...]
    f:volumes:
      k:{"name":"config-volume"}:
        .: {}
        f:configMap:
          f:items: {}
          f:name: {}
        f:name: {}
      k:{"name":"tmp"}:
        .: {}
        f:name: {}
    [...]
    manager: eks
    [...]
  • Adição de chaves em campos gerenciados parcialmente – Se apenas um valor de chave específico for gerenciado, você pode adicionar, com segurança, mais chaves, como, por exemplo, argumentos, em um campo sem gerar conflito. Se você adicionar outras chaves, certifique-se de que o campo não seja gerenciado primeiro. Adicionar ou modificar qualquer valor gerenciado causa um conflito.

    No resultado a seguir, é possível ver que tanto a chave do name, quando o name são gerenciados. Adicionar ou modificar qualquer nome de contêiner causa um conflito com essa chave gerenciada.

    [...]
    f:containers:
      k:{"name":"coredns"}:
    [...]
        f:name: {}
    [...]
    manager: eks
    [...]