Este post é o primeiro passo de uma série onde abordaremos diferentes funcionalidades e aplicações da solução Acorn. Aqui, vamos explicar como é feita a instalação da solução no cluster Kubernetes e como provisionar a primeira aplicação usando a solução.
Do ponto de vista de um desenvolvedor, o processo de provisionamento de uma aplicação em ambiente Kubernetes é complexo e trabalhoso: além do conhecimento de diferentes componentes ser necessário, também é relevante o conhecimento de diversas ferramentas e processos para a configuração de pipelines.
Em um processo tradicional trabalhando com Helm, as seguintes etapas precisam ser executadas para que uma aplicação mínima seja provisionada em um ambiente Kubernetes.
Construção da imagem de container
Publicação da imagem em um container registry
Construção de um Helm Chart com todos os templates necessários
Atualização do arquivo de Values referenciando as imagens construídas
Provisionamento do Helm Chart no ambiente Kubernetes.
Por que Acorn?
Dada a complexidade do provisionamento de aplicações, a Acorn tem trabalhado para simplificar este processo para desenvolvedores, eliminando a necessidade de conhecimento de arquitetura e objetos Kubernetes e unificando o processo de construção das imagens de container e provisionamento da aplicação.
A solução permite o empacotamento de todas as imagens de container, configuração e especificações de provisionamento em uma única Acorn image que pode ser provisionada dentro de qualquer ambiente Kubernetes. Todo esse processo é feito a partir da definição de um único arquivo Acornfile.
Como instalar a solução Acorn?
Requisitos
Kubernetes 1.23 ou mais recente.
Privilégio de administrador para a instalação do Acorn
Ingress Controller configurado no cluster
Comunicação kubectl com o cluster a partir da estação de trabalho utilizada
Para a instalação basta executar (Mac OS)
brew install acorn-io/cli/acorn
ou (Mac OS e Linux)
curl https://get.acorn.io |sh
ou Windows
scoop install acorn
Após essa etapa basta executar o seguinte comando para que o Acorn APIServer e o Controller sejam configurados dentro do cluster Kubernetes.
acorn install
Com isso, será executado automaticamente todo o processo de validação e instalação dos componentes necessários.
✔ Running Pre-install Checks
✔ Installing ClusterRoles
✔ Installing APIServer and Controller
✔ Waiting for controller deployment to be available
✔ Waiting for API server deployment to be available
✔ Waiting for registry server deployment to be available
✔ Running Post-install Checks
✔ Installation done
Provisionamento de Aplicação
Para fins de demonstração, vamos utilizar a seguinte aplicação em python:
Crie um arquivo app.py com o seguinte conteúdo:
from flask import Flask, render_template_string
# HTML Jinja2 Template which will be shown in the browser
page_template = '''
<div style="margin: auto; text-align: center;">
<h1>O3S - Acorn!</h1>
</div>
'''
# Defining the Flask Web App
app = Flask(__name__)
# Define the root path to display Hello World!
@app.route('/')
def root():
return render_template_string(page_template)
Em seguida, crie um arquivo requirements.txt apenas com a informação abaixo:
flask
Para a Definição da imagem de container vamos criar o seguinte arquivo Dockerfile
FROM python:3-alpine
WORKDIR /app
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
ADD requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["flask", "run"]
Diferentemente do processo trabalhando com Helm, a partir desse ponto a Acorn requer apenas a definição de um arquivo Acornfile.
Acornfile
O Acornfile descreve todo o processo de construção dos containers e encapsula todo o processo de provisionamento da aplicação no ambiente Kubernetes. Com isso, toda a etapa de definição de arquivos yaml de Deployment, Service, Ingress, Secret e etc é eliminado.
Para o provisionamento da aplicação criada anteriormente, vamos definir o seguinte arquivo Acornfile dentro do mesmo diretório.
containers: {
app: {
build: "."
ports: publish: "5000/http"
}
}
Pronto, para provisionarmos essa aplicação dentro do ambiente Kubernetes necessitamos agora apenas executar o seguinte comando:
acorn run .
Com isso, a imagem de container e os objetos necessários serão construídos e compilados dentro de uma única imagem Acorn que será provisionada dentro do cluster Kubernetes conectado. A aplicação ficará imediatamente disponível a partir da entrada de ingress que será configurada automaticamente.
Neste exemplo, os seguintes componentes foram provisionados dentro do cluster:
Namespace
Deployment
Service
Ingress
ServiceAccount
A criação desses mesmos componentes manualmente ou via Helm Chart requer a definição de centenas de linhas de arquivos yaml, além da definição de arquivos de Values e todo o controle de atualização da aplicação via pipeline. Além disso, todo o processo de construção de imagem de container está fora do escopo do Helm Chart e precisa ser feito em um processo separado.
A Acorn simplifica todo esse processo a um único arquivo Acornfile que, no nosso exemplo, necessitou de apenas de 6 linhas de informações para a construção da imagem e definição dos componentes necessários. Essa redução de complexidade permite que o provisionamento no cluster seja feita com pouco ou nenhum conhecimento de arquitetura Kubernetes, necessitando apenas da declaração dos parâmetros do Acornfile.
Nos próximos posts iremos explorar diversas outras funcionalidades da solução, como a definição de múltiplas imagens, configuração de secrets, volumes persistentes, integração com registry e etc.
Para mais informações entre em contato via site O3S.
Comments