
Salutations, Habr!
Nous, l'équipe d'architectes informatiques d'IBM, qui sommes engagés dans la création et la commercialisation de solutions industrielles pour diverses industries. Pendant notre temps libre, nous recherchons de nouvelles technologies, expérimentons et essayons les meilleures pratiques.
Ces dernières années, le thème de l'Internet des objets a été très populaire. Nos clients demandent des solutions et des plates-formes de box universelles qui peuvent être situées localement dans leur centre de données. Plus important encore, on s'attend à ce que, sur la base de ces "boîtes", tous les nouveaux services et applications soient développés et lancés très rapidement, ou plutôt instantanément ou "hier".
Nous nous sommes demandés: «Et si nous montions quelque chose de similaire sur les technologies ouvertes et publiques?»
Nous avons déjà parlé et montré beaucoup de choses sur l'utilisation des conteneurs
Docker et de leurs outils de gestion basés sur
Kubernetes . Cependant, jusqu'à présent, il n'a pas été possible de voir comment toutes ces technologies avancées peuvent être utilisées à l'échelle industrielle pour des tâches commerciales, en particulier dans le cadre de l'Internet des objets. Remplissons donc cette lacune. Le concept de microservices, ainsi que les approches de développement à la mode (DevOps), l'intégration et le déploiement d'applications (CI / CD) seront considérés comme une tâche légèrement différente et mis de côté pour plus tard.
Dans cet article, nous voulons parler de la préparation et de l'installation de l'un des composants clés - IBM Cloud Private (en fait, l'assemblage industriel de Docker / Kubernetes et un peu plus), qui peut agir comme un noyau d'infrastructure conditionnelle lors de la création d'une plate-forme Internet des objets locale. Demandez pourquoi il?
Parce que nous avons promis des technologies ouvertes et publiques (version gratuite pour la communauté et support de la communauté):
hub.docker.com/r/ibmcom/icp-inceptionPrésentation d'IBM Cloud Private
IBM Cloud Private (ICP) est une plateforme de cloud privé pour le déploiement et les opérations sur site. ICP est un environnement intégré qui vous permet de concevoir, développer, déployer et gérer des applications locales conçues avec une architecture de conteneur à l'esprit. La livraison ICP comprend un orchestrateur basé sur Kubernetes (K8s), un magasin d'images local, ainsi qu'une console de gestion et des outils de surveillance.
Qu'est-ce qu'un cloud privé ou privé?
Un cloud privé est un modèle de cloud computing qui s'exécute exclusivement pour une organisation, généralement sur son territoire et ses ressources. Un tel cloud peut être géré et entretenu à la fois par ses propres spécialistes et des employés tiers. Une plate-forme similaire peut être hébergée à la fois derrière le pare-feu de l'entreprise et à l'extérieur. Un cloud privé offre les avantages d'un cloud public, notamment un déploiement et une évolutivité rapides, ainsi qu'une facilité d'utilisation, de gestion et de flexibilité. Dans le même temps, la version locale offre un meilleur contrôle du système, une productivité accrue, des coûts prévisibles avec précision, des exigences de sécurité accrues et des capacités de gestion flexibles en fonction des besoins de l'organisation. Un cloud privé vous permet de le configurer directement pour des tâches métier spécifiques et des exigences de sécurité client.
Avant de procéder à l'installation d'ICP, nous définirons la terminologie:
Noeud maître- Surveille et contrôle le cluster K8s.
- kubectl: un outil en ligne de commande pour gérer un cluster.
- API REST: interface pour interagir avec les nœuds de travail.
- etcd: est un magasin de clés persistant et abordable, utilisé comme stockage de sauvegarde K8 pour toutes les données du cluster.
- kube-scheduler: ce composant surveille les conteneurs (pods) nouvellement créés qui n'ont pas de nœud assigné, et sélectionne un nœud pour les exécuter.
- Habituellement, 3 nœuds principaux ou plus sont nécessaires pour un fonctionnement stable et assurer la tolérance aux pannes. Dans notre cas, pour économiser les ressources, nous installerons tous les composants ICP nécessaires sur un seul serveur dédié (Single Node).
Noeud de travail- La machine qui fonctionnait dans les K8 anciennement connue sous le nom de Minion. Ce nœud peut être l'un des hôtes qui reçoit des tâches du nœud principal et contrôle également le processus de lancement des conteneurs sur celui-ci. Selon les paramètres du cluster, le nœud de travail peut être une machine virtuelle ou un serveur physique.
- Les composants suivants peuvent être exécutés sur chaque nœud:
- kubelet: est le service principal du nœud de travail. Il surveille les conteneurs qui ont été affectés à son nœud (soit apirusver pour une connexion sécurisée, soit via un fichier de configuration local).
- kube-proxy: affiche les services définis dans l'API K8s sur chaque hôte, prenant en charge les règles de réseau sur l'hôte et les connexions de transfert.
- docker: environnement de lancement et de gestion de conteneurs.
- supervisord: Il s'agit d'un processus de surveillance léger et d'un système de contrôle que vous pouvez utiliser pour faire fonctionner kubelet et docker.
- fluentd: il s'agit d'un service qui permet d'assurer la journalisation au niveau du cluster.
Conteneurs- Une application s'exécutant dans un environnement isolé.
- L'ensemble des processus exécutables et l'image lancée du programme.
Cocons (gousses)- Un pod est un groupe d'un ou plusieurs conteneurs Docker, avec un stockage / réseau commun et une spécification sur la façon d'exécuter des conteneurs sur un nœud de travail.
- Chaque pod a sa propre IP.
- Pod partage l'espace de noms PID, le réseau et le nom d'hôte.
Contrôleur de réplication- Fournit l'accessibilité et l'évolutivité.
- Responsable du contrôle du nombre de Pods déployés.
- Utilise un modèle qui décrit ce que chaque pod doit contenir.
Les étiquettes- Métadonnées affectées aux ressources K8, par exemple: conteneurs, services.
- Paires de valeurs-clés attachées aux objets pour identification.
- Ces paramètres sont essentiels car ils sont basés sur une demande de ressources de cluster avec des étiquettes spécifiques.
Les services- Une collection de conteneurs exposés comme point de terminaison.
- Informations sur l'état du cluster K8 et les paramètres réseau, qui s'appliquent à tous les nœuds de travail.
- Avec la configuration correcte, les pods créés par le contrôleur de réplication seront automatiquement enregistrés en tant que service correspondant.
Informations secrètes (secrets)- Informations confidentielles à lire ou à utiliser par les conteneurs.
- Des volumes spéciaux du lecteur de disque sont montés automatiquement afin que les conteneurs puissent lire le contenu.
- Chaque entrée a son propre chemin.
L'architecture
Vous trouverez ci-dessous une architecture ICP de haut niveau qui répertorie les principaux composants par nœuds principaux, de travail et proxy. Il convient de noter que dans cet article, l'accent est mis principalement sur une combinaison de conteneurs Docker et de l'environnement de gestion Kubernetes. Ces composants open source sont essentiels et fondamentaux pour la plate-forme ICP. Néanmoins, pour travailler pleinement avec ICP, vous aurez également besoin de connaître Helm, le gestionnaire de gestion des packages logiciels. K8s est utilisé pour déployer et héberger des instances d'application intégrées aux schémas Helm, qui à leur tour font référence aux images Docker. Les schémas de barre contiennent des informations sur les détails de votre application et les images Docker contiennent tous les packages logiciels nécessaires pour exécuter votre application.

Pour une introduction détaillée à l'architecture et aux composants de la plateforme ICP, vous pouvez utiliser le lien de documentation dans
IBM Knowledge Center .
La préparation
Afin de terminer confortablement l'installation ICP en 20-30 minutes, les ressources matérielles minimales et l'accès Internet suivants sont requis:
• Un hôte (physique ou virtuel)
• CPU = 8 cœurs (ou cœurs virtuels)
• RAM = 10 Go (en fait, jusqu'à 14 Go peuvent être nécessaires)
• Disque = 40 Go (sur SSD comme toujours plus rapide)
Remarque: si vous avez un peu plus de temps libre et un peu moins de ressources matérielles, vous pouvez installer ICP quelque part en 40 à 60 minutes sur 1 cœur virtuel i5 et 10 Go de RAM.
L'installation
Télécharger Ubuntu
Téléchargez la
version de distribution d'
Ubuntu Server 16.04.05 . Effectuez une installation de système d'exploitation standard sur une machine virtuelle ou physique avec les caractéristiques ci-dessus.
Obtenir une adresse IP
Après avoir terminé le processus d'installation du système d'exploitation, dans la ligne de commande, recherchez l'adresse IP de votre machine virtuelle à l'aide de la commande suivante:
ifconfig
Vous devez écrire / mémoriser l'adresse IP Ethernet (inet addr), ainsi que Bcast et Mask. Ces paramètres seront affichés après l'exécution de la commande correspondante:
Figure 1. Un exemple de la commande ifconfigConnexion SSH
Si vous avez utilisé la fonction «Installation facile» lors de la configuration de la machine virtuelle, après l'installation complète d'Ubuntu Server, vous devez installer le serveur OpenSSH. Vous pouvez le faire avec les commandes suivantes:
apt install openssh-server sudo systemctl enable sshd
Après avoir exécuté les commandes appropriées, vous pourrez vous connecter à la machine virtuelle à l'aide de SSH. Selon le système d'exploitation, vous pouvez utiliser différentes méthodes de connexion. Pour Windows, vous pouvez utiliser l'outil
PuTTY populaire; pour MacOS, vous pouvez utiliser la commande ssh dans le terminal.
Figure 2. Exemple de connexion via PuTTY pour WindowsL'étape suivante consiste à définir un mot de passe pour le super utilisateur (root):
sudo -i passwd
Figure 3. Définition d'un nouveau mot de passe pour l'utilisateur rootMise à jour de l'interface réseau
Après avoir configuré la possibilité de se connecter via SSH et mis à jour le mot de passe du super-utilisateur, nous devons configurer l'interface réseau pour déterminer les paramètres réseau statiques. Cela se fait avec la commande suivante:
nano /etc/network/interfaces
Nous mettons à jour les paramètres de l'interface réseau (interface réseau principale) en fonction des informations obtenues lors de la commande ifconfig, notre exemple ressemble à ceci:
auto ens33 iface ens33 inet static address 192.168.175.7 netmask 255.255.255.0 network 192.168.175.0 broadcast 192.168.175.255 gateway 192.168.175.2 dns-nameservers 192.168.175.2 8.8.8.8
Remarque: Il est important de spécifier correctement le serveur DNS, car l'accès à Internet est nécessaire pour l'installation ultérieure des composants ICP.
Figure 4. Configuration de l'interface réseauEnregistrez le fichier mis à jour en procédant comme suit: Ctrl + X, Oui, Entrée.
Pour simplifier la connexion à une machine virtuelle avec des privilèges de superutilisateur (root), vous devez apporter des modifications à la configuration du service SSH. Pour ce faire, exécutez la commande suivante:
nano /etc/ssh/sshd_config
Ensuite, recherchez la ligne d'autorisation d'accès et modifiez-la en conséquence:
PermitRootLogin yes
Figure 5. Mise à jour de la configuration SSHEnregistrez le fichier comme à l'étape précédente: Ctrl + X, Oui, Entrée.
Après avoir effectué toutes les modifications, pour appliquer les nouveaux paramètres, il est logique de redémarrer complètement la machine virtuelle ou de redémarrer les services correspondants (réseau et ssh), par exemple, avec les commandes suivantes:
shutdown -r 0
ou
service <service_name> restart
Après avoir redémarré la machine, vous devez vous reconnecter via SSH.
Mise à jour des composants
Mettez à jour Ubuntu Server avec la commande suivante (la commande doit être exécutée en tant que root):
apt update
Remarque: si une erreur survient lors de la mise à jour: "Le référentiel 'cdrom: // Ubuntu-Server 16.04.5 LTS _Xenial Xerus_ - Release amd64 (20180731) xenial Release' n'a pas de fichier Release.". Vous devez exécuter la commande suivante:
sudo nano /etc/apt/sources.list
Et commentez la ligne:
deb cdrom:[Ubuntu-Server 16.04.5 LTS …
Figure 6. Correction d'une erreur possibleEnsuite, enregistrez le fichier, comme précédemment: Ctrl + X, Oui, Entrée
Après avoir corrigé une erreur possible, réexécutez la commande de mise à jour et, par conséquent, vous devriez voir quelque chose comme ceci:
Figure 7. Mise à jour d'UbuntuInstaller IBM Cloud Private
Avant d'installer ICP, vous devez modifier le fichier hosts:
nano /etc/hosts
Remplacez la chaîne 127.0.1.1 ubuntu par votre adresse IP et tout nom d'hôte approprié.
Assurez-vous que le nom d'hôte et l'alias de la ligne sont séparés par une tabulation ou un espace:
Figure 8. Modification du fichier d'hôtesEnregistrez le fichier: Ctrl + X, Oui, Entrée
Les 2 commandes suivantes vous permettront de mettre à jour le système et d'installer des modules supplémentaires.
apt update apt-get install apt-transport-https ca-certificates curl software-properties-common python-minimal jq
Vérifiez le terminal pour les erreurs:
Figure 9. Installation de composants supplémentairesAugmentez la mémoire virtuelle maximale avec la commande:
sysctl -w vm.max_map_count=262144
Les K8 ne démarreront pas avec l'échange activé. Vous pouvez le désactiver avec la commande:
swapoff –a
Remarque: les deux commandes précédentes fonctionneront dans la session en cours. Lorsque vous redémarrez, ces paramètres seront perdus et vous devez les enregistrer à nouveau.
L'application de ces paramètres lors du chargement de l'OS peut être activée par les commandes suivantes:
sed -i '/ swap / s/^/#/' /etc/fstab echo "vm.max_map_count=262144" >> /etc/sysctl.conf
Ajout d'une clé GPG
Nous utilisons la commande suivante:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Ajout d'un référentiel pour l'installation de Docker
Pour terminer l'installation du référentiel, vous devez exécuter les 2 commandes suivantes:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update
Installer Docker
Utilisez la commande suivante pour installer Docker (Docker version 17.12.1 est la version maximale prise en charge pour IBM Cloud Private 2.1.0.3):
apt-get install docker-ce=17.12.1~ce-0~ubuntu
Figure 10. Processus d'installation de DockerVous pouvez vérifier la fonctionnalité de Docker avec la commande suivante:
docker version
Figure 11. Vérification de DockerTélécharger IBM Cloud Private
Pour télécharger l'image ICP-ce (Community Edition) à partir de la ressource dockerHub, vous devez utiliser la boîte à outils Docker. Vous pouvez le faire avec la commande suivante:
docker pull ibmcom/icp-inception:2.1.0.3
Figure 12. Télécharger ICPIBM a regroupé tous les composants essentiels nécessaires à l'installation dans un seul package (notez que vous pouvez changer la version en une version plus récente si nécessaire). La commande pull téléchargera l'image sur le système de fichiers local (l'image sera lancée pour installer ICP).
Créez un répertoire et accédez-y:
mkdir /opt/icp cd /opt/icp
Copiez le package ICP dans ce répertoire:
docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.3 cp -r cluster /data
Remarque: cette commande Docker toolkit exécute la commande Linux copy (cp) à partir du répertoire spécifié (option -v). Le répertoire du cluster sera créé dans / opt / icp avec tous les fichiers nécessaires.
Configurer les clés SSH
Créez de nouvelles clés ssh dans le répertoire / opt / icp / cluster:
ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N "" cat ~/.ssh/id_rsa.pub | sudo tee -a ~/.ssh/authorized_keys systemctl restart sshd cp ~/.ssh/id_rsa ./cluster/ssh_key
Vérifiez que la clé est créée et située dans le dossier / opt / icp / cluster:
ls /opt/icp/cluster
Figure 13. Le contenu du dossier de clusterConfiguration ICP
Ajoutez l'adresse IP de chaque nœud du cluster dans le fichier / opt / icp / cluster / hosts (dans notre cas, nous utilisons la même adresse IP pour chaque composant que nous avons spécifié dans / etc / hosts). Nous le faisons avec la commande suivante:
nano /opt/icp/cluster/hosts
Figure 14. Le contenu du fichier hostsEnregistrez le fichier: Ctrl + X, Oui, Entrée
Des informations détaillées sur les options d'installation peuvent être trouvées dans le fichier de configuration:
more /opt/icp/cluster/config.yaml
Nous ne recommandons pas de modifier les paramètres d'installation par défaut.
Remarque: Les 2 fichiers d'installation les plus importants sont les hôtes et config.yaml, qui décrivent les options d'installation ICP. Dans une configuration multi-travailleurs, vous devez spécifier une liste d'adresses IP dans la section des travailleurs. Lors de l'installation de la version actuelle d'ICP en mode nœud unique, les adresses IP dans le fichier hosts ne changent que.
Installation ICP
Accédez au répertoire du cluster et exécutez l'installation:
cd /opt/icp/cluster docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 install
Selon les ressources disponibles, l'installation peut durer de 20 à 60 minutes. Si des erreurs se produisent (messages rouges), apportez les modifications appropriées aux fichiers de configuration. Parfois, l'installation peut ralentir un peu en raison de tentatives de reconnexion à des composants qui n'ont pas encore démarré (par exemple, lors du démarrage de Cloudant ou d'IAM).
L'installation devrait ressembler à ceci:
Figure 15. Résultat de l'installation ICPEn cas d'erreur, la désinstallation d'ICP peut être nécessaire:
docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 uninstall
Avant de passer à l'étape suivante, attendez environ 5 minutes pour que tous les composants ICP démarrent correctement.
Suivez le lien fourni une fois l'installation terminée, entrez dans la console ICP (admin / admin):
https://<ip_address>:8443
Figure 16. La page de connexion du panneau de commandePage d'accueil ICP:
Figure 17. Interface Web du panneau de commandeEn haut à droite, sélectionnez le menu Catalogue, une liste des applications disponibles s'affiche:
Figure 18. Catalogue de composantsCe répertoire contient une liste d'applications et de logiciels dont vous pouvez étudier la description à votre guise, mais ne vous précipitez pas jusqu'à présent pour les déployer.
Nous n'avons pas encore appris à gérer correctement l'ICP nouvellement installé (non seulement via l'interface Web, mais aussi la console sous la forme de CLI - Interface de ligne de commande), connecter le stockage persistant et effectuer de petits réglages.
En conclusion
Pour résumer.
Nous avons déployé avec succès l'édition communautaire IBM Cloud Private (version 2.1.0.3) sur un hôte dans une machine virtuelle exécutant Ubuntu Server OS 16/04/05. Pour le moment, nous avons personnellement vérifié l'installation sur les hyperviseurs VMware et Hyper-V, cela fonctionne définitivement sur XenServer et il ne devrait pas y avoir de difficultés pour VirtualBox et KVM.
Qui a vraiment hâte de se plonger davantage dans l'étude de l'ICP, c'est-à-dire une excellente sélection des travaux de laboratoire de notre collègue ici:
github.com/phthom/IBMCloudPrivateParmi les étapes à venir - après une nouvelle installation, nous avons juste besoin de configurer un peu ICP et de commencer à le remplir avec quelque chose d'utile et proche des tâches pratiques.
Si la communauté Habr soutient positivement cette initiative, alors au fur et à mesure de nos recherches et expérimentations, nous remplirons le cœur de la plate-forme avec les composants nécessaires pour la collecte de télémétrie, le stockage des données, le traitement, l'analyse, la prévision, la formation d'interfaces de programmes externes et la création d'applications utilisateur. En conséquence, développer une série de ces articles.
En attente de vos commentaires et suggestions!
De plus, nos personnes partageant les mêmes idées d'
AIXportal.ru ont préparé un magnifique clip vidéo sur l'installation d'IBM Cloud Private sur leur chaîne Youtube, quelqu'un sera plus à l'aise comme ceci:
youtu.be/eQwOOTzjM24Liens et documents utiles
•
Page produit en russe• Qui veut pratiquer l'anglais, le livre - «
ICP for Dummies » 2018. (40 pages)
•
Livres blancs pour ICP 2.1.0.3 à IBM Knowledge Center
• Communauté
ICP ouverte
sur IBM developerWorks•
Recettes ICP pour les développeurs