Déployer un environnement natif Oracle Cloud hautement disponible

Introduction

L'environnement natif Oracle Cloud est une suite entièrement intégrée pour le développement et la gestion d'applications cloud natives. Le module Kubernetes est le module de base. Il est utilisé pour déployer et gérer les conteneurs et installe et configure également automatiquement les conteneurs CRI-O, runC et Kata. CRI-O gère l'exécution de conteneur pour un cluster Kubernetes. L'exécution peut être des conteneurs runC ou Kata.

Objectifs

Ce tutoriel vous explique comment installer et configurer Oracle Cloud Native Environment version 1.4 avec un cluster Kubernetes hautement disponible.

Lors du déploiement d'un cluster Kubernetes hautement disponible, vous devez configurer un équilibreur de charge pour activer la haute disponibilité du cluster. Vous pouvez utiliser votre propre implémentation d'équilibreur de charge ou l'équilibreur de charge intégré. Ce tutoriel indique les étapes à suivre pour configurer l'équilibreur de charge intégré.

Dans ce tutoriel, vous configurez également les certificats d'autorité de certification privés X.509 utilisés pour gérer la communication entre les noeuds et pour le service Kubernetes externalIPs. Il existe d'autres méthodes pour gérer et déployer les certificats, par exemple à l'aide du gestionnaire de clés secrètes de coffre HashiCorp ou à l'aide de vos propres certificats, signés par une autorité de certification sécurisée. Ces autres méthodes ne sont pas incluses dans ce tutoriel.

Prérequis

Les systèmes hôtes pour effectuer les étapes de ce tutoriel sont répertoriés dans cette section. Vous devez :

Configurer le noeud opérateur

Le noeud opérateur effectue et gère le déploiement des environnements, y compris le déploiement du cluster Kubernetes. Un noeud opérateur peut être un noeud du cluster Kubernetes ou un hôte distinct. Dans ce tutoriel, le noeud opérateur est un hôte distinct. Sur le noeud opérateur, installez la CLI Platform, le serveur API Platform et les utilitaires. Activez le service olcne-api-server, mais ne le démarrez pas.

Si vous utilisez Oracle Linux 7, procédez comme suit :

sudo yum install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service

Si vous utilisez Oracle Linux 8, procédez comme suit :

sudo dnf install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service

Configuration des noeuds Kubernetes

Effectuez ces étapes sur tous les noeuds de processus actif et de plan de contrôle Kubernetes. Installez le package et les utilitaires Platform Agent. Activez le service olcne-agent, mais ne le démarrez pas.

Si vous utilisez Oracle Linux 7, procédez comme suit :

sudo yum install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service

Si vous utilisez Oracle Linux 8, procédez comme suit :

sudo dnf install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service

Si vous utilisez un serveur proxy, configurez-le avec CRI-O. Sur chaque noeud Kubernetes, créez un répertoire de configuration systemd CRI-O. Créez un fichier nommé proxy.conf dans le répertoire et ajoutez les informations du serveur proxy.

sudo mkdir /etc/systemd/system/crio.service.d
sudo vi /etc/systemd/system/crio.service.d/proxy.conf

Remplacez les valeurs de proxy appropriées pour celles de votre environnement à l'aide de l'exemple de fichier 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.*"

Si le service docker est en cours d'exécution ou si le service containerd est en cours d'exécution, arrêtez-les et désactivez-les.

sudo systemctl disable --now docker.service
sudo systemctl disable --now containerd.service

Configurer le réseau de l'équilibreur de charge

Effectuez ces étapes sur chaque noeud de plan de contrôle Kubernetes. Ouvrez le port 6444 et activez le protocole de redondance de routeur virtuel (VRRP).

sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-protocol=vrrp --permanent
sudo systemctl restart firewalld.service

Configurer des certificats d'autorité de certification privés X.509

Utilisez le script /etc/olcne/gen-certs-helper.sh pour générer une autorité de certification privée et des certificats pour les noeuds. Exécutez le script à partir du répertoire /etc/olcne sur le noeud opérateur. Le script enregistre les fichiers de certificat dans le répertoire en cours. Utilisez l'option --nodes suivie des noeuds pour lesquels vous souhaitez créer des certificats. Créez un certificat pour chaque noeud qui exécute le serveur API Platform ou l'agent de plate-forme. Autrement dit, pour le noeud opérateur et chaque noeud Kubernetes. Fournissez les informations d'autorité de certification privée à l'aide des options --cert-request*. Certaines de ces options sont données dans l'exemple. Vous pouvez obtenir la liste de toutes les options de commande à l'aide de la commande gen-certs-helper.sh --help.

Pour l'option --cert-request-common-name, indiquez le nom de domaine DNS (Domain Name System) approprié pour votre environnement. Pour la valeur de l'option --nodes, indiquez le nom de domaine qualifié complet de vos noeuds d'opérateur, de plan de contrôle et de processus actif.

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

Certificats de transfert

Le script /etc/olcne/gen-certs-helper.sh utilisé pour générer une CA privée et des certificats pour les noeuds a été exécuté sur le noeud opérateur. Assurez-vous que le noeud opérateur dispose d'un accès ssh sans mot de passe au plan de contrôle Kubernetes et au noeud de processus actif (non affichés dans ce tutoriel), puis exécutez la commande suivante sur le noeud opérateur pour transférer les certificats du noeud opérateur vers les noeuds Kubernetes.

bash -ex /etc/olcne/configs/certificates/olcne-tranfer-certs.sh

Configuration du serveur d'API de plate-forme pour qu'il utilise les certificats

Sur le noeud opérateur, exécutez le script /etc/olcne/bootstrap-olcne.sh comme indiqué pour configurer le serveur d'API de plate-forme afin qu'il utilise les certificats. Vous pouvez également utiliser des certificats gérés par HashiCorp Vault. Cette méthode n'est pas incluse dans ce tutoriel.

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

Configuration de l'agent de plate-forme pour qu'il utilise les certificats

Sur chaque noeud Kubernetes, exécutez le script /etc/olcne/bootstrap-olcne.sh comme indiqué pour configurer l'agent de plate-forme afin qu'il utilise les certificats. Vous pouvez également utiliser des certificats gérés par HashiCorp Vault. Cette méthode n'est pas incluse dans ce tutoriel.

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

Répétez cette étape si nécessaire pour vous assurer que ce script est exécuté sur chaque noeud Kubernetes.

Configuration de certificats pour le service Kubernetes externalIPs

Le service Kubernetes externalip-validation-webhook-service requiert la configuration de certificats X.509 avant le déploiement de Kubernetes. Générez des certificats à l'aide du script gen-certs-helper.sh. Sur le noeud opérateur, exécutez :

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

Assurez-vous que l'utilisateur qui doit exécuter la commande olcnectl est défini en tant que propriétaire du répertoire /etc/olcne/configs/certificates/restrict_external_ip/. Dans cet exemple, l'utilisateur et le groupe sont opc:opc :

sudo chown -R opc:opc /etc/olcne/configs/certificates/restrict_external_ip/

Créer un fichier de configuration de déploiement

Sur le noeud opérateur, créez un fichier de configuration pour votre déploiement. Ce fichier contient toutes les informations requises pour créer un environnement et déployer le module Kubernetes.

L'exemple de fichier fourni ici crée un cluster hautement disponible à l'aide de l'équilibreur de charge intégré.

L'option virtual-ip définit l'adresse IP virtuelle à utiliser pour le noeud de plan de contrôle principal. Vous devez fournir le nom de domaine qualifié complet de votre plan de contrôle et de vos noeuds de processus actif.

L'emplacement de l'autorité de certification privée et des certificats pour les noeuds est défini dans la section globals. Vous devez également indiquer l'emplacement des certificats pour le service Kubernetes externalip-validation-webhook-service dans la section args du module Kubernetes.

Le fichier de configuration doit être au format YAML comme indiqué. Il suffit de modifier :

Dans ce tutoriel, le nom de fichier de configuration est myenvironment.yaml.

Pour plus d'informations sur la création d'un fichier de configuration, reportez-vous à la documentation disponible à l'adresse Using a Configuration File.

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

Création de l'environnement

Sur le noeud opérateur, exécutez la commande olcnectl environment create pour créer l'environnement. Transmettez l'emplacement du fichier de configuration que vous avez créé à l'aide de l'option --config-file.

olcnectl environment create --config-file myenvironment.yaml

Création du module Kubernetes

Sur le noeud opérateur, exécutez la commande olcnectl module create pour créer le module Kubernetes.

olcnectl module create --config-file myenvironment.yaml

Validation du module Kubernetes

Sur le noeud opérateur, utilisez la commande olcnectl module validate pour valider les noeuds correctement configurés afin de déployer le module Kubernetes. Dans cet exemple, il n'y a aucune erreur de validation. En cas d'erreur, les commandes requises pour corriger les noeuds sont fournies en tant que sortie de cette commande.

olcnectl module validate --config-file myenvironment.yaml

Installer le module Kubernetes

Sur le noeud opérateur, utilisez la commande olcnectl module install pour déployer le module Kubernetes vers l'environnement.

olcnectl module install --config-file myenvironment.yaml

Le déploiement de Kubernetes sur les noeuds peut prendre plusieurs minutes.

Valider le déploiement

Sur le noeud opérateur, vérifiez que le module Kubernetes est déployé et que les noeuds sont configurés à l'aide de la commande olcnectl module instances.

olcnectl module instances --config-file myenvironment.yaml

La sortie doit ressembler à ce qui suit :

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

Configurer kubectl

Sur un noeud de plan de contrôle, configurez la commande 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

Vérifiez que vous pouvez utiliser la commande kubectl.

kubectl get nodes

La sortie doit se présenter comme suit :

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   ...

Pour plus d'informations

Ressources de formation supplémentaires

Explorez d'autres exercices sur docs.oracle.com/learn ou accédez à davantage de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir Oracle Learning Explorer.

Pour consulter la documentation du produit, consultez le centre d'aide Oracle.