Рубрики
Uncategorized

Непрерывная интеграция и доставка в AWS Kubernetes

Учебник по настройке CI / CD для автоматических развертываний к AWS Kubernetes. Теги с Кубернетами, AWS, DEVOPS, Учебником.

Семафор Дает вам возможность легко создавать непрерывную интеграцию и доставку (CI/CD) рабочие процессы для создания, тестирования и развертывания приложений. В этой статье мы узнаем, как объединить семафор с AWS, чтобы запустить микросервис на Куберане всего за несколько минут.

Что мы строим

Мы собираемся настроить CI/CD-трубопроводы для автоматизации сборки и развертывания. К концу статьи наш трубопровод сможет:

  • Установите проектные зависимости.
  • Пробежать модульные тесты.
  • Построить и пометить изображение докера.
  • Нажмите на изображение докера на реестр контейнера Amazon (ECR).
  • Укажите развертывание одним щелчком мыши на службу Amazon Kubernetes (EKS).

В качестве отправной точки у нас есть микросервис Ruby Sinatra, который обнажает несколько конечных точек HTTP. Мы пойдем за шагом, выполним некоторые модификации по пути, чтобы она работала в экосистеме Amazon.

Что вам нужно,

Первые вещи сначала идите к Демо-репозиторий , вилить это и клонировать его к вашей рабочей станции.

Семафореци-демонстрационные/семафор-демо-Ruby-Kubernetes

Семафор демонстрируют трубопровод CI/CD для Куберанес.

Это пример применения и конвейера CI/CD, показывающий, как создать, тестировать и развернуть микросервис для Kubernetes, используя SEMAPHORE 2.0.

Ингредиенты:

  • Ruby Sinatra как веб-каркас
  • RSPEC для тестов
  • Упаковано в контейнер докеров
  • Контейнер толкнул в реестр Docker Hub
  • Развернут в Кубернаны

CI/CD на семафор

Если вы новичок в семафоре, не стесняйтесь вилять этот репозиторий и используйте его до Создать проект Отказ

Трубопровод CI/CD определен в .semaphore каталог и выглядит так:

Настройка локальной приложения

Чтобы запустить микросервис:

bundle install --path vendor/bundle
bundle exec rackup

Чтобы запустить тесты:

bundle exec rspec

Для создания и запуска контейнера Docker:

docker build -t semaphore-demo-ruby-kubernetes .
docker run -p 80:4567 semaphore-demo-ruby-kubernetes
curl localhost
> hello world :))

Лицензия

Copyright (C) 2019 Оказанный текст

Распределен под лицензией MIT. Смотрите файловую лицензию.

В AWS нам понадобится Эластичный реестр контейнера (ECR), Эластичная служба Kubernetes (Екс) и A IAM пользователь с программным доступом. Я сердечно рекомендую использовать Экктл создать кластер.

Если вам нужна помощь с AWS, проверьте полный удар, скриншот на оригинальной учетной записи на оригинале Недоставленное руководство Отказ

И вы должны установить некоторые инструменты на свою рабочую машину, а также:

С этим с пути, мы готовы начать. Давайте начнем!

Настройка семафора

Чтобы автоматизировать все, что мы собираемся использовать семафор, мощную, быструю и простое в использовании платформы CI/CD.

Настройка семафора для работы с нашим кодом Super легко:

  1. Войдите в свой Семафор Счет.
  2. Следуйте по ссылке на боковой панели, чтобы создать новый проект.
  3. Семафор покажет ваши репозитории GitHub, нажмите на Добавить репозиторий Отказ

У нас есть некоторые образцы трубопроводов, уже включенных в наше приложение; К сожалению, это не планировалось на AWS. Неважно, мы сделаем новые. На данный момент давайте просто удалите файлы, которые нам не понадобится:

$ git rm .semaphore/docker-build.yml
$ git rm .semaphore/deploy.k8s.yml
$ git rm deployment.yml
$ git commit -m "first run on Semaphore"
$ git push origin master

Подключите AWS и SEMAPHORE

Нам нужно поставить семафор с ключами доступа к нашей учетной записи AWS. Семафор обеспечивает Секреты функция для хранения конфиденциальной информации надежно.

Нам понадобится два секрета. Первый имеет токены доступа для пользователя AWS IAM:

