1
resposta

Arquivos statefulset e deployment estão desatualizados

Os arquivos statefulset e deployment que estão sendo disponibilizados no treinamento estão desatualizados. Estou verificando que várias pessoas assim como eu estão tendo o mesmo problema porque os arquivos .yaml que foram disponibilizado no curso estão desatualizado/errados, estão apresentando erros relacionados a API apps/v1beta1 e também a falta de selector.

Poderiam atualizar esses arquivos no curso?

PS C:\Alura-AKS-master\db> kubectl apply -f .\statefulset.yaml error: unable to recognize ".\statefulset.yaml": no matches for kind "StatefulSet" in version "apps/v1beta1"

PS C:\Alura-AKS-master\db> kubectl apply -f .\statefulset.yaml error: error validating ".\statefulset.yaml": error validating data: ValidationError(StatefulSet.spec): missing required field "selector" in io.k8s.api.apps.v1.StatefulSetSpec; if you choose to ignore these errors, turn validation off with --validate=false

PS C:\Alura-AKS-master\app> kubectl apply -f .\deployment.yaml error: unable to recognize ".\deployment.yaml": no matches for kind "Deployment" in version "apps/v1beta1"

PS C:\Alura-AKS-master\app> kubectl apply -f .\deployment.yamlerror: error validating ".\deployment.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false

1 resposta

Olá, Charles. Tudo bem?

Entendo que você está tendo problemas com os arquivos yaml desatualizados. Realmente, o Kubernetes mudou algumas coisas nas versões mais recentes e isso pode causar problemas com arquivos yaml mais antigos.

Pelo que você me mostrou, os erros estão relacionados à versão da API e à falta do campo "selector". Vamos tentar corrigir isso.

Primeiramente, a versão da API "apps/v1beta1" para StatefulSets e Deployments foi descontinuada a partir do Kubernetes 1.16. Agora, a versão correta da API é "apps/v1". Então, você deve alterar a linha "apiVersion: apps/v1beta1" para "apiVersion: apps/v1" nos arquivos statefulset.yaml e deployment.yaml.

Em segundo lugar, a partir da versão "apps/v1", o Kubernetes exige que você especifique um campo "selector" para corresponder aos labels dos pods que o StatefulSet ou Deployment irá gerenciar. Este campo deve ser adicionado no mesmo nível do campo "template".

Vou mostrar como ficaria o arquivo statefulset.yaml com as alterações:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-mysql
spec:
  serviceName: db
  selector:
    matchLabels:
      name: mysql
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
        - name: container-mysql
          image: mysql:5.5
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_DATABASE
              value: "loja"
            - name: MYSQL_USER
              value: "root"
            - name: MYSQL_ALLOW_EMPTY_PASSWORD
              value: "1"
          volumeMounts:
            - name: volume-mysql
              mountPath: /var/lib/mysql
      volumes:
       - name: volume-mysql
         persistentVolumeClaim:
           claimName: configuracao-mysql

Você deve fazer uma alteração semelhante no arquivo deployment.yaml, adicionando o campo "selector" e alterando a "apiVersion" para "apps/v1".

Espero que isso resolva o problema que você está enfrentando. Lembre-se, é sempre importante verificar a versão do Kubernetes que você está usando e garantir que seus arquivos yaml estejam compatíveis com essa versão.

  • Sobre a sua sugestão de atualizar o conteúdo: Eu vou passar para a equipe de conteúdo para analisarem e atualizarem.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos!