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:

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:

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

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.