Instanciar objetos no Cluster Nacional utilizando o Kubernetes
Nesta atividade iremos explorar algumas possibilidades utilizando o Kubernetes para instanciar objetos no Cluster Nacional.
Iremos utilizar alguns conceitos mencionados anteriormente para demonstrar em um ambiente real, como podemos subir pods, deployments ,services, ConfigMap...
Como exemplo iremos subir uma aplicação web utilizando deployments, services e demais configurações, de forma que a mesma fique acessível externamente.
Para o acesso ao Namespace iremos utilizar o seguinte comando :
ssh -i .ssh/{USER} {USER}@xx.xx.xx.xx -p xx
Os arquivos que se encontram nos diretórios dos namespaces Não devem ser alterados!
Parte-01
1- Subindo nosso Primeiro Pod no Cluster Nacional
cd WTESTBEDS-2025
As etapas foram estruturadas em partes 01 , 02 e 03.
cd parte-01
Temos 3 arquivos : pod.yml, deployment.yml, service.yml
Utilize o comando cat para visualizar o arquivo pod-v1.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
name: wtestbeds
labels:
app: wtestbeds
spec:
containers:
- name: wtestbeds
image: nginx:latest
A aplicação que iremos executar trata-se de um:
2- Subindo nosso primeiro deployment no Cluster Nacional
Utilize o comando cat para visualizar o arquivo deployment-v1.yaml
cat deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wtestbeds
labels:
app: wtestbeds
spec:
replicas: 5
selector:
matchLabels:
app: wtestbeds
template:
metadata:
name: wtestbeds
labels:
app: wtestbeds
spec:
containers:
- name: wtestbeds
image: nginx:latest
Para criamos o nosso primeiro deployment utilizamos o comando abaixo:
kubectl apply -f deployment.yml
Observe que o deployment foi criado corretamente:
kubectl get pods
Para uma descrição mais detalhada utilize:
kubectl get pods -o wide
Para criamos o nosso primeiro pod utilizamos o comando abaixo:
kubectl apply -f pod.yml
Observe que o pod foi criado corretamente:
kubectl get pods
Para uma descrição mais detalhada utilize:
kubectl get pods -o wide
Digite o comando abaixo para deletarmos o pod que criamos:
kubectl delete -f pod.yaml
3- Subindo nosso primeiro Service no Cluster Nacional
Agora que o nosso deployment foi criado vamos criar um serviço para que possamos acessar a aplicação web.
Vamos criar um service do tipo NodePort , veja o arquivo service-v1.yaml:
apiVersion: v1
kind: Service
metadata:
name: svc-wtestbeds
labels:
app: svc-wtestbeds
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: xxxxx
selector:
app: wtestbeds
Para criamos o nosso primeiro service utilizamos o comando abaixo:
Kubectl apply -f service.yml
Kubectl get service
#Parte-02
1- Configurando o NGINX utilizando objetos do tipo deployment.
Utilizaremos a mesma aplicação, porém, faremos algumas atualizações no Deployment .
cd parte-02
Observe que dentro da pasta temos temos os seguintes arquivos:
comands.txr , deployment.yml, homepage.html, nginx.config
No arquivo homepage.html foi implementado uma página simples para demonstrar como podemos subir aplicações web no Cluster Nacional utilizando a orquestração em Kubernetes:
cat homepage.html
<!-- ####### THIS IS A COMMENT - Visible only in the source editor #########-->
<h1 style="text-align: center;"><img src="https://rcc.rnp.br/assets/rnp.png" alt="Redes de Colaboração de Comunidades (RCC) | Rede Nacional de Ensino e Pesquisa (RNP)" width="248" height="140" /></h1>
<h1 style="text-align: center;">Bem-vindo ao WTestbeds 2025!</h1>
<p style="font-size: 1.5em; text-align: center;">Parabéns! Você acaba de provisionar um serviço no cluster kubernetes da RNP!</p>
<p style="font-size: 1.5em; text-align: center;"> <strong data-start="206" data-end="249">Explore o Futuro com os Laboratório Nacional Multiusuário da RNP</strong></p>
<p style="font-size: 1.5em; text-align: center;">Tem uma ideia inovadora em Redes, Computação, Blockchain, IoT ou Segurança Cibernética?<br data-start="331" data-end="334" /> A RNP oferece a infraestrutura ideal para transformar sua pesquisa em realidade com ambientes de teste isolados, escaláveis e seguros, projetados para <strong data-start="574" data-end="608">experimentação em larga escala</strong>, <strong data-start="610" data-end="644">avaliação de novas tecnologias</strong> e <strong data-start="647" data-end="698">validação de soluções científicas ou de mercado</strong>.</p>
<p style="text-align: center;">Contate-nos por meio do atendimento@rnp.br.</p>
Iremos apontar essa página no nosso arquivo de configuração nginx.config:
cat nginx.config:
events {}
http {
server {
listen 80;
location / {
root /usr/share/nginx/html;
index homepage.html;
}
}
}
cat deployment-v2.yaml
Para que o funcionamento da página ocorra com sucesso, precisamos realizar a criação de um Config Map , para isso iremos iremos utilizar o comando localizado arquivo de texto comands.txt:
cat comands.txt
kubectl create configmap wtestbeds-nginx-config --from-file=nginx.conf --from-file=homepage.html
Após isso podemos criar o deployment para implementar a página:
cat deployment,yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wtestbeds
labels:
app: wtestbeds
spec:
replicas: 5
selector:
matchLabels:
app: wtestbeds
template:
metadata:
name: wtestbeds
labels:
app: wtestbeds
spec:
containers:
- name: wtestbeds
image: nginx:latest
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: nginx-config-volume
mountPath: /usr/share/nginx/html/homepage.html
subPath: homepage.html
volumes:
- name: nginx-config-volume
configMap:
name: wtestbeds-nginx-config
Aplica o comando abaixo para instanciar o deployment:
Kubectl apply -f deployment.yml
Observe se os pods foram criados corretamente de acordo com a quantidade de replicas indicada :
Kubectl get pod
Para uma descrição mais detalhada utilize:
kubectl get pods -o wide
Para observarmos a criação dos pods em tempo real podemos utilizar o seguinte comando :
watch ' kubectl get pod -o wide
#Parte-03
Nessa etapa final iremos configurar o Ingress do NGINX .
Essa configuração do Ingress NGINX no Kubernetes permitirá a implementação de um controlador de entrada (Ingress Controller). Ele é responsável por gerenciar o acesso externo (via HTTP/HTTPS) aos serviços internos do cluster, funcionando como um proxy reverso.
Observe o arquivo de configuração e modifique o endereço host inserindo user-xx.wtestbeds.rnp.br:
cat nginx-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wtestbeds
annotations:
ingressClassName: "nginx"
spec:
rules:
- host: wtestbeds.rnp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wtestbeds
port:
number: 80
Aplique as configurações :
kubectl apply -f nginx-ingress.yml
Agora é possível acessar a página criada através do endereço:
wtestbeds.rn.br:Porta_do_serviço
A porta utilizada deve ser a Node Port utilizada para instanciar o serviço anteriormente.
Ex: 300xx