Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta grátis, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Introdução a clusters do Kubernetes baseados em arquitetura Arm no Oracle Cloud Infrastructure
Este tutorial explica como criar clusters do Kubernetes baseados em arquitetura Arm que usam a plataforma de computação Ampere A1 no Oracle Cloud Infrastructure(OCI). Você também implantará o popular contêiner web, o Apache Tomcat no cluster kubernetes. Usando os métodos deste tutorial, você pode criar implantações de aplicativo perfeitamente portáveis entre os clusters kubernetes baseados em Arm e os clusters baseados em x86(Intel e AMD).
Introdução
Objetivos
Neste tutorial, você vai:
- Crie um cluster do Kubernetes (OKE) ativado pela computação Ampere A1.
- Implante o Apache Tomcat no cluster.
- Crie implantações que sejam facilmente portáveis nos clusters kubernetes baseados em x86 e Arm.
- Implante aplicativos Java e microsserviços no contêiner web Tomcat.
O que é a Plataforma de Computação A1 Ampere
A plataforma de computação Ampere A1 baseada em CPUs Ampere Altra representa uma mudança geracional para empresas e desenvolvedores de aplicativos que estão criando cargas de trabalho que podem ser dimensionadas de dispositivos de borda para data centers em nuvem. O design exclusivo dessa plataforma oferece desempenho consistente e previsível, pois não há conflito de recursos em um núcleo de computação e oferece mais isolamento e segurança. Esta nova classe de configurações de computação no Oracle Cloud Infrastructure oferece uma plataforma incomparável que combina o poder das CPUs Altra com a segurança, a escalabilidade e o ecossistema de serviços no OCI.
Apresentando a Arquitetura Arm para seu Ambiente
Ao introduzir a arquitetura Arm no processo de desenvolvimento de aplicativos, seus workflows de desenvolvimento permanecem os mesmos na maioria dos casos. As ferramentas e o processo que você usa no momento serão carregados sem problemas, e a configuração da estação de trabalho de desenvolvimento permanecerá a mesma. A exceção geral a isso são aplicativos de sistema de baixo nível que direcionam recursos específicos da CPU usando ferramentas altamente especializadas. Na maioria dos casos, você pode esperar pequenas alterações nas etapas de criação ou empacotamento em seu workflow, para suportar a arquitetura Arm. Comece analisando seu workflow existente para identificar se você tem alguma etapa de criação ou empacotamento específica da plataforma.
- As etapas de criação específicas da plataforma podem ser opções do compilador, no caso de linguagens compiladas, como C/C++, Go e Rust. Nesses casos, você geralmente adiciona uma etapa de criação para compilar seu aplicativo para o Arm juntamente com a versão x86 do aplicativo. Se você estiver usando uma linguagem de código de bytes, uma linguagem compilada Just-In-Time (JIT) ou uma linguagem interpretada como Java, JavaScript, TypeScript, Python ou Ruby, geralmente não há flags ou opções de tempo de compilação. Essas linguagens não produzem binários executáveis específicos da plataforma; em vez disso, elas usam um runtime específico da plataforma, como o runtime Java ou Node.js para Arm, que executa o mesmo código-fonte em várias plataformas.
- O empacotamento específico da plataforma inclui empacotamento de seus aplicativos como imagens do Docker, imagens de VM personalizadas ou artefatos de implantação específicos da plataforma. Nesses casos, você desejará alterar seu processo de criação com uma etapa adicional para produzir o pacote de aplicativos específico ao Arm. No caso de imagens de contêiner, por exemplo, você desejará ter uma versão da imagem do seu aplicativo para implantação em um sistema Arm. Os formatos de imagem de contêiner suportam várias arquiteturas, de modo que os tempos de execução de contêiner de cada plataforma possam simplesmente extrair a imagem apropriada e executar o aplicativo. Consulte o blog do Docker para saber mais sobre imagens de vários arquivos e como criá-las.
Criar um Cluster Kubernetes Baseado em Arm
O Container Engine for Kubernetes é fácil de começar a usar e, combinado com o OCI Cloud Shell, você pode ter controle total sem precisar configurar um ambiente local. Para começar, crie um novo cluster do Kubernetes no OCI.
-
No menu de navegação da Console do Oracle Cloud, vá para Serviços do Desenvolvedor e clique em Clusters do Kubernetes.
-
Clique em Criar Cluster. Você pode usar a opção Criação Rápida para usar valores padrão ou a opção Criação Personalizada para especificar configurações avançadas. Aqui, usamos a Criação Rápida porque os padrões que ela escolhe são um ótimo começo.
-
Na página Criar Cluster, escolha algumas opções de configuração básicas, como a versão do Kubernetes que você deseja executar e o número e a forma dos nós do cluster. Para este tutorial, escolha a forma Ampere A1 para os nós.
Observação Escolha a forma
VM.Standard.A1.Flex
para os nós, conforme mostrado.Descrição do workflow de criação da ilustração
Você também pode especificar um nome e um compartimento para o cluster. O tipo de visibilidade indica se os nós do cluster podem ser acessados pela internet, por exemplo, por meio de SSH. É mais comum mantê-los em uma rede privada e usar bastion ou jump hosts na rede pública para fornecer caminhos de acesso. Aqui escolhemos o padrão de manter os nós privados.
-
Clique em Criar Cluster e o workflow começa a criar todos os recursos necessários e o próprio cluster.
Depois que os recursos de suporte forem criados, a página de detalhes do cluster será exibida. Em alguns minutos, o cluster é criado e ativado.
-
Depois que o status do cluster for Ativo, clique no botão Acessar Cluster para ver as maneiras de acessar o cluster.
-
Escolha a opção Cloud Shell. O Cloud Shell é um ambiente de terminal on-line completo, integrado à Console. O Cloud Shell tem todas as ferramentas necessárias para interagir com seu cluster do Kubernetes e é a maneira mais rápida de começar sem configurar um ambiente de desenvolvimento local.
Descrição da ilustração access cloudshell
Você pode iniciar o Cloud Shell diretamente da página. Observe que o acesso ao Cloud Shell também está disponível na parte superior da Console sempre, para acesso rápido.
A página também inclui um comando a ser executado no Cloud Shell. Este comando usa a CLI do OCI para criar o arquivo kubeconfig. Os clientes Kubernetes, como
kubectl
, podem trabalhar com um arquivo de configuração que facilita o acesso ao cluster. Esse arquivo geralmente é chamado de arquivo kubeconfig. Geralmente, esse arquivo de configuração reside em ~/.kube. Um único arquivo de configuração pode conter configuração de acesso para vários clusters.Observação A CLI do OCI já está instalada e configurada para você no ambiente do Cloud Shell.
-
Inicie o Cloud Shell e copie o comando e cole-o no Cloud Shell para executá-lo. O cliente de linha de comando padrão para o Kubernetes é o kubectl e é pré-instalado no ambiente do Cloud Shell.
Agora, vamos verificar se podemos interagir com o cluster e ver os nós do cluster.
-
Copie o comando a seguir para o Cloud Shell e execute-o.
kubectl get nodes -o wide
Você deverá ver uma saída semelhante ao exemplo a seguir, dependendo do número de nós no cluster. Observe que a versão do kernel mostra que estamos executando o Oracle Linux para a arquitetura
aarch64
(Arm 64 bits).NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 10.0.10.229 Ready node 3d7h v1.19.7 10.0.10.229 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.29 Ready node 3d7h v1.19.7 10.0.10.29 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.87 Ready node 3d7h v1.19.7 10.0.10.87 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11
Agora que você tem um cluster do Kubernetes totalmente funcional e configurou as ferramentas para interagir com ele, você pode implantar qualquer carga de trabalho do kubernetes nele.
Implantações Contínuas para seus Clusters do Kubernetes
Agora você pode implantar cargas de trabalho em contêineres no cluster kubernetes baseado em Arm. As imagens de contêiner são criadas para arquiteturas específicas. Ferramentas de contêiner como Docker ou Buildah fornecem os métodos para gerenciar essas imagens e sua implantação perfeitamente. Neste exemplo, você implantará o Apache Tomcat, o popular contêiner web Java no cluster kubernetes. O runtime do docker extrairá a imagem arm64v8
ao executar no Arm e a imagem amd64
ao executar nas arquiteturas x86. Isso nos permite criar manifestos de implantação de kubernetes portáteis perfeitamente desde que criemos as imagens do aplicativo para ambas as arquiteturas.
Comece criando uma arquitetura - manifesto de implantação neutro. O manifesto não deve fazer referência a contêineres específicos da arquitetura, pois o runtime do contêiner é capaz de detectar a arquitetura correta e extrair a imagem apropriada. Para criar o manifesto, execute o commend abaixo. Ele cria um novo arquivo chamado tomcat.yaml
.
cat <<EOF > tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
labels:
app: tomcat
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9
ports:
- containerPort: 8080
volumeMounts:
- name: app-volume
mountPath: /usr/local/tomcat/webapps/
volumes:
- name: app-volume
configMap:
name: app-bundle
---
apiVersion: v1
kind: Service
metadata:
name: tomcat
labels:
app: tomcat
spec:
ports:
- port: 80
name: http
targetPort: 8080
selector:
app: tomcat
type: LoadBalancer
EOF
Este manifesto contém os seguintes objetos e ações:
- Um objeto de implantação com o nome
tomcat
e o labelapp: tomcat
. - A implantação tem 3 réplicas.
- Os pods na implantação têm um único contêiner -
tomcat:9
. Observe que o manifesto não especifica a arquitetura, tornando-a válida em todas as arquiteturas. O Docker extrairá a imagem que suporta a arquitetura apropriada no runtime. - Um objeto Volume é criado de um ConfigMap e montado no contêiner. Este ConfigMap será criado posteriormente e conterá o aplicativo.
- O manifesto também contém um objeto de Serviço e expõe a implantação em um LoadBalancer.
-
Faça download do aplicativo de amostra do Apache Tomcat e crie-o como um ConfigMap.
wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war kubectl create configmap app-bundle --from-file sample.war
Observação Esse método de montagem de um aplicativo usando ConfigMap é apenas por conveniência e não deve ser usado em aplicativos de produção.
-
Implante o manifesto. Isso cria os objetos kubernetes, incluindo a Implantação e o Serviço. Ao criar a implantação, o runtime do docker detectará sua execução na arquitetura do braço de teh e selecionará automaticamente a variante do Arm do contêiner do Apache Tomcat. O aplicativo Java implantado no contêiner é neutro na plataforma e, portanto, o mesmo arquivo
.war
pode ser implantado em todas as arquiteturas.kubectl apply -f tomcat.yaml
-
Verifique seu status de implantação
kubectl get deploy,svc
Você deve ver uma saída semelhante à seguinte
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tomcat 2/2 2 2 9s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d9h service/tomcat LoadBalancer 10.96.120.212 <pending> 80:32547/TCP 9s
Isso mostra que o Tomcat foi implantado com sucesso em nosso cluster kubernetes baseado em Arm e está atendendo a um aplicativo Web Java. O manifesto de implantação que usamos não está vinculado à arquitetura e pode ser usado para x86, bem como clusters baseados em Arm.
-
Opcionalmente, você pode obter detalhes detalhados no nível do nó executando
kubectl get nodes -o wide kubectl describe node <node_name>
São exibidas informações detalhadas sobre o nó, incluindo a arquitetura e os pods programados nesse nó.
Quando o endereço IP externo para o LoadBalancer estiver disponível (pode levar alguns minutos), você poderá visitar a implantação indicando seu web browser para
http://<your_loadbalancer_ip_address>/sample
Próximas Etapas
Explore mais cargas de trabalho que você pode implantar no seu cluster kubernetes baseado em Arm visitando o repositório do hub do docker das imagens oficiais arm64v8
aqui
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Get started with Arm-based Kubernetes clusters in Oracle Cloud Infrastructure
F50327-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.