diff --git a/pt/README.md b/pt/README.md index 8959f70b..9a2ccfaf 100755 --- a/pt/README.md +++ b/pt/README.md @@ -236,28 +236,28 @@ Fique à vontade para aprender muito sobre Kubernetes utilizando esse livro! - [O que iremos ver hoje?](day-9/README.md#o-que-iremos-ver-hoje) - [Conteúdo do Day-9](day-9/README.md#conteúdo-do-day-9-1) - [O Que é o Ingress?](day-9/README.md#o-que-é-o-ingress) - - [Teoria: O que é Ingress?](day-9/README.md#teoria-o-que-é-ingress) - - [Prática: Mãos à Obra](day-9/README.md#prática-mãos-à-obra) - - [Criando um Serviço Simples](day-9/README.md#criando-um-serviço-simples) -- [Seção 2: Componentes do Ingress](day-9/README.md#seção-2-componentes-do-ingress) - - [Introdução](day-9/README.md#introdução) - - [Teoria: Componentes Chave](day-9/README.md#teoria-componentes-chave) + - [O que é Ingress?](day-9/README.md#o-que-é-ingress) +- [Componentes do Ingress](day-9/README.md#componentes-do-ingress) + - [Componentes Chave](day-9/README.md#componentes-chave) - [Ingress Controller](day-9/README.md#ingress-controller) - [Ingress Resources](day-9/README.md#ingress-resources) - [Annotations e Customizations](day-9/README.md#annotations-e-customizations) - - [Prática: Montando o Quebra-Cabeça](day-9/README.md#prática-montando-o-quebra-cabeça) - [Instalando um Nginx Ingress Controller](day-9/README.md#instalando-um-nginx-ingress-controller) - [Instalando o Nginx Ingress Controller no Kind](day-9/README.md#instalando-o-nginx-ingress-controller-no-kind) - - [Introdução](day-9/README.md#introdução-1) - - [Criando o Cluster com Configurações Especiais](day-9/README.md#criando-o-cluster-com-configurações-especiais) + - [Criando o Cluster com Configurações Especiais](day-9/README.md#criando-o-cluster-com-configurações-especiais) - [Instalando um Ingress Controller](day-9/README.md#instalando-um-ingress-controller) + - [Instalando o Giropops-Senhas no Cluster](day-9/README.md#instalando-o-giropops-senhas-no-cluster) - [Criando um Recurso de Ingress](day-9/README.md#criando-um-recurso-de-ingress) - - [Annotations para Customização](day-9/README.md#annotations-para-customização) -- [Seção 3: Configurando Rotas](day-9/README.md#seção-3-configurando-rotas) - - [Introdução](day-9/README.md#introdução-2) - - [Teoria: O Que São Rotas?](day-9/README.md#teoria-o-que-são-rotas) - - [Prática: Configurando Rotas Simples](day-9/README.md#prática-configurando-rotas-simples) - - [Prática: Configurando Rotas Avançadas](day-9/README.md#prática-configurando-rotas-avançadas) + - [O que está acontecendo com o nosso Ingress?](day-9/README.md#o-que-está-acontecendo-com-o-nosso-ingress) + - [Configurando um Ingress para a nossa aplicação em Flask com Redis](day-9/README.md#configurando-um-ingress-para-a-nossa-aplicação-em-flask-com-redis) + - [Criando múltiplos Ingresses no mesmo Ingress Controller](day-9/README.md#criando-múltiplos-ingresses-no-mesmo-ingress-controller) +- [Instalando um cluster EKS para os nossos testes com Ingress](day-9/README.md#instalando-um-cluster-eks-para-os-nossos-testes-com-ingress) + - [Instalando um cluster EKS para os nossos testes com Ingress](day-9/README.md#instalando-um-cluster-eks-para-os-nossos-testes-com-ingress) + - [Entendendo os Contexts do Kubernetes para gerenciar vários clusters](day-9/README.md#entendendo-os-contexts-do-kubernetes-para-gerenciar-vários-clusters) + - [Instalando o Ingress Nginx Controller no EKS](day-9/README.md#instalando-o-ingress-nginx-controller-no-eks) + - [Conhecendo o ingressClassName e configurando um novo Ingress](day-9/README.md#conhecendo-o-ingressclassname-e-configurando-um-novo-ingress) + - [Configurando um domínio válido para o nosso Ingress no EKS](day-9/README.md#configurando-um-domínio-válido-para-o-nosso-ingress-no-eks) +- [Final do Day-9](day-9/README.md#final-do-day-9) diff --git a/pt/day-9/README.md b/pt/day-9/README.md index 9a7300f7..67495a71 100755 --- a/pt/day-9/README.md +++ b/pt/day-9/README.md @@ -30,7 +30,16 @@ Se você está aqui, provavelmente já tem alguma noção do que o Kubernetes fa - [Instalando um Ingress Controller](#instalando-um-ingress-controller) - [Instalando o Giropops-Senhas no Cluster](#instalando-o-giropops-senhas-no-cluster) - [Criando um Recurso de Ingress](#criando-um-recurso-de-ingress) -- [TBD](#tbd) + - [O que está acontecendo com o nosso Ingress?](#o-que-está-acontecendo-com-o-nosso-ingress) + - [Configurando um Ingress para a nossa aplicação em Flask com Redis](#configurando-um-ingress-para-a-nossa-aplicação-em-flask-com-redis) + - [Criando múltiplos Ingresses no mesmo Ingress Controller](#criando-múltiplos-ingresses-no-mesmo-ingress-controller) +- [Instalando um cluster EKS para os nossos testes com Ingress](#instalando-um-cluster-eks-para-os-nossos-testes-com-ingress) + - [Instalando um cluster EKS para os nossos testes com Ingress](#instalando-um-cluster-eks-para-os-nossos-testes-com-ingress) + - [Entendendo os Contexts do Kubernetes para gerenciar vários clusters](#entendendo-os-contexts-do-kubernetes-para-gerenciar-vários-clusters) + - [Instalando o Ingress Nginx Controller no EKS](#instalando-o-ingress-nginx-controller-no-eks) + - [Conhecendo o ingressClassName e configurando um novo Ingress](#conhecendo-o-ingressclassname-e-configurando-um-novo-ingress) + - [Configurando um domínio válido para o nosso Ingress no EKS](#configurando-um-domínio-válido-para-o-nosso-ingress-no-eks) +- [Final do Day-9](#final-do-day-9)   @@ -357,4 +366,359 @@ Para testar, você pode usar o comando curl com o IP, hostname ou load balancer curl ENDEREÇO_DO_INGRESS/giropops-senhas ``` -# TBD \ No newline at end of file +### O que está acontecendo com o nosso Ingress? + +Se você tentar acessar o endereço do seu Ingress, você verá que a aplicação não está funcionando corretamente. Para resolvermos isso precisamos entender melhor como o Ingress funciona. + +Isso está acontecendo porque o Ingress Controller está encaminhando as requisições para o serviço `giropops-senhas`, mas a aplicação está esperando que as requisições sejam feitas para `/`, e não para `/giropops-senhas`. + +Poderíamos resolver isso em contato com o time de desenvolvimento, colocando em práctica a cultura DevOps, alterando o código da aplicação para que ela funcione com o Ingress. + +Mas vamos supor que o time de desenvolvimento não tenha tempo para isso, ou que a aplicação seja de terceiros, e não tenhamos acesso ao código fonte. Nesse caso, podemos "resolver" criando um novo recurso de Ingress, que irá encaminhar as requisições do `/static` para o `/` removendo a anotação `nginx.ingress.kubernetes.io/rewrite-target: /` + +Crie um arquivo chamado `ingress-2.yaml`: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas-static + annotations: +spec: + rules: + - http: + paths: + - path: /static + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 + +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-2.yaml +``` + +Podemos testar novamente: + +```bash +curl ENDEREÇO_DO_INGRESS/static +``` + +Agora sim, a aplicação está funcionando. Não é a melhor solução, mas resolveu o problema. Lembrando que isso é apenas um exemplo, e que o ideal é que o time de desenvolvimento faça as alterações necessárias para que a aplicação funcione corretamente com o Ingress. + +### Configurando um Ingress para a nossa aplicação em Flask com Redis + +Nossa aplicação agora está carregando o CSS e o JS, mas ainda não está funcionando corretamente. Isso porque a aplicação está tentando se conectar ao Redis através do endereço `localhost`, e não está encontrando o Redis. + +Então vamos criar um novo recurso de Ingress, indicando que o nosso `path` agora é `/` e não mais o `/giropops-senhas`. + +Comece removendo os recursos que criamos anteriormente: + +```bash +kubectl delete ingress giropops-senhas giropops-senhas-static +``` + +Agora crie um novo arquivo chamado `ingress-3.yaml`: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-3.yaml +``` + +Podemos testar novamente: + +```bash +curl ENDEREÇO_DO_INGRESS +``` + +Com isso, a nossa aplicação está funcionando corretamente. Você pode acessar o endereço do seu Ingress no navegador, e testar a aplicação, inclusive gerando senhas. + +### Criando múltiplos Ingresses no mesmo Ingress Controller + +No exemplo anterior, criamos um Ingress para a nossa aplicação rodar no endereço `/`. Mas e se quisermos rodar mais de uma aplicação no mesmo Ingress Controller? Como faríamos? + +Vamos supor que queremos rodar a nossa aplicação do NGINX no endereço `giropops.nginx.io`, enquanto a nossa aplicação em Flask com Redis continua rodando no `localhost`. + +A primeira coisa que precisamos é criar o nosso Pod e o nosso Service para o NGINX. + +```bash +kubectl run nginx --image=nginx --port=80 +``` + +```bash +kubectl expose pod nginx +``` + +Agora vamos criar o nosso Ingress para o NGINX. Crie um arquivo chamado `ingress-4.yaml`: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: nginx + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: giropops.nginx.io + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: nginx + port: + number: 80 +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-4.yaml +``` + +Como estamos usando o Kind, precisamos editar o arquivo `/etc/hosts` para que o endereço `giropops.nginx.io` aponte para o endereço IP do nosso Ingress. Para isso, execute: + +```bash +sudo vim /etc/hosts +``` + +Adicione a linha abaixo no arquivo: + +```bash +ENDEREÇO_IP_DO_INGRESS giropops.nginx.io +``` + +Agora vamos testar: + +```bash +curl giropops.nginx.io +``` + +Podemos adicionar um novo Ingress para a nossa aplicação em Flask com Redis. Crie um arquivo chamado `ingress-5.yaml`: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: giropops-senhas.io + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-5.yaml +``` + +Não se esqueça de editar o arquivo `/etc/hosts` para que o endereço `giropops-senhas.io` aponte para o endereço IP do nosso Ingress. Para isso, execute: + +```bash +sudo vim /etc/hosts +``` + +Adicione a linha abaixo no arquivo: + +```bash +ENDEREÇO_IP_DO_INGRESS giropops-senhas.io +``` + +Podemos testar que as duas aplicações estão funcionando corretamente acessando os endereços `giropops.nginx.io` e `giropops-senhas.io` no navegador. + +# Instalando um cluster EKS para os nossos testes com Ingress + +## Instalando um cluster EKS para os nossos testes com Ingress + +Agora que já sabemos como criar um Ingress, e como ele funciona, vamos criar um cluster EKS para testar o Ingress utilizando o eksctl, que é uma ferramenta oficial da AWS para criar clusters EKS. + +Para instalar o eksctl, siga as instruções do link: https://eksctl.io/installation/ + +Após instalar o eksctl, podemos criar o nosso cluster EKS com o comando: + +```bash +eksctl create cluster --name=eks-cluster --version=1.24 --region=us-east-1 --nodegroup-name=eks-cluster-nodegroup --node-type=t3.medium --nodes=2 --nodes-min=1 --nodes-max=3 --managed +``` + +## Entendendo os Contexts do Kubernetes para gerenciar vários clusters + +Quando você está trabalhando com mais de um cluster Kubernetes, é importante entender como os contextos funcionam. Um contexto é um conjunto de parâmetros que determinam como interagir com um cluster Kubernetes. Isso inclui o cluster, o usuário e o namespace. + +Você pode listar os contextos disponíveis no seu ambiente com o comando: + +```bash +kubectl config get-contexts +``` + +Você pode ver qual é o contexto atual com o comando: + +```bash +kubectl config current-context +``` + +Você pode mudar o contexto atual com o comando: + +```bash +kubectl config use-context NOME_DO_CONTEXTO +``` + +## Instalando o Ingress Nginx Controller no EKS + +Com o nosso cluster EKS criado, podemos instalar o Ingress Nginx Controller e fazer o deploy da nossa aplicação. + +Para instalar o Ingress Nginx Controller no EKS, vamos seguir o comando da documentação oficial do Nginx Ingress Controller para AWS: + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/aws/deploy.yaml +``` + +Você pode utilizar a opção `wait` do `kubectl`, assim quando os pods estiverem prontos, ele irá liberar o shell, veja: + +```bash +kubectl wait --namespace ingress-nginx \ + --for=condition=ready pod \ + --selector=app.kubernetes.io/component=controller \ + --timeout=90s +``` + +A instalação do Ingress Nginx Controller no EKS já cria um LoadBalancer automaticamente na AWS, então podemos ver o endereço público do LoadBalancer com o comando: + +```bash +kubectl get services -n ingress-nginx +``` + +Sempre utilize os logs para verificar se o Ingress Controller está funcionando corretamente: + +```bash +kubectl logs -f -n ingress-nginx POD_DO_INGRESS_CONTROLLER +``` + +Acessando o endereço público do LoadBalancer no navegador, você verá a página padrão do Nginx Ingress Controller. Mas não é isso que queremos ver, queremos ver a nossa aplicação rodando. Então vamos fazer o deploy da nossa aplicação e criar um recurso de Ingress para ela. + +```bash +kubectl apply -f app-deployment.yaml +kubectl apply -f app-service.yaml +kubectl apply -f redis-deployment.yaml +kubectl apply -f redis-service.yaml +``` + +## Conhecendo o ingressClassName e configurando um novo Ingress + +O Ingress Class é um recurso do Kubernetes que permite que você defina qual controlador de Ingress deve ser utilizado para um determinado recurso de Ingress. Isso é útil quando você tem mais de um controlador de Ingress no seu cluster, e quer que um recurso de Ingress seja tratado por um controlador específico. + +Até agora, nós não definimos um Ingress Class, já que no Kind temos apenas um controlador de Ingress, o Nginx Ingress Controller. Mas quando estamos trabalhando com um cluster EKS, precisamos obrigatoriamente definir um Ingress Class. + +Vamos utilizar o arquivo `ingress-6.yaml` para criar um novo recurso de Ingress para a nossa aplicação: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-6.yaml +``` + +Como não definimos um domínio válido para o nosso Ingress, vamos acessar a aplicação através do endereço do LoadBalancer. Você pode obter o endereço através do comando: + +```bash +kubectl get ingress +``` + +## Configurando um domínio válido para o nosso Ingress no EKS + +Já que estamos trabalhando com um cluster EKS, e queremos acessar a nossa aplicação através de um domínio, precisamos primeiro ter um domínio válido. Vamos utilizar como exemlo o https://containers.expert para criarmos o subdomínio https://giropops.containers.expert. + +Após configurar o subdomínio no seu provedor de DNS, você pode criar um novo recurso de Ingress com o domínio configurado. Vamos utilizar o arquivo `ingress-7.yaml` para criar um novo recurso de Ingress para a nossa aplicação: + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - host: giropops.containers.expert + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 +``` + +Agora vamos aplicar esse novo recurso de Ingress: + +```bash +kubectl apply -f ingress-7.yaml +``` + +Com nosso domínio e o Ingress configurados, podemos acessar a aplicação através do endereço https://giropops.containers.expert. + +# Final do Day-9 + +Com isso, finalizamos o nosso Day-9. Nós vimos o que é o Ingress, como ele funciona, o que são as classes de Ingress, e como configurar um Ingress no Kubernetes, no Kind e na AWS com EKS. Espero que você tenha aprendido bastante sobre o Ingress, e que esteja pronto para aplicar esse conhecimento no seu dia a dia. Não esqueça de praticar tudo o que aprendeu, e de compartilhar esse conhecimento com outras pessoas. \ No newline at end of file diff --git a/pt/day-9/files/app-deployment.yaml b/pt/day-9/files/app-deployment.yaml new file mode 100644 index 00000000..9144cf49 --- /dev/null +++ b/pt/day-9/files/app-deployment.yaml @@ -0,0 +1,25 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: giropops-senhas + name: giropops-senhas +spec: + replicas: 2 + selector: + matchLabels: + app: giropops-senhas + template: + metadata: + labels: + app: giropops-senhas + spec: + containers: + - image: linuxtips/giropops-senhas:1.0 + name: giropops-senhas + env: + - name: REDIS_HOST + value: redis-service + ports: + - containerPort: 5000 + imagePullPolicy: Always \ No newline at end of file diff --git a/pt/day-9/files/app-service.yaml b/pt/day-9/files/app-service.yaml new file mode 100644 index 00000000..4405694b --- /dev/null +++ b/pt/day-9/files/app-service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: giropops-senhas + labels: + app: giropops-senhas +spec: + selector: + app: giropops-senhas + ports: + - protocol: TCP + port: 5000 + targetPort: 5000 + name: tcp-app + type: ClusterIP \ No newline at end of file diff --git a/pt/day-9/files/ingress-1.yaml b/pt/day-9/files/ingress-1.yaml new file mode 100644 index 00000000..50431b54 --- /dev/null +++ b/pt/day-9/files/ingress-1.yaml @@ -0,0 +1,17 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - http: + paths: + - path: /giropops-senhas + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/ingress-2.yaml b/pt/day-9/files/ingress-2.yaml new file mode 100644 index 00000000..d78329df --- /dev/null +++ b/pt/day-9/files/ingress-2.yaml @@ -0,0 +1,15 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas-static +spec: + rules: + - http: + paths: + - path: /static + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/ingress-3.yaml b/pt/day-9/files/ingress-3.yaml new file mode 100644 index 00000000..b318fa56 --- /dev/null +++ b/pt/day-9/files/ingress-3.yaml @@ -0,0 +1,17 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/ingress-4.yaml b/pt/day-9/files/ingress-4.yaml new file mode 100644 index 00000000..ffb88e72 --- /dev/null +++ b/pt/day-9/files/ingress-4.yaml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: nginx + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: giropops.nginx.io + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: nginx + port: + number: 80 \ No newline at end of file diff --git a/pt/day-9/files/ingress-5.yaml b/pt/day-9/files/ingress-5.yaml new file mode 100644 index 00000000..2a562a5c --- /dev/null +++ b/pt/day-9/files/ingress-5.yaml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: giropops-senhas.io + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/ingress-6.yaml b/pt/day-9/files/ingress-6.yaml new file mode 100644 index 00000000..a27d1c51 --- /dev/null +++ b/pt/day-9/files/ingress-6.yaml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/ingress-7.yaml b/pt/day-9/files/ingress-7.yaml new file mode 100644 index 00000000..b9487308 --- /dev/null +++ b/pt/day-9/files/ingress-7.yaml @@ -0,0 +1,19 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: giropops-senhas + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - host: giropops.containers.expert + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: giropops-senhas + port: + number: 5000 \ No newline at end of file diff --git a/pt/day-9/files/kind-config.yaml b/pt/day-9/files/kind-config.yaml new file mode 100644 index 00000000..1cb7b08e --- /dev/null +++ b/pt/day-9/files/kind-config.yaml @@ -0,0 +1,15 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 \ No newline at end of file diff --git a/pt/day-9/files/redis-deployment.yaml b/pt/day-9/files/redis-deployment.yaml new file mode 100644 index 00000000..99985f73 --- /dev/null +++ b/pt/day-9/files/redis-deployment.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: redis + name: redis-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - image: redis + name: redis + ports: + - containerPort: 6379 + resources: + limits: + memory: "256Mi" + cpu: "500m" + requests: + memory: "128Mi" + cpu: "250m" \ No newline at end of file diff --git a/pt/day-9/files/redis-service.yaml b/pt/day-9/files/redis-service.yaml new file mode 100644 index 00000000..5d7dbf99 --- /dev/null +++ b/pt/day-9/files/redis-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: redis-service +spec: + selector: + app: redis + ports: + - protocol: TCP + port: 6379 + targetPort: 6379 + type: ClusterIP \ No newline at end of file