Skip to content

Latest commit

 

History

History
131 lines (107 loc) · 4.26 KB

03-criando-pods.md

File metadata and controls

131 lines (107 loc) · 4.26 KB

Criando PODs

Anterior Próximo

PODs são a unidade básica de um cluster Kubernetes. Eles são compostos um ou mais containers que compartilham os mesmos recursos.

No exemplo abaixo vemos os dois a definilão dos dois PODs que implementarão os nossos serviços.

apiVersion: v1
kind: Pod
metadata:
  name: backend
  labels:
    app: k8s-tutorial
    version: v1
    role: backend
    example: k8s
spec:
  containers:
  - name: backend
    image: vepo/backend:1.0.0
    ports:
    - containerPort: 8080
---
apiVersion: v1
kind: Pod
metadata:
  name: frontend
  labels:
    app: k8s-tutorial
    version: v1
    role: frontend
    example: k8s
spec:
  containers:
  - name: frontend
    image: vepo/frontend:1.0.0
    ports:
    - containerPort: 8080

Para criar esses PODs execute:

$ kubectl apply -f ./k8s/pods/all.yaml
pod/backend created
pod/frontend created

Para verificar os PODs em execução:

$ kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
default       backend                            1/1     Running   0          9m32s
default       frontend                           1/1     Running   0          9m32s
kube-system   coredns-558bd4d5db-72n9p           1/1     Running   0          41m
kube-system   etcd-minikube                      1/1     Running   0          41m
kube-system   kube-apiserver-minikube            1/1     Running   0          41m
kube-system   kube-controller-manager-minikube   1/1     Running   0          41m
kube-system   kube-proxy-m8wxg                   1/1     Running   0          41m
kube-system   kube-scheduler-minikube            1/1     Running   0          41m
kube-system   storage-provisioner                1/1     Running   1          41m

Observe que nossos PODs estão rodando no namespace default, enquanto outros PODs estão rodando no namespace kube-system. Cada um desses PODs tem função diferente, os pods do kube-system é o que chamamos de Control Plane, eles implementam a lógica de gerenciamento do cluster. Enquanto nossos PODs implementa a lógica da aplicação, por isso são chamados de Application Plane.

Os logs dos PODs estão acessíveis pelos comandos kubectl logs.

$ kubectl logs backend
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2021-11-22 18:41:18,941 INFO  [io.quarkus] (main) backend 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.5.0.Final) started in 1.539s. Listening on: http://0.0.0.0:8080
2021-11-22 18:41:19,025 INFO  [io.quarkus] (main) Profile prod activated.
2021-11-22 18:41:19,026 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jsonb, resteasy-mutiny, smallrye-context-propagation, vertx]

O POD front-end vai encontrar o POD back-end através de uma variável de ambiente, para declarar essa variável, é preciso definir ela na especificação do POD. Vamos supor que o pod back-end pode ser acessível através da URL http://backend-svc.default.svc.cluster.local:8080 para isso altere o POD para:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
  labels:
    app: k8s-tutorial
    version: v1
    role: frontend
    example: k8s
spec:
  containers:
  - name: frontend
    image: vepo/frontend:1.0.0
    ports:
    - containerPort: 8080
    env:
    - name: BACKEND_URL
      value: "http://backend-svc.default.svc.cluster.local:8080"

Para aplicar essa alteração, é preciso primeiro remover os PODs antigos e depois aplicar novamente:

$ kubectl delete -f ./k8s/pods/all.yaml
pod "backend" deleted
pod "frontend" deleted

$ kubectl apply -f ./k8s/pods/all-with-env.yaml
pod/backend created
pod/frontend created

A remoção de qualquer recurso Kubernetes é feita usando apenas o nome e namespace do recurso, logo qualquer um dos arquivos acima poderiam ser utilizados.

Por fim, como acessamos os PODs? Podemos acessar via linha de comando, mas não conseguimos acessar a interface HTTP porque ela só é habilitada por um serviço.

$ kubectl exec -it frontend -- sh
/ # ls
app    bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ #