Fala, pessoal! Tudo certo?

Espero que sim!

Hoje continuarei a postagem do kubernetes, então veremos:

  • Utilização de arquivos yaml no kubernetes.
  • Usando arquivos na construção dos nossos pods.
  • Criando e configurando um service.

Caso queira, você pode acessar a primeira postagem aqui: https://thedataengineer.com.br/2022/11/22/iniciando-com-kubernetes-parte-1/ pois ela já tem alguns conceitos que eu não abordarei nesta postagem.

Utilização de arquivos yaml

Na primeira parte, utilizamos comandos para interagir com o kubernetes, só que há maneiras mais simples de passar configurações utilizando arquivos de configuração.

Muito parecido com um arquivo Dockerfile ou um docker-compose.yaml, podemos utilizar arquivos yaml para criar nossos pods.

Abaixo, criarei um pod de nginx usando um arquivo de configuração.

apiVersion: v1 
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:stable

Antes de subirmos as configurações, vou explicar cada linha desse arquivo.

  • apiVersion – Refere-se à versão da API do kubernetes.
  • kind – É o tipo de recurso que estamos criando, neste caso um pod.
  • metadata – São os metadados do recurso que estamos criando, nesse caso, para criar um recurso do tipo pod, só precisamos do nome.
    • name – é o nome do pod que iremos criar.
  • spec – São as especificações do recurso que estamos subindo, em nosso caso um container nginx.
    • containers – Aqui é a lista dos containers e suas imagens.
      • name – O nome do container.
      • image – A imagem do container.

Usando arquivos na construção dos nossos pods.

Agora, podemos rodar o seguinte comando para criar o nosso pod.

kubectl apply -f pod-ngix.yaml

Teremos como saída o seguinte resultado:

Certo, já temos nosso pod rodando! Mas como eu poderia acessar esse pod?

É aí que entram os services! 😀

Criando e configurando um service

Utilizaremos um service para realizar a comunicação da nossa maquina local com o pod.

Como visto na parte 1, temos alguns tipos de services que se encaixam em nossa necessidade.

Dá mesma forma que fizemos para criar o pod, usando o comando kubectl apply -f, iremos criar nosso service usando um arquivo.

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    service-nginx: thedataengineer.com.br
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 31346

Como resultado, temos a saída abaixo:

Da mesma forma que fiz com o arquivo do pod, irei explicar cada linha do arquivo do nosso service.

  • apiVersion – Refere-se à versão da API do kubernetes.
  • kind – É o tipo de recurso que estamos criando, neste caso um service.
  • metadata – São os metadados do recurso que estamos criando, nesse caso, para criar um recurso do tipo service, só precisamos do nome.
    • name – Nome do service.
  • spec – São as especificações do nosso service.
    • type – O tipo de service, no nosso caso, NodePort.
    • selector – Aqui temos as tags do service, é por meio delas que podemos “amarrar” o pod ao service.
    • ports – Configurações de porta.
      • protocol – O protocolo utilizado, no nosso caso TCP
      • port – A porta do service
      • targetPort – A porta para onde serão direcionadas as requisições dentro do pod.
      • nodePort – Normalmente, o service atribuí uma porta aleatória entre 30000 e 32767, dessa forma podemos atribuir um valor fixo à essa porta.

Certo, agora precisamos realizar algumas alterações no arquivo de pod, pois, precisamos adicionar a porta do container e a label para que o service seja aplicado ao pod.

  • labels – Aqui podemos atribuir as tags que serão usadas para ligarmos o service ao pod.
  • ports – Aqui estamos dizendo em qual porta o container está respondendo.
Abaixo o arquivo com as atualizações.
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        service-nginx: thedataengineer.com.br
    spec:
      containers:
        - name: nginx-container
          image: nginx:stable
          ports:
            - containerPort: 80

    Se tiver algum problema em atualizar o pod, dê primeiro o comando abaixo para deletar o pod antes de tentar criar novamente.

    kubectl delete -f pod-ngix.yaml

    Como estou usando o minikube, eu não conseguiria realizar o acesso ao nginx através do meu localhost, eu devo utilizar o ip do minikube para acessar a aplicação.

    Caso você esteja na mesma situação, basta digitar o seguinte comando para descobrir o ip:

    minikube ip

    Agora podemos acessar nosso serviço do nginx rodando no kubernetes. 🙂

    Conclusão

    Essa foi nossa parte 2 de kubernetes, e agora que já temos um bom fundamento, podemos partir para conceitos de big data e engenharia de dados no kubernetes.

    Te vejo na próxima!

    Um abraço!

    🙂


    Jefferson Soares

    Olá! Sou Jefferson. Trabalho com: Dados, Dashboards, SQL, SAS, Python e muito mais! Criei esse cantinho para postar alguns conhecimentos. :)

    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comentários
    Inline Feedbacks
    View all comments