GNU/Linux >> Tutoriels Linux >  >> Cent OS

Déployer un pod, un contrôleur de réplication et un service dans Kubernetes sur CentOS 7

Bonjour Techies, Dans notre tutoriel précédent, nous avons déjà discuté des étapes d'installation de Kubernetes sur CentOS 7 / RHEL 7. Dans ce tutoriel, nous verrons comment nous pouvons déployer des pods, un contrôleur de réplication et un service.

Je suppose que la configuration de Kubernetes est déjà opérationnelle. Si ce n'est pas le cas, reportez-vous au guide suivant :

  • Comment installer Kubernetes (k8s) 1.7 sur CentOS 7 / RHEL 7

Passons maintenant au déploiement du pod. Le pod est un multiniveau ou un groupe de conteneurs qui est lancé sur l'un des nœuds Worker ou Minion. Pour déployer un pod, nous devons d'abord créer un fichier yml ou json sur le nœud maître ou dans un système où l'outil kubectl est installé. Kubectl utilisera le fichier yml et se connectera à kube-apiserver sur le port 6443, puis kube-apiserver se connectera à kube-controller-manager et Kube-controller-manager se connectera ensuite à Kube-Scheduler et le programme de planificateur se connecte aux nœuds de travail à l'aide de kubelet l'agent, puis l'agent kubelet se connecte au démon docker sur le nœud et lance un conteneur basé sur la définition du pod.

Avant de commencer à créer le fichier pod yml, assurez-vous d'abord que vous avez testé l'image docker sur le docker hub. Dans mon cas, j'ai déjà poussé une image docker (linuxtechi/web-server-php) sur docker hub.

Créons maintenant un fichier pod.yml sur le serveur maître.

[[email protected] ~]# mkdir /techcode[[email protected] ~]# cd /techcode/[[email protected] techcode]# vi pod.ymlapiVersion :v1kind :Podmetadata :  nom :web-server-pod libellés :   application :webserver-app1   région :IN   rack :r1   version :"1.1" spec :  conteneurs :    - nom :web-server-test-container      image :linuxtechi/web-server-php:testversion      ports :      - containerPort :80 

Enregistrez et quittez le fichier.

Dans le fichier, nous avons spécifié apiversion comme v1 , vous pouvez vérifier l'apiversion à partir du fichier "/root/.kube/config", Spécifiez Kind comme 'Pod ' car nous déployons un pod à l'aide de ce fichier yml. Spécifiez les métadonnées et l'étiquette du pod.

En dehors de cela, nous avons mentionné la spécification du conteneur comme "Nom de l'image" et le port exposé à partir du conteneur, etc.

Utilisez ci-dessous "kubectl ‘ commande pour déployer le pod.

[[email protected] techcode]# kubectl create -f pod.ymlpod "web-server-pod" créé[[email protected] techcode]#

Vérifiez l'état du pod à partir du nœud maître à l'aide de la commande suivante

[[email protected] ~]# kubectl get podsNAME             READY     STATUS    RESTARTS   AGEweb-server-pod   1/1       Running   0          4m[[email protected] ~]#[[email protected] ~]# kubectl get pods -o wideNAME READY     STATUS    RESTARTS   AGE       IP          NODEweb-server-pod   1/1       En cours d'exécution   0          4 m        10.32.0.2   worker-node2[[email protected] ~]#

Selon la sortie ci-dessus, le pod a été déployé sur le nœud de travail 2. Nous ne pouvons pas accéder à l'application exécutée à l'intérieur du pod car jusqu'à présent, nous n'avons défini aucune règle de tapotement ou de natting pour le pod.

Créons une règle de telle manière que si une requête arrive sur l'adresse IP du nœud de travail 2 sur un port spécifique, elle doit être redirigée vers le pod (web-server-pod) sur le port 80. Cela peut être réalisé avec le service. Un service peut être défini à partir d'une commande ou via un fichier yml.

Création d'un service à partir de la ligne de commande à l'aide de "kubectl expose"

[[email protected] ~]# kubectl expose pods web-server-pod  --name=webpod-service --target-port=80  --type=NodePortservice "webpod-service" exposé[[email protected] ~ ]#

La commande ci-dessus exposera le pod ou le conteneur au monde extérieur. Il générera le port aléatoire sur le nœud sur lequel les pods sont créés et nous pouvons dire que la commande ci-dessus fera la tâche de tapotement pour nous, les utilisateurs externes peuvent accéder à mon serveur Web qui s'exécute à l'intérieur du pod avec l'adresse IP du nœud avec un port aléatoire.

Vérifiez l'état du service à l'aide des commandes suivantes

 [[[[[[e-mail protégé] ~] # kubectl Obtenez SVCName Cluster-IP Port (s) externe-IP AGEKUBERNESTES 10.96.0.1  443 / TCP 2HWEBPOD-Service 10.101.51.190  80:30108 / TCP 2M [ [E-mail protégé] ~] # [[[[[e-mail protégé] ~] # Kubectl Obtenez SVC -O Widename Port-IP Cluster-IP Port (s) EXTERNE-IP AGE SELECKUBERNESTES 10.96.0.1  443 / TCP 2H  WEBPOD-SERVICE 10.101 .51.190          80:30108/TCP   3m        app=webserver-app1,rack=r1,region=IN,version=1.1[[email protected] ~]#

Essayez maintenant d'accéder au serveur Web

~]# curl 192.168.1.50:30108

Nous pouvons supprimer le service créé ci-dessus en utilisant la commande suivante

[[email protected] ~]# kubectl delete svc webpod-serviceservice "webpod-service" supprimé[[email protected] ~]#

Création d'un service à l'aide du fichier yml

Créez un nouveau fichier yml avec le nom 'service.yml ' avec le contenu suivant. Cette fois, la valeur du paramètre Kind sera "Service". Sous le champ Spécification mentionné le port sur lequel le serveur Web ou l'application s'exécute à l'intérieur du conteneur et NodePort est un port aléatoire sur le nœud de travail. Le sélecteur indique que ce service sera applicable pour le pod dont le paramètre de version est '1.1', donc dans notre cas ce service sera applicable pour le pod "web-server-pod"

[[email protected] techcode]# vi service.ymlapiVersion :v1kind :Servicemetadata : nom :webpod-service labels :   app :webpod-service-labelspec : type :NodePort ports : - port :80   nodePort :30001   protocol :TCP sélecteur :   version :"1.1"

Créez maintenant le service en exécutant la commande suivante

[[email protected] techcode]# kubectl create -f service.ymlservice "webpod-service" créé[[email protected] techcode]#

Vérifions l'état du service en utilisant la commande ci-dessous

 [[[[[[e-mail protégé] TechCode] # Kubectl Obtenez SVCname Cluster-IP Port (s) EXTERNE-IP AGEKUBERNESTES 10.96.0.1  443 / TCP 2HWebPod-Service 10.102.18.35  80:30001 / TCP 1M [ [E-mail protégé] TechCode] # [[[[[[e-mail protégé] TechCode] # Kubectl Obtenez SVC -O Widename Port-IP Cluster-IP Port (s) EXERCICE SELECKUBERNESTES 10.96.0.1  443 / TCP 2H  WebPoD-Service 10.102 .18.35          80:30001/TCP   2m        version=1.1[[email protected] techcode]#

Accédez maintenant à votre application à l'aide de la commande curl :

[[email protected] ~]# curl http://192.168.1.50:30001

La sortie serait quelque chose comme ci-dessous

Pour l'instant, nous avons déployé un pod et son service. Supposons que je veuille déployer 5 pods du même type, alors il peut être déployé à l'aide du contrôleur de réplication. En bref, il s'appelait 'rc ‘. Chaque fois que nous fournissons des pods à l'aide de rc, les pods seront en haute disponibilité et tolérance aux pannes, cela signifie que si quelque chose ne va pas avec le pod, le pod du même type sera déployé automatiquement par le cluster.

Déploiement du contrôleur de réplication

Le contrôleur de réplication est également déployé avec le fichier yml à l'aide de la commande kubectl. Créons un fichier yml pour rc.

[[email protected] techcode]# vi replication-controller.ymlapiVersion :v1kind :ReplicationControllermetadata : nom :webserver-rcspec : répliques :5 sélecteur :   app :  lamp-app1 template :    metadata :     labels :       app :lamp-app1       région :IN       rack :r1       version :"1.1"    spec :       conteneurs :       - nom :webserver-php-con1         image :linuxtechi/web-server-php:testversion         ports :         - containerPort :80

Cette valeur de paramètre de type de temps est "ReplicationController " et sous spécification nous avons " replicas=5 ', cela signifie que 5 pods seront déployés sur les nœuds de travail à l'aide de l'image docker "linuxtechi/web-server-php:testversion"

Exécutez la commande suivante pour déployer le contrôleur de réplication

[[email protected] techcode]# kubectl create -f replication-controller.ymlreplicationcontroller "webserver-rc" créé[[email protected] techcode]#

Vérifiez l'état du pod et voyez où il a été provisionné

[[email protected] techcode]# kubectl get pods[[email protected] techcode]# kubectl get pods -o wide

Vérifiez l'état du contrôleur de réplication à l'aide de la commande kubectl ci-dessous

 [[[[[e-mail protégé] TechCode] # Kubectl Obtenez RCName Ready ACTUEL DARETYWEBSERVER-RC 5 5 5 5 5 m [[Email Protégé] TechCode] # Kubectl Obtenez RC -O WEBENNAME PRÉSENTÉ Conteneur (s) d'âge actuel (s) SELECTORwebserver-rc   5         5         5         5m        webserver-php-con1   linuxtechi/web-server-php:testversion   app=lamp-app1[[email protected] techcode]#

Définissons le service pour le contrôleur de réplication créé ci-dessus.

[[email protected] techcode]# vi rc-service.ymlapiVersion :v1kind :Servicemetadata : nom : webserver-service labels :   app :webserver-service-labelspec : type : ports nodeport : - port : 80   nodePort : 30002   protocol :Sélecteur TCP :   version : "1.1"

Créez le service à l'aide de la commande kubectl

[[email protected] techcode]# kubectl create -f rc-service.ymlservice "webserver-service" créé[[email protected] techcode]#

Obtenez l'état du service à l'aide de la commande kubectl ci-dessous

 [[[[[[e-mail protégé] TechCode] # Kubectl Obtenez SVC -O Widename Port-IP Cluster-IP Port (s) EXTERNE-IP AGE SELECKUBERNESTES 10.96.0.1  443 / TCP 3H  WebServer-Service 10.111.34.34        80:30002/TCP   1m        version=1.1[[email protected] techcode]#

Essayez maintenant d'accéder au serveur Web à partir des deux nœuds

[[email protected] ~]# curl http://192.168.1.40:30002

[[email protected] ~]# curl http://192.168.1.50:30002

Selon la sortie ci-dessus, nous pouvons accéder à notre serveur Web en utilisant l'adresse IP des deux nœuds de travail. Chaque fois que nous accédons au serveur Web à l'aide de nœuds de travail IP, la demande est automatiquement équilibrée entre les pods sur les nœuds.

Ceci conclut l'article. Veuillez partager vos commentaires et commentaires au cas où cet article aiderait à déployer et à comprendre les pods, le service et le contrôleur de réplication.


Cent OS
  1. Comment installer et configurer Fail2Ban sur CentOS 8 et Fedora 33

  2. Arrêtez et désactivez Firewalld sur CentOS 7 - Processus étape par étape ?

  3. Systemctl remplace les commandes Chkconfig et Service dans CentOS 7

  4. Comment désactiver le service rpc.quotad dans CentOS/RHEL 6 et 7

  5. Comment masquer ou démasquer un service dans CentOS/RHEL 7 et 8

Comment installer Prometheus et node_exporter sur CentOS 7

Comment installer Prometheus Monitoring et node_exporter sur CentOS 8

Installation du contrôleur de domaine Samba 4 sur CentOS 7

Contrôleur de domaine supplémentaire Samba 4 pour la réplication de basculement sur CentOS 7

Comment installer Nagios Core et NRPE sur CentOS 8

Comment installer Streamlit et déployer une application Streamlit sur CentOS 8