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 :
-
6 systèmes Oracle Linux à utiliser en tant que :
-
Noeud opérateur
-
3 noeuds de plan de contrôle Kubernetes
-
2 noeuds de processus actif Kubernetes
Dans un environnement de production, il est recommandé de disposer d'un cluster comportant au moins cinq noeuds de plan de contrôle et au moins trois noeuds de processus actif.
-
-
Adresse IP virtuelle du noeud de plan de contrôle principal. Cette adresse IP ne doit être utilisée sur aucun noeud et est affectée de manière dynamique au noeud de plan de contrôle affecté en tant que contrôleur principal par l'équilibreur de charge.
Conseil : si vous effectuez un déploiement vers des instances virtuelles Oracle Cloud Infrastructure, vous pouvez affecter une adresse IP privée secondaire à la carte d'interface réseau virtuelle sur un noeud de plan de contrôle afin de créer une adresse IP virtuelle. Veillez d'abord à répertorier ce noeud de plan de contrôle lors de la création du module Kubernetes. Dans ce tutoriel, il s'agit de
control1.example.com. Pour plus d'informations sur les adresses IP privées secondaires, reportez-vous à la documentation Oracle Cloud Infrastructure. -
Les systèmes doivent avoir au moins l'un des éléments suivants :
-
Oracle Linux 7 Update 5 (x86_64) installé et exécutant le noyau Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
Oracle Linux 8 Update 3 (x86_64) installé et exécutant le noyau Unbreakable Enterprise Kernel version 6 (UEK R6)
-
-
L'un des packages suivants doit être installé sur les systèmes :
oracle-olcne-release-el7pour Oracle Linux 7oracle-olcne-release-el8pour Oracle Linux 8
-
Les systèmes ont activé les référentiels yum suivants.
Oracle Linux 7:
ol7_olcne14ol7_kvm_utilsol7_addonsol7_latestol7_UEKR6
Oracle Linux 8:
ol8_olcne14ol8_addonsol8_baseos_latestol8_appstreamol8_UEKR6
Vous pouvez également activer les canaux Environnement natif Oracle Cloud sur ULN. Reportez-vous à Activation de l'accès aux packages d'environnement natif Oracle Cloud.
-
Les noeuds Oracle Linux 7 disposent du service NTP (Network Time Protocol) exécuté sur le plan de contrôle Kubernetes et les noeuds de processus actif. Reportez-vous à la section "Setting up a Network Time Service".
-
Le swap est désactivé sur le plan de contrôle Kubernetes et les noeuds de processus actif. Reportez-vous à la section "Disabling Swap".
-
Les systèmes sont configurés avec les règles de pare-feu nécessaires. Reportez-vous à la section "Configuration des règles de pare-feu".
-
Le module de noyau
br_netfilterest chargé sur le plan de contrôle Kubernetes et les noeuds de processus actif. Reportez-vous à la section "br_netfilter Module".
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 :
- Valeurs pour
master-nodesafin de refléter les noms de domaine qualifiés complets du noeud de plan de contrôle. - Valeurs pour
worker-nodesafin de refléter les noms de domaine qualifiés complets de votre noeud de processus actif. - Valeur de
virtual-ippermettant de définir l'adresse IP virtuelle à utiliser pour le noeud de plan de contrôle principal.
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
- Documentation de l'environnement natif Oracle Cloud
- Cours sur l'environnement natif Oracle Cloud
- Abonnement de formation Oracle Linux
- Cursus Oracle Linux
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.
Deploy a Highly Available Oracle Cloud Native Environment
F49707-03
February 2022
Copyright © 2021, Oracle and/or its affiliates.