Avaliação anterior:
Capítulo 1: [Conceitos e tecnologias nativas da nuvem]
Capítulo 2: [Projeto e desenvolvimento de aplicativos em contêineres]
Capítulo 3: [3.1 Construção do Container Orchestration System e Kubernetes Cluster]
Capítulo 3: [3.2 Implantação e atualização de aplicativos baseados em contêiner]
Escalonamento automatizado e balanceamento de carga
3.3 Expansão automática e balanceamento de carga
O dimensionamento automatizado nativo da nuvem e o balanceamento de carga são os principais aspectos dos aplicativos nativos da nuvem e ajudam a garantir alta disponibilidade e escalabilidade de aplicativos nativos da nuvem.
Então, o que é dimensionamento de automação nativa da nuvem?
3.3.1 Dimensionamento automatizado nativo da nuvem e balanceamento de carga
O dimensionamento automatizado nativo da nuvem refere-se ao uso de ferramentas automatizadas para aumentar ou diminuir automaticamente o número de contêineres para responder aos requisitos do aplicativo . Essas ferramentas automatizadas podem ser Kubernetes Autoscaler (KAAS) ou Docker Autoscaler, que podem detectar automaticamente a carga do aplicativo e aumentar ou diminuir automaticamente o número de contêineres de acordo com a carga. Esse dimensionamento automatizado ajuda a garantir a disponibilidade e o desempenho de aplicativos nativos da nuvem sob alta carga.
O balanceamento de carga nativo da nuvem refere-se à distribuição de tráfego em vários contêineres para garantir alta disponibilidade e desempenho dos aplicativos. Um balanceador de carga nativo da nuvem pode ser um balanceador de carga Kubernetes ou um balanceador de carga Docker, que pode distribuir o tráfego em vários contêineres com base no caminho de solicitação, endereço IP ou rótulo do aplicativo. Esse balanceamento de carga ajuda a garantir que o tráfego de aplicativos nativos da nuvem seja balanceado em diferentes contêineres, melhorando assim a disponibilidade e o desempenho dos aplicativos.
Em resumo, o dimensionamento automatizado nativo da nuvem e o balanceamento de carga ajudam a garantir alta disponibilidade e escalabilidade de aplicativos nativos da nuvem, melhorando assim a confiabilidade e o desempenho do aplicativo.
3.3.2 O código Java realiza expansão automática e balanceamento de carga da nuvem nativa
Para usar o código Java para obter dimensionamento e balanceamento de carga automatizados nativos da nuvem, você precisa usar algumas estruturas e bibliotecas nativas da nuvem, como Kubernetes API Server
, Docker Engine
e Prometheus
. Essas ferramentas nos ajudam a automatizar o dimensionamento e o balanceamento de carga para melhorar a disponibilidade e o desempenho do aplicativo.
Aqui está um exemplo simples que mostra como automatizar o dimensionamento e o balanceamento de carga usando essas estruturas e bibliotecas:
- Criar um Cluster Kubernetes : você pode usar Kubeadm ou Kubectl para criar um
Cluster Kubernetes. Um arquivo de configuração do Kubeadm pode ser criado com o seguinte comando:
kubectl create file /etc/kubernetes/kubeadm-config.yaml
- Em seguida, faça upload do arquivo para o Kubernetes Cluster com o seguinte comando:
kubectl apply -f /etc/kubernetes/kubeadm-config.yaml
- Criar um Kubernetes Controller : Crie um Kubernetes Controller para implantar aplicativos em um Kubernetes Cluster. Um Controller pode ser criado com o seguinte comando:
kubectl apply -f https://kubernetes.io/docs/tasks/administer-cluster/create-controller.yaml
- Crie um repositório do Docker : crie um repositório do Docker para implantar aplicativos em um cluster Kubernetes. Um repositório do Docker pode ser criado com o seguinte comando:
docker login <Kubernetes Cluster IP>:<Kubernetes Cluster Port> docker push <Docker Image Name>
- Implemente o aplicativo : implemente o aplicativo usando o Kubernetes API Server. O aplicativo pode ser implantado com o seguinte comando:
kubectl apply -f <Application Deployment>.yaml
- Aplicativo de monitoramento : Use o Prometheus para monitorar o aplicativo. Um coletor do Prometheus pode ser criado com o seguinte comando:
prometheus-client -n <Deployment Name> --prom-label <Deployment Label>