$ sem create secret AWS \
    -e AWS_ACCESS_KEY_ID=«YOUR_ACCESS_KEY_ID» \
    -e AWS_SECRET_ACCESS_KEY=«YOUR_SECRET_ACCESS_KEY»

Второй секрет имеет файл Kubeconfig, который необходимо подключиться к кластеру Kubernetes. Этот файл должен был быть создан Eksctl во время начального создания кластера. Файл, по умолчанию, расположен в $ Home/.kube/config в вашей рабочей станции. Загрузите этот файл в семафор:

$ sem create secret aws-k8s \
    -f $HOME/.kube/config:/home/semaphore/.kube/config

Непрерывное развертывание с семафором

Если вам интересно разницу между непрерывной интеграцией и непрерывной доставкой, а также о том, как работают CI/CD-трубопроводы, я настоятельно рекомендую по чтению «CI/CD-трубопровод: нежное введение» для прекрасного объяснения концепций.

Наш рабочий процесс имеет три трубопровода:

  1. Непрерывный интеграционный трубопровод: создает и тестирует приложение. Я не буду покрывать это здесь. Вы можете проверить Оригинальный пост узнать о его тонкостях.
  2. Создание трубопровода: генерирует и загружает изображение докера к AWS ECR.
  3. Развернуть трубопровод: запускает развертывание Kubernetes.

Строительный трубопровод

В этом разделе мы создадим конвейер Packer Build. Который выглядит так:

Создайте новый файл .semaphore/docker-build.yml с содержанием следующих трех кодовых ящиков.

Определить Имя и агент ; Агент — это Тип машины Это способствует трубопроводу:

version: v1.0
name: Docker build
agent:
  machine:
    type: e1-standard-2
    os_image: ubuntu1804

Далее «Build» Block, который имеет ваши данные учетной записи AWS (которые вам придется настроить), секрет, который мы создали ранее, и одному «Docker Building» работают с командами сборки:

blocks:
  - name: Build
    task:
      env_vars:
        # Adjust as required
        - name: AWS_DEFAULT_REGION
          value: «YOUR_AWS_REGION (eg. "us-east-2")»
        - name: ECR_REGISTRY
          value: «YOUR_ECR_URI»
      secrets:
        - name: AWS
      jobs:
        - name: Docker build
          commands:
            - checkout
            - sudo pip install awscli
            - aws ecr get-login --no-include-email | bash
            - docker pull "${ECR_REGISTRY}:latest" || true
            - docker build --cache-from "${ECR_REGISTRY}:latest" -t "${ECR_REGISTRY}:${SEMAPHORE_WORKFLOW_ID}" .
            - docker images
            - docker push "${ECR_REGISTRY}:${SEMAPHORE_WORKFLOW_ID}"

Чтобы подключить этот трубопровод с помощью следующего, добавьте Продвижение :

promotions:
  - name: Deploy to Kubernetes
    pipeline_file: deploy-k8s.yml

Манифест развертывания

Автоматическое развертывание — сильный костюм Kubernetes. Все, что вам нужно, это манифест с ресурсами, которые вы хотите онлайн. Создайте новый файл под названием Развертывание .yml с содержанием следующих двух кодовых ящиков.

А LoadBalancer Сервис для пересылки HTTP Traffic:

apiVersion: v1
kind: Service
metadata:
  name: semaphore-demo-ruby-kubernetes-lb
spec:
  selector:
    app: semaphore-demo-ruby-kubernetes
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 4567

И микросервис стручок , который содержит ссылку на изображение докера. Добавьте следующий код в манифест:

--------

apiVersion: apps/v1
kind: Deployment
metadata:
  name: semaphore-demo-ruby-kubernetes
spec:
  replicas: 1
  selector:
    matchLabels:
      app: semaphore-demo-ruby-kubernetes
  template:
    metadata:
      labels:
        app: semaphore-demo-ruby-kubernetes
    spec:
      containers:
        - name: semaphore-demo-ruby-kubernetes
          image: "${ECR_REGISTRY}:${SEMAPHORE_WORKFLOW_ID}"
      imagePullSecrets:
        - name: aws-ecr

Заменить Реплики: 1 С числом узлов у вас есть в вашем кластере.

Трубопровод развертывания

Время для автоматизации развертывания. В этом разделе мы создадим трубопровод «Развертывание в Кубернану»:

Создайте трубопровод развертывания в .semaphore/Deploy-k8s.yml С следующими 2 ящиками кода:

version: v1.0
name: Deploy to Kubernetes
agent:
  machine:
    type: e1-standard-2
    os_image: ubuntu1804
blocks:
  - name: Deploy to Kubernetes
    task:
      secrets:
        - name: aws-k8s
        - name: AWS
      env_vars:
        # Adjust environment values for your account
        - name: AWS_DEFAULT_REGION
          value: «YOUR_AWS_REGION»
        - name: ECR_REGISTRY
          value: «YOUR_ECR_URI»
      jobs:
        - name: Deploy
          commands:
            - checkout
            - mkdir -p ~/bin
            - curl -o ~/bin/aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.12.7/2019-03-27/bin/linux/amd64/aws-iam-authenticator
            - chmod a+x ~/bin/aws-iam-authenticator
            - export PATH=~/bin:$PATH
            - sudo pip install awscli
            - export ECR_PASSWORD=$(aws ecr get-login --no-include-email | awk '{print $6}')
            - kubectl delete secret aws-ecr || true
            - kubectl create secret docker-registry aws-ecr --docker-server="https://$ECR_REGISTRY" --docker-username=AWS --docker-password="$ECR_PASSWORD"
            - kubectl get secret aws-ecr
            - cat deployment.yml | envsubst | tee deploy.yml
            - kubectl apply -f deploy.yml

Работа может быть разбита в трех частях:

  1. Установите инструменты AWS.
  2. Создайте секрет в кластере Kubernetes с токеном ECR — так что он может вытащить изображение из частного репо.
  3. Подготовьте раскрытие развертывания и отправьте его в кластер.

Второй блок тегирует текущее изображение как «последнее», чтобы указать, что это изображение, фактически запущенное на кластере. Работа извлекает текущее изображение, загоняет «последнее» тег и снова толкает его в реестр.

  - name: Tag latest release
    task:
      secrets:
        - name: AWS
      env_vars:
        # Adjust environment values for your account
        - name: AWS_DEFAULT_REGION
          value: 
        - name: ECR_REGISTRY
          value: 
      jobs:
        - name: Docker tag latest
          commands:
            - sudo pip install awscli
            - aws ecr get-login --no-include-email | bash
            - docker pull "${ECR_REGISTRY}:$SEMAPHORE_WORKFLOW_ID"
            - docker tag "${ECR_REGISTRY}:$SEMAPHORE_WORKFLOW_ID" "${ECR_REGISTRY}:latest"
            - docker push "${ECR_REGISTRY}:latest"

С трубопроводами определены, мы готовы катиться.

Развертывание в Кубернеты

Давайте научим наше приложение Sinatra Sing. Добавьте следующий код в классе App в app.rb :

get "/sing" do
  "And now, the end is near
   And so I face the final curtain..."
end
$ git add .semaphore/*
$ git add deployment.yml
$ git add app.rb
$ git commit -m "add deployment pipeline"
$ git push origin master

Подождите, пока первые два трубопровода не заканчиваются и ударили Продвигать кнопка:

Разрешить несколько секунд для развертывания. Вы можете отслеживать прогресс в:

$ kubectl get pods
$ kubectl get deployments
$ kubectl get service

После завершения проверьте внешний IP-адрес, который был назначен вашему LoadBalancer Сервис и попробуйте конечную точку HTTP.

$ curl -w "\n" /sing
And now, the end is near
     And so I face the final curtain...

Еще раз, Ol ‘голубые глаза поет для нас.

Финальный занавес

Поздравляю! Теперь у вас есть полностью автоматизированный конвейер постоянного доставки в Kubernetes.

Не стесняйтесь вилкой Семафор-демо-Ruby-Kubernetes Репозиторий и создайте проект семафора для развертывания его на экземпляре Kubernetes. Вот некоторые потенциальные изменения, которые вы можете попробовать:

  • Создайте кластер постановки.
  • Создайте контейнер для разработки и пробеги тесты внутри него.
  • Расширить проект с большим количеством микросервисов.

Вы нашли пост полезным? Дайте мне знать на ❤️-ing или оставляя комментарий ниже.

Заинтересованы в CI/CD и Kubernetes? Мы работаем над бесплатной электронной книгой, Зарегистрироваться Чтобы получить его, как только он опубликован.

Спасибо за чтение!

Оригинал: «https://dev.to/semaphore/continuous-integration-and-delivery-to-aws-kubernetes-12d6»