Coder Social home page Coder Social logo

fullcycle-k8s's Introduction

Criar cluster usando cli KIND(https://kind.sigs.k8s.io/)

kind create cluster --config=k8s/kind.yaml --name fullcycle

Listar informações do cluster

kind get clusters
kubectl cluster-info --context kind-{name-cluster}
kubectl cluster-info --context kind-fullcycle

Listar todos os clusters

kubectl config get-clusters

Mudar contexto do cluster, por exemplo, acessar um cluster da GCP, AWS, Azure, etc

kubectl config use-context {name-cluster}

Deletar cluster

kind delete clusters {name-cluster}

Criar imagem e publicar imagem docker

docker build -t aralvesandrade/hello-go .
docker push aralvesandrade/hello-go

Criar pod, listar pods, expor na porta 8080, visualizar logs, listar informações e acessar via bash

kubectl apply -f k8s/pod.yaml
kubectl get pods
kubectl port-forward pod/{name-pod} 8080:8000
kubectl logs pod/{name-pod} -f
kubectl describe pod {name-pod}
kubectl exec -it {name-pod} -- bash

Criar replicas, listar replicas, deletar pod ou todos

kubectl apply -f k8s/replicaset.yaml
kubectl get pods
kubectl get replicasets
kubectl delete pod {name-pod}
#ou deletar todos pods
kubectl delete pod --all
kubectl get replicasets

No exemplo iremos criar imagem docker v2 e publicar

docker build -t aralvesandrade/hello-go:v2 .
docker push aralvesandrade/hello-go:v2

Criar arquivo do tipo Deployment objeto que gerencia a implantação de aplicaticos no cluster

No caso iremos simular alterar a versão da imagem docker, aplicar o deployment e com isso todas as replicas/pods são finalizadas e novos pods são criados com a nova versão do docker

kubectl get replicasets
kubectl delete replicaset {name-replicaset}
kubectl get replicasets
kubectl get pods
#mudar versão no deployment
kubectl apply -f k8s/deployment.yaml
kubectl get deployments
kubectl get replicasets
kubectl get pods

Listar informações do deployment

kubectl get deployments
kubectl describe deployment {name-deployment}

Listar informações do replicaset

kubectl get replicasets
kubectl describe replicaset {name-replicaset}

Voltar versão do histórico do deployment

kubectl get deployments
kubectl rollout history deployment {name-deployment}
#undo retorna revisão anterior a atual
kubectl rollout undo deployment {name-deployment}
kubectl get pods
kubectl describe pod {name-pod}
kubectl get replicasets
kubectl describe replicaset {name-replicaset}
#ou
kubectl rollout undo deployment goserver --to-revision={revision}

Criando arquivo do tipo Service objeto que define um conjunto lógico de pods e uma política de acesso a esses pods e expor na porta 8080

Tipos de Services: ClusterIP (IP Interno), NodePort e LoadBalancer (IP Externo)

  • port: porta do service
  • targetPort: porta do container
  • nodePort: usado para NodePort, expoe um range de portas
kubectl apply -f k8s/service.yaml
kubectl get services
#expor service na porta 8080
kubectl port-forward svc/{name-service} 8080:80

Listar informações do service e deletar service

kubectl get svc
#ou kubectl get service
kubectl delete svc {name-service}

Expor API do k8s na porta 8081

kubectl proxy --port=8081
curl http://127.0.0.1:8081/api/v1/namespaces/default/services/goserver-service

Aplicar variaveis, variaveis secretas e injetar arquivo txt, usando tipo ConfigMap na aplicação

kubectl apply -f k8s/configmap-env.yaml
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/configmap-family.yaml
#aplicar alterações feitas no arquivo deployment.yaml
kubectl apply -f k8s/deployment.yaml

Existem três tipos principais de probes que podem ser definidas dentro de um pod:

  • livenessProbe: Esta probe é usada para determinar se o contêiner dentro do pod está em um estado saudável. Se o contêiner falhar nesta verificação, o Kubernetes considera o contêiner não saudável e pode reiniciá-lo.

  • readinessProbe: Esta probe é usada para determinar se o contêiner dentro do pod está pronto para servir o tráfego. Se um contêiner falhar nesta verificação, ele é removido do balanceador de carga do Kubernetes, impedindo que o tráfego seja direcionado para ele até que ele se torne pronto novamente.

  • startupProbe: Esta probe é usada para determinar se o contêiner dentro do pod está iniciando corretamente. Ela difere da livenessProbe porque é usado apenas durante a inicialização do contêiner. Uma vez que o contêiner está em execução, a startupProbe é desabilitada.

Aplicar vários arquivos yaml

kubectl apply -f k8s/configmap-env.yaml -f k8s/secret.yaml -f k8s/configmap-family.yaml -f k8s/service.yaml -f k8s/deployment.yaml -f k8s/metrics-server.yaml -f k8s/hpa.yaml && watch -n1 kubectl get pods
kubectl get services
kubectl port-forward svc/goserver-service 8000:80

Resources e HPA

Instalando metrics-server, fazer download do arquivo yaml no site https://github.com/kubernetes-sigs/metrics-server, e renomear o arquivo para metrics-server.yaml

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Alterar o arquivo no kind: Deployment, inserir o argumento --kubelet-insecure-tls, e com a linha de comando kubectl apply -f k8s/metrics-server.yaml, será instalado o metrics-server

kubectl apply -f k8s/deployment.yaml -f k8s/metrics-server.yaml
#validar se foi aplicado e instalado o metrics-server
kubectl get apiservices
#verificar as metricas de um pod
kubectl top pod goserver-6ddb7c476-gs2w4

Aplicar HPA

kubectl apply -f k8s/hpa.yaml
#verificar o hpa foi referenciado no Deployment/goserver
kubectl get hpa
#ou
watch -n1 kubectl get hpa

Aplicando um stress test na aplicar

kubectl run -it fortio --rm --image=fortio/fortio -- load -qps 800 -t 120s -c 70 "http://goserver-service/healthz"

fullcycle-k8s's People

Contributors

aralvesandrade-luizalabs avatar

Watchers

Alexandre Andrade avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.