Implantar um Ambiente Nativo do Oracle Cloud Altamente Disponível
Introdução
O Oracle Cloud Native Environment é uma suíte totalmente integrada para o desenvolvimento e o gerenciamento de aplicativos nativos da nuvem. O módulo Kubernetes é o módulo principal. É usado para implantar e gerenciar contêineres e também instala e configura automaticamente Contêineres CRI-O, runC e Kata. O CRI-O gerencia o runtime de contêiner para um cluster do Kubernetes. O runtime pode ser Contêineres runC ou Kata.
Objetivos
Este tutorial mostra como instalar e configurar o Oracle Cloud Native Environment Release 1.4 com um cluster do Kubernetes altamente disponível.
Ao implantar um cluster do Kubernetes altamente disponível, você precisa configurar um balanceador de carga para permitir a alta disponibilidade do cluster. Você pode usar sua própria implementação de balanceador de carga ou pode usar o balanceador de carga incorporado. Este tutorial inclui as etapas para configurar o balanceador de carga incorporado.
Neste tutorial, você também configura Certificados de CA Privada X.509 usados para gerenciar a comunicação entre os nós e para o serviço Kubernetes externalIPs. Há outros métodos para gerenciar e implantar os certificados, como usando o gerenciador de segredos do Vault HashiCorp ou usando seus próprios certificados, assinados por uma Autoridade de Certificação (CA) confiável. Esses outros métodos não são incluídos neste tutorial.
Pré-requisitos
Os sistemas de host para executar as etapas neste tutorial são listados nesta seção. Você precisa:
-
6 sistemas Oracle Linux a serem usados como:
-
Nó do operador
-
3 nós do plano de controle do Kubernetes
-
2 nós de trabalho do Kubernetes
Em um ambiente de produção, é recomendável que você tenha um cluster com pelo menos cinco nós de plano de controle e pelo menos três nós de trabalho.
-
-
Um endereço IP virtual para o nó do plano de controle principal. Esse endereço IP não deve estar em uso em nenhum nó e é designado dinamicamente ao nó do plano de controle designado como controlador principal pelo balanceador de carga.
Dica: Se você estiver implantando em instâncias virtuais do Oracle Cloud Infrastructure, poderá designar um endereço IP privado secundário à VNIC em um nó do plano de controle para criar um endereço IP virtual. Certifique-se de listar esse nó do plano de controle primeiro ao criar o módulo do Kubernetes. Neste tutorial que é
control1.example.com
. Para obter mais informações sobre endereços IP privados secundários, consulte a documentação do Oracle Cloud Infrastructure. -
Os sistemas devem ter no mínimo um dos seguintes valores:
-
Oracle Linux 7 Update 5 (x86_64) instalado e executando o Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
Oracle Linux 8 Update 3 (x86_64) instalado e executando o Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
-
Os sistemas devem ter um dos seguintes pacotes instalados:
oracle-olcne-release-el7
para o Oracle Linux 7oracle-olcne-release-el8
para o Oracle Linux 8
-
Os sistemas ativaram os seguintes repositórios yum.
Oracle Linux 7:
ol7_olcne14
ol7_kvm_utils
ol7_addons
ol7_latest
ol7_UEKR6
Oracle Linux 8:
ol8_olcne14
ol8_addons
ol8_baseos_latest
ol8_appstream
ol8_UEKR6
Como alternativa, habilite os canais do Oracle Cloud Native Environment na ULN. Consulte "Ativando o Acesso aos Pacotes de Ambiente Nativo do Oracle Cloud".
-
Os nós do Oracle Linux 7 têm o serviço NTP (Network Time Protocol) em execução no plano de controle e nos nós de trabalho do Kubernetes. Consulte "Configurando um Serviço de Tempo de Rede".
-
A permuta está desativada no plano de controle do Kubernetes e nos nós de trabalho. Consulte "Disabling Swap".
-
Os sistemas são configurados com as regras de firewall necessárias. Consulte "Configurando as Regras do Firewall".
-
Os sistemas têm o módulo kernel
br_netfilter
carregado no plano de controle e nos nós de trabalho do Kubernetes. Consulte "br_netfilter Module".
Configurar o Nó do Operador
O nó do operador executa e gerencia a implantação de ambientes, incluindo a implantação do cluster do Kubernetes. Um nó de operador pode ser um nó no cluster do Kubernetes ou um host separado. Neste tutorial, o nó do operador é um host separado. No nó de operador, instale a Platform CLI, o Platform API Server e os utilitários. Ative o serviço olcne-api-server
, mas não o inicie.
Se você estiver usando o Oracle Linux 7, faça o seguinte:
sudo yum install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service
Se você estiver usando o Oracle Linux 8, faça o seguinte:
sudo dnf install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service
Configurar os Nós do Kubernetes
Execute estas etapas em todos os nós de trabalho e plano de controle do Kubernetes. Instale o pacote e os utilitários do Platform Agent. Ative o serviço olcne-agent
, mas não o inicie.
Se você estiver usando o Oracle Linux 7, faça o seguinte:
sudo yum install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service
Se você estiver usando o Oracle Linux 8, faça o seguinte:
sudo dnf install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service
Se você usar um servidor proxy, configure-o com o CRI-O. Em cada nó do Kubernetes, crie um diretório de configuração systemd CRI-O. Crie um arquivo chamado proxy.conf
no diretório e adicione as informações do servidor proxy.
sudo mkdir /etc/systemd/system/crio.service.d
sudo vi /etc/systemd/system/crio.service.d/proxy.conf
Substitua os valores de proxy apropriados para aqueles em seu ambiente usando o arquivo de exemplo proxy.conf
:
[Service]
Environment="HTTP_PROXY=proxy.example.com:80"
Environment="HTTPS_PROXY=proxy.example.com:80"
Environment="NO_PROXY=.example.com,192.0.2.*"
Se o serviço docker
estiver em execução ou se o serviço containerd
estiver em execução, interrompa-o e desative-o.
sudo systemctl disable --now docker.service
sudo systemctl disable --now containerd.service
Configurar a Rede do Balanceador de Carga
Execute estas etapas em cada nó do plano de controle do Kubernetes. Abra a porta 6444 e ative o protocolo VRRP (Virtual Router Redundancy Protocol).
sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-protocol=vrrp --permanent
sudo systemctl restart firewalld.service
Configurar Certificados de CA Privada X.509
Use o script /etc/olcne/gen-certs-helper.sh
para gerar uma CA privada e certificados para os nós. Execute o script a partir do diretório /etc/olcne
no nó do operador. O script salva os arquivos de certificado no diretório atual. Use a opção --nodes
seguida pelos nós para os quais você deseja criar certificados. Crie um certificado para cada nó que execute o Servidor API da Plataforma ou o Agente da Plataforma. Ou seja, para o nó do operador e cada nó do Kubernetes. Forneça as informações da CA privada usando as opções --cert-request*
. Algumas dessas opções são fornecidas no exemplo. Você pode obter uma lista de todas as opções de comando usando o comando gen-certs-helper.sh --help
.
Para a opção --cert-request-common-name
, forneça o Nome de domínio DNS (Domain Name System) apropriado para o seu ambiente. Para o valor da opção --nodes
, forneça o nome de domínio totalmente qualificado (FQDN) do seu operador, plano de controle e nós de trabalho.
cd /etc/olcne
sudo ./gen-certs-helper.sh \
--cert-request-organization-unit "My Company Unit" \
--cert-request-organization "My Company" \
--cert-request-locality "My Town" \
--cert-request-state "My State" \
--cert-request-country US \
--cert-request-common-name example.com \
--nodes operator.example.com,control1.example.com,control2.example.com,control3.example.com,worker1.example.com,worker2.example.com
Transferir Certificados
O script /etc/olcne/gen-certs-helper.sh
usado para gerar uma CA privada e os certificados dos nós foram executados no nó do operador. Certifique-se de que o nó operador tenha acesso ssh
sem senha ao plano de controle e ao nó de trabalho do Kubernetes (não mostrado neste tutorial) e execute o comando a seguir no nó de operador para transferir certificados do nó de operador para os nós do Kubernetes.
bash -ex /etc/olcne/configs/certificates/olcne-tranfer-certs.sh
Configurar o Servidor API da Plataforma para Usar os Certificados
No nó do operador, execute o script /etc/olcne/bootstrap-olcne.sh
conforme mostrado para configurar o Servidor API da Plataforma para usar os certificados. Como alternativa, você pode usar certificados gerenciados pelo serviço HashiCorp Vault. Este método não está incluído neste tutorial.
sudo /etc/olcne/bootstrap-olcne.sh \
--secret-manager-type file \
--olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
--olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
--olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
--olcne-component api-server
Configurar o Agente da Plataforma para Usar os Certificados
Em cada nó do Kubernetes, execute o script /etc/olcne/bootstrap-olcne.sh
conforme mostrado para configurar o Agente da Plataforma para usar os certificados. Como alternativa, você pode usar certificados gerenciados pelo serviço HashiCorp Vault. Este método não está incluído neste tutorial.
sudo /etc/olcne/bootstrap-olcne.sh \
--secret-manager-type file \
--olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
--olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
--olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
--olcne-component agent
Repita essa etapa conforme necessário para garantir que esse script seja executado em cada nó do Kubernetes.
Configure Certificados para o Serviço Kubernetes externalIPs
O serviço externalip-validation-webhook-service
Kubernetes requer que os certificados X.509 sejam configurados antes da implantação do Kubernetes. Gere certificados usando o script gen-certs-helper.sh
. No nó do operador, execute:
cd /etc/olcne
sudo ./gen-certs-helper.sh \
--cert-dir /etc/olcne/configs/certificates/restrict_external_ip \
--cert-request-organization-unit "My Company Unit" \
--cert-request-organization "My Company" \
--cert-request-locality "My Town" \
--cert-request-state "My State" \
--cert-request-country US \
--cert-request-common-name cloud.example.com \
--nodes externalip-validation-webhook-service.externalip-validation-system.svc,externalip-validation-webhook-service.externalip-validation-system.svc.cluster.local \
--one-cert
Certifique-se de que o usuário que deve executar o comando olcnectl
esteja definido como o proprietário do diretório /etc/olcne/configs/certificates/restrict_external_ip/
. Neste exemplo, o usuário e o grupo são opc:opc
:
sudo chown -R opc:opc /etc/olcne/configs/certificates/restrict_external_ip/
Criar um Arquivo de Configuração de Implantação
No nó do operador, crie um arquivo de configuração para sua implantação. Esse arquivo contém todas as informações necessárias para criar um ambiente e implantar o módulo Kubernetes.
O exemplo de arquivo fornecido aqui cria um cluster altamente disponível usando o balanceador de carga incorporado.
A opção virtual-ip
define o endereço IP virtual a ser usado para o nó do plano de controle principal. Forneça o nome de domínio totalmente qualificado (FQDN) do plano de controle e dos nós de trabalho.
A localização da CA privada e dos certificados dos nós é definida na seção globals
. Você também deve fornecer a localização dos certificados do serviço Kubernetes externalip-validation-webhook-service
na seção args
do módulo Kubernetes.
O arquivo de configuração deve estar no formato YAML, conforme mostrado. Você só precisa alterar:
- Os valores de
master-nodes
para refletir seus FQDNs do nó do plano de controle. - Os valores de
worker-nodes
para refletir os FQDNs do nó de trabalho. - O valor de
virtual-ip
para definir o endereço IP virtual a ser usado para o nó do plano de controle principal.
O nome do arquivo deste arquivo de configuração neste tutorial é myenvironment.yaml
.
Mais informações sobre como criar um arquivo de configuração estão na documentação em Usando um Arquivo de Configuração.
environments:
- environment-name: myenvironment
globals:
api-server: 127.0.0.1:8091
secret-manager-type: file
olcne-ca-path: /etc/olcne/configs/certificates/production/ca.cert
olcne-node-cert-path: /etc/olcne/configs/certificates/production/node.cert
olcne-node-key-path: /etc/olcne/configs/certificates/production/node.key
modules:
- module: kubernetes
name: mycluster
args:
container-registry: container-registry.oracle.com/olcne
virtual-ip: 192.0.2.137
master-nodes:
- control1.example.com:8090
- control2.example.com:8090
- control3.example.com:8090
worker-nodes:
- worker1.example.com:8090
- worker2.example.com:8090
selinux: enforcing
restrict-service-externalip: true
restrict-service-externalip-ca-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/ca.cert
restrict-service-externalip-tls-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/node.cert
restrict-service-externalip-tls-key: /etc/olcne/configs/certificates/restrict_external_ip/production/node.key
Criar o Ambiente
No nó do operador, execute o comando olcnectl environment create
para criar o ambiente. Informe o local do arquivo de configuração criado usando a opção --config-file
.
olcnectl environment create --config-file myenvironment.yaml
Criar o Módulo Kubernetes
No nó do operador, execute o comando olcnectl module create
para criar o módulo Kubernetes.
olcnectl module create --config-file myenvironment.yaml
Validar o Módulo Kubernetes
No nó de operador, use o comando olcnectl module validate
para validar se os nós estão configurados corretamente para implantar o módulo Kubernetes. Neste exemplo, não há erros de validação. Se houver erros, os comandos necessários para corrigir os nós serão fornecidos como saída desse comando.
olcnectl module validate --config-file myenvironment.yaml
Instalar o Módulo Kubernetes
No nó de operador, use o comando olcnectl module install
para implantar o módulo Kubernetes no ambiente.
olcnectl module install --config-file myenvironment.yaml
A implantação do Kubernetes nos nós pode levar alguns minutos para ser concluída.
Validar a Implantação
No nó de operador, verifique se o Módulo Kubernetes está implantado e se os nós estão configurados usando o comando olcnectl module instances
.
olcnectl module instances --config-file myenvironment.yaml
A saída deve ser semelhante a:
INSTANCE MODULE STATE
control1.example.com:8090 node installed
control2.example.com:8090 node installed
control3.example.com:8090 node installed
worker1.example.com:8090 node installed
worker2.example.com:8090 node installed
mycluster kubernetes installed
Configurar kubectl
Em um nó do plano de controle, configure o comando kubectl
.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
Verifique se você pode usar o comando kubectl
.
kubectl get nodes
A saída deve ser semelhante a:
NAME STATUS ROLES AGE VERSION
control1.example.com Ready control-plane,master 18m ...
control2.example.com Ready control-plane,master 18m ...
control3.example.com Ready control-plane,master 18m ...
worker1.example.com Ready <none> 18m ...
worker2.example.com Ready <none> 18m ...
Para Obter Mais Informações
- Documentação do Oracle Cloud Native Environment
- Treinamento em Ambiente Nativo do Oracle Cloud
- Assinatura de Aprendizagem do Oracle Linux
- Conteúdo Programático do Oracle Linux
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.
Deploy a Highly Available Oracle Cloud Native Environment
F49709-03
February 2022
Copyright © 2021, Oracle and/or its affiliates.