[PYTHON] [Jour 3] Session d'étude pour déployer de docker-compose vers Kubernetes avec une configuration minimale

Aperçu

Le contenu du troisième jour de la session d'étude du titre est décrit. Veuillez consulter la page de résumé suivante pour le contenu de toute la journée.

[Résumé] Session d'étude à déployer de docker-compose vers Kubernetes avec une configuration minimale

Ce que j'ai fait le troisième jour

--Création d'une image de conteneur pour le test --Incorporer les tests dans les pipelines CI / CD

Contenu du troisième jour

Créer une image de conteneur pour le test

image.png

Créez un conteneur pour exécuter un test simple. Envoyez une requête en utilisant python et déterminez le résultat. Si le contenu renvoyé à la requête contient la chaîne de caractères puyopuyo, qui explique le processus en détail, il se termine normalement par sys.exit (0). Au contraire, s'il n'est pas inclus, il se terminera anormalement par sys.exit (1). Cela conduit au dernier GitLab CI / CD.

import os
import requests
import sys

url = os.getenv('URL', 'http://localhost:3000')
check_str = os.getenv('CHECK_STR', 'Puyopuyo')

try:
    r_get = requests.get(url)
    response = True if r_get.ok else r_get.reason
    print(r_get.text)
    if r_get.text.find(check_str) == -1:
        print(check_str + "Ce n'est pas un problème! !!")
        sys.exit(1)
    else:
        print(check_str + "Alors ça va.")
        sys.exit(0)
except requests.exceptions.RequestException as e:
    response = str(e)
    sys.exit(1)

Essayez le test avec python uniquement

Ce test peut également être exécuté sur le python local. Dans l'environnement local python, les requests doivent être ʻImport` à l'avance. Vous pouvez exécuter le test en suivant les étapes ci-dessous.

--Installez Python --pip install requests s'il n'y a pas demandes --Utilisez docker-compose pour ʻup ʻapp

Ajouter un test à docker-compose.yml

Tout d'abord, préparez un Dockerfile pour créer un conteneur. ʻAlpine n'inclut pas les requêtes`, je l'ai donc installé.

■ Dockerfile

FROM python:3.6-alpine

WORKDIR /app

COPY ./*.py /app/

RUN pip install requests

CMD ["python", "test.py" ]

Sur la base de ce Dockerfile, ajoutez le service de test avec docker-compose.yml.

■ docker-compose.yml

version: '3'
services:
  app:
    build:
      context: ./app      #Emplacement de stockage Dockerfile
    image: registry.gitlab.com/tamoco-mocomoco/k8s-test/express:latest
    ports:                          #Connexion au port
      - 3000:5000
    environment:
      PORT: 5000

  test:
    build:
      context: ./test
    environment:
      URL: http://app:5000
      CHECK_STR: "Puyopuyo"

La variable d'environnement écrase l'URL de la destination de connexion et la chaîne de caractères à vérifier. Ce qu'il faut noter ici, c'est que puisque la connexion est établie à partir de l'intérieur du conteneur, c'est ʻapp ou le port est 5000, qui est le numéro de port dans l'application. Quand je l'ai exécuté avec le python local plus tôt, j'accédais à l'URL et au numéro de port après avoir été transféré avec docker-compose`, mais il est important de savoir où se connecter depuis l'intérieur du conteneur. Devenir.

Exécutez le test avec docker-comopse (exécuté dans le conteneur de test)

Vous pouvez créer et tester un conteneur avec docker-compose.

■ Exécuter le test dans un conteneur (succès)

$ docker-compose run test
<!DOCTYPE html>
<html>
  <head>
    <title>Puyopuyo Wadao</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Puyopuyo Wadao</h1>
    <p>Bienvenue à Puyopuyo Wadao</p>
  </body>
</html>

C'est puyopuyo, donc ça va.

Si vous l'exécutez dans un conteneur, vous devrez à nouveau build si la source d'origine change. Il semble préférable d'ajouter ici des fonctions telles que le rechargement à chaud (un mécanisme qui met à jour automatiquement la source dans le conteneur).

Au fait, si vous voulez que le test échoue, changez la chaîne de caractères puyopuyo dans ʻapp / express / routes / index.js en peeling ʻetc. Et cela échouera.

■ Exécuter le test dans le conteneur (échec)

$ docker-compose run test
<!DOCTYPE html>
<html>
  <head>
    <title>Peeling Wadao</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Peeling Wadao</h1>
    <p>Bienvenue à Peeling Wadao</p>
  </body>
</html>

Ce n'est pas Puyopuyo, donc c'est un problème! !!

Incorporer les tests dans les pipelines CI / CD

Ajoutez un mécanisme de test dans un conteneur de test à .gitlab-ci.yml. Changé pour construire l'image du conteneur si le test réussit.

■ .gitlab-ci.yml

image: docker:latest

stages:
  - test
  - build

variables:
  DOCKER_DRIVER: overlay

services:
- docker:dind

before_script:
- docker info
- apk update
- apk upgrade
- apk add docker-compose
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker-compose build

test:
  stage: test
  script:
  - docker-compose up -d app
  - sleep 5s
  - docker-compose run test

build:
  stage: build
  script:
  - docker-compose push

Vérifier le pipeline

Il a été confirmé que le test avait été exécuté comme le montre l'image ci-dessous.

コメント 2020-07-16 232531.jpg

En cas de succès, vous pouvez voir les résultats d'exécution suivants.

image.png

En cas d'échec, vous pouvez vérifier le résultat de l'exécution comme suit.

image.png

Rétrospective du troisième jour

Au départ, je préparais un test simple pour déterminer le résultat en exécutant curl dans un script shell. Je m'attendais à un mécanisme pour ajouter curl au conteneur sur CI et le tester en exécutant ʻapk add curl, mais j'en étais un peu accro, alors j'ai décidé de le réduire avec python`.

Lors de la création d'un conteneur de test, je pense qu'il est préférable d'utiliser un conteneur qui peut exécuter des tests ʻe2etels quecypress`.

cypress

Recommended Posts

[Jour 3] Session d'étude pour déployer de docker-compose vers Kubernetes avec une configuration minimale
Du «dessin» à «l'écriture» du diagramme de configuration: essayez de dessiner le diagramme de configuration AWS avec des diagrammes