Implantando o Kubernetes na área de trabalho em minutos com o MicroK8s

Começar com o Kubernetes nem sempre é fácil. Nem todo mundo tem a infraestrutura necessária para implantar um cluster Kubernetes completo. O Kubernetes oferece o utilitário Minikube para operação local. O Minikube é uma ferramenta bastante simples e conveniente, e existem vários cursos de treinamento sobre como trabalhar com o Minikube. Mas, no entanto, não se pode dizer sobre o Minikube que, usando esse utilitário, você pode implantar o ambiente Kubernetes em alguns minutos.

Hoje, quero falar sobre o pacote MicroK8s , que, sem exageros, permite implantar o Kubernetes localmente em alguns minutos e iniciar o desenvolvimento. Nem mesmo o Docker e o Kubernetes pré-instalados são necessários, pois tudo incluído. Nesta lição, você considerará a implantação do aplicativo Django no ambiente local do Kubernetes.

Como fonte, segui uma série de artigos de Mark Gituma , que descreviam trabalhos semelhantes, mas apenas com o Minikube, e não com o MicroK8s.

No entanto, há um requisito que deve ser atendido antes de iniciar o trabalho. Você deve ter o Snap instalado, o que significa que você deve ter o Linux instalado.

A instalação do MicroK8s é descrita no manual do site . No entanto, esta é apenas uma linha:

sudo snap install microk8s --classic 

Além disso, pode ser necessário iniciar o ambiente:

 sudo microk8s.start 

Em seguida, você precisa ativar a extensão. Uma lista completa de extensões pode ser obtida com o comando microk8s.enable --help : dashboard, dns, gpu, ingress, istio, Metrics-Server, Registry, Storage. Você pode ativar imediatamente tudo, exceto gpu e istio, porque o primeiro deles requer um driver pré-instalado e o segundo atualiza essencialmente o ambiente e (pessoalmente, na minha área de trabalho fraca) carrega muito o sistema.

 microk8s.enable dashboard dns ingress metrics-server registry storage 

Como agora você pode concluir da lista de extensões, você terá acesso a muitos serviços, incluindo painel e métricas.

Crie um Dockerfile para criar a imagem:

 FROM python:3-slim LABEL maintainer="mark.gituma@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"] 

e o arquivo com as dependências required.txt necessárias:

 celery==4.1.0 Django==2.0 kombu==4.1.0 

Vamos coletar a imagem. Para isso, você não precisa de um Docker pré-instalado, porque Ele vem com o MicroK8s:

 microk8s.docker build django -t apapacy/tut-django:1.0.0 

Se você coletar a imagem com a janela de encaixe instalada anteriormente, pode não ser suficiente coletar a imagem e enviá-la para o registro local, que também acompanha o MicroK8s, e funciona na porta 32000:

 microk8s.docker tag apapacy/tut-django:1.0.0 localhost:32000/apapacy/tut-django:1.0.0 microk8s.docker push localhost:32000/apapacy/tut-django:1.0.0 

Provavelmente, essa etapa não será necessária, mas, para completar, apontei para ela e, ao mesmo tempo, chamei sua atenção para o fato de que você possui um registro de docker local.

O componente básico do Kubernetes é o Pod (Pod), no qual o contêiner funciona (geralmente um, mas pode haver vários). Pods podem ser criados por vários meios. Mas hoje estamos interessados ​​em Implantação (Implantação). A implantação descreve o modelo pelo qual os Pods são criados. A implantação é definida usando arquivos de configuração yml. Na configuração de Implantação, você especifica o número de réplicas do Pod e a imagem da qual esse Pod e suas réplicas serão coletadas, bem como a porta (porta 8000 na qual o Django do Dockerfile funciona - sem mágica):

 apiVersion: apps/v1beta2 kind: Deployment metadata: name: django labels: app: django spec: replicas: 2 selector: matchLabels: pod: django-container template: metadata: labels: pod: django-container spec: containers: - name: django-web image: localhost:32000/apapacy/tut-django:1.0.0 ports: - containerPort: 8000 

O depósito é carregado na quarta-feira pela equipe:

 microk8s.kubectl apply -f config/deployment.yml 

Paralelamente, você pode executar um comando que monitorará as ações que ocorrem durante a implantação:

 watch microk8s.kubectl get all 

Agora você tem vários Pods com aplicativos Django aos quais você não tem acesso. Para que os Pods se comuniquem entre si e com o mundo exterior, existe outra abstração - este é o Serviço. Serviço, como Implantação, é definido pelo arquivo de configuração:

 kind: Service apiVersion: v1 metadata: name: django-service spec: selector: pod: django-container ports: - protocol: TCP port: 8000 # targetPort: 8001 type: ClusterIP # type: NodePort 

O seletor pod: django-container determina qual implantação será atendida pelo Serviço (o nome do seletor de pod não é predefinido - é apenas um rótulo que deve corresponder). O serviço é carregado de maneira semelhante ao Deployment:

 microk8s.kubectl apply -f config/service.yml 


Após o download, o Serviço pode ser acessado no endereço de rede interno. Se você executar o comando microk8s.kubectl get all , poderá ver este endereço:

 service/django-service ClusterIP 10.152.183.156 none 8000/TCP 3h33m 


Executando o comando curl (ou abrindo um navegador), obtemos a página de boas-vindas do Django:

 curl 10.152.183.156:8000 

Existem duas linhas comentadas na configuração do serviço. Se você descomentá-los, o serviço estará disponível adicionalmente a partir de uma rede externa através de uma porta aleatória na faixa de 32000 ou superior.

Para obter um endereço permanente para o Serviço, pelo qual será possível entrar em contato com a rede externa, o MicroK8s oferece duas opções: 1) entrada e 2) estação. A maneira mais fácil de fazer isso é com a entrada. Se ainda não estiver ativado, será necessário ativar o componente de entrada:

 microk8s.enable ingress 

Depois disso, você pode verificar se esse componente está instalado e funcionando, executando o comando microk8s.kubectl get all . Algumas entradas devem aparecer na lista de aplicativos e serviços com o nome default-http-backend . Em particular, um serviço em execução na porta 80 deve aparecer:

 service/default-http-backend ClusterIP 10.152.183.42 none 80/TCP 179m 

O nome default-http-backend é o nome predefinido no MicroK8s. É com esse nome que você deve consultar esse serviço nas configurações de entrada.

As configurações de entrada se assemelham às configurações de um servidor da web ou servidor proxy e, em algum lugar do sistema, elas são. Portanto, hosts, caminhos e portas estão presentes neles - todos os atributos familiares:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tut-django annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-backend servicePort: 80 rules: - host: localhost http: paths: - path: /django backend: serviceName: django-service servicePort: 8000 

A configuração de entrada é carregada com o comando:

 microk8s.kubectl apply -f config/ingress.yml 

Depois disso, a página de boas-vindas do Django estará disponível em localhost / django

Isso é tudo por hoje.

Links úteis:

1. github.com/apapacy/microk8s-tut
2. medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817

apapacy@gmail.com
10 de fevereiro de 2019

Source: https://habr.com/ru/post/pt439734/


All Articles