Kubernetes
Implantando e executando um microsserviço Devprime no kubernetes
Para publicar uma imagem de container no kubernetes é necessário ter uma imagem pública no docker hub ou em repositórios como Azure Container Registry (ACR), Amazon Elastic Container Registry, Google Container Registry, Oracle Cloud Infrastructure Container Registry e outros.
Nós recomendamos uma leitura na documentação sobre o Docker que demonstra como construir uma imagem docker e publicar em um repositório.
Criando um arquivo de deployment “deployment.yml”
O procedimento padrão no kubernetes é criar um arquivo de deployment como “deployment.yml” e incluir o conteúdo abaixo modificando a configuração da imagem. Os parâmetros “env” que representam as variáveis de ambiente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
apiVersion : apps/v1
kind: Deployment
metadata:
name: ms-order
spec:
replicas: 1
selector:
matchLabels:
app: ms-order
template:
metadata:
labels:
app: ms-order
spec:
containers:
- name: ms-order
image: ms-order:latest
imagePullPolicy: Always
readinessProbe: # Disponivel para receber trafego
httpGet:
path: /healthcheck #/healthz # Endpoint que a sonda de prontidão deve verificar
port: 80 # Porta em que o contêiner está escutando
initialDelaySeconds: 30 # Tempo de espera inicial antes de iniciar as verificações
periodSeconds: 10 # Frequência de verificação da prontidão
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
livenessProbe: # Disponivel para receber trafego
httpGet:
path: /healthcheck #/healthz # Endpoint que a sonda de prontidão deve verificar
port: 80 # Porta em que o contêiner está escutando
initialDelaySeconds: 40 # Tempo de espera inicial antes de iniciar as verificações
periodSeconds: 10 # Frequência de verificação da prontidão
timeoutSeconds: 1 # How long to wait for a response
successThreshold: 1 # Criterio para considerar sucesso
failureThreshold: 3 # Number of failures to tolerate before restarting
terminationGracePeriodSeconds: 90 # Override pod-level termination
ports:
- containerPort: 80
env:
- name: Devprime_app
value: "license=Put your license|||debug=false|||debugstate=false|||debugstream=false|||debugweb=false|||showenviromentvariables=false|||tenancy=[enable=false,type=Shared,cache=State2,gateway=https://localhost:5003]"
- name: Devprime_observability
value: "enable=true|||saveinfile=false|||hidedetails=false|||hidedatetime=false|||showhttperrors=400"
- name: Devprime_web
value: "url=http://*:80|||enable=true|||enableswagger=true|||postsuccess=201|||postfailure=500|||getsuccess=200|||getfailure=500|||patchsuccess=200|||patchfailure=500|||putsuccess=200|||putfailure=500|||deletesuccess=200|||deletefailure=500"
- name: Devprime_stream1
value: "alias=Stream1|||enable=true|||default=true|||streamtype=RabbitMQ|||hostname=rabbitmq.default.svc|||user=guest|||password=guest|||port=5672|||exchange=Devprime|||exchangetype=direct|||retry=3|||fallback=State1"
- name: Devprime_state1
value: "alias=State1|||dbtype=mongodb|||connection=mongodb://mongoadmin:LltF8Nx*yo@mongodb.default.svc:27017|||timeout=5|||retry=2|||dbname=ms-order|||isssl=true|||numberofattempts=4|||durationofbreak=45"
- name: Devprime_Custom
value: "stream.orderevents=OrderEvents"
- name: Devprime_Security
value: ""
- name: Devprime_Services
value: "enable=true|||retry=3|||circuitbreak=45|||timeout=10|||connections=[clientid=your client id,clientsecret=your client secret,granttype=client_credentials,name=Services1,tokenuri=your token uri]"
resources:
requests:
memory: "75Mi"
cpu: "1m"
limits:
memory: "130Mi"
cpu: "150m"
|
Após criar o arquivo basta executar o apply.
kubectl apply -f .\deployment.yml
Depois basta listar os pods
kubectl get pods
NAME READY STATUS RESTARTS AGE
ms-order-848cc9c6bf-sxkhr 1/1 Running 0 10m
Criando um arquivo de service “service.yml”
Nós também criaremos um serviço para obter um ip público para esse pod. Crie o arquivo
“service.yml”.
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: v1
kind: Service
metadata:
name: ms-order
spec:
selector:
app: ms-order
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
|
Execute o apply para criar o serviço no kubernetes
kubectl apply -f .\service.yml
Depois basta consultar e obter o endereço ip.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ms-order LoadBalancer 10.0.146.208 20.85.248.63 80:30549/TCP 35m
Agora basta abrir a sua aplicação no endereço ip do EXTERNAL-IP.
Exportando as configurações para o Kubernetes
O Devprime oferece um comando para exportar as configurações iniciais do arquivo Deployment e Servicces. Ao executar na pasta do projeto ele faz todos os passos iniciais.
dp export kubernetes
Considerações
Nós demonstramos como é simples publicar um microsserviços Devprime no kubernetes.
- Utilize um processo de DevOps e serviços como AKS, GKE, EKS, OKE
- Utilize serviços de cofres para as credenciais.
Última modificação March 29, 2024 (2268b42e)