мета-данные страницы
  •  

Это старая версия документа!


Выполнение домашнего задания для DevOps-тренировок в Яндексе, лекция "Облако. Кто виноват и что делать."

Описание задания и все ссылки есть у меня в репозитории на github

Для начала нужно создать две виртуальные машины на Яндекс облаке и клонировать себе в каждую машину репозиторий с гитхаба. В рамках проекта тренировок предоставляется возможность бесплатно использовать виртуальные машины по запросу.

Машины созданы

Подключаемся удобным способом к ним по SSH, я использую Windows Terminal. Клонируем репозиторий

git clone https://github.com/igkfellk/y-y-devops-trainings-cloud-1/

Сборка образа для catGPT

Создаем каталог

sudo mkdir /etc/docker/catGPT
Копируем нужные файлы в созданный каталог
sudo cp -r /home/ikfellk/y-y-devops-trainings-cloud-1/catgpt/. /etc/docker/catGPT/
Переходим в каталог
cd /etc/docker/catGPT
Создаем Dockerfile
sudo nano Dockerfile
# Используем образ Golang рекомендуемый в задании
FROM golang:1.21 AS builder

# Указываем автора файла
MAINTAINER Igor Kucherenko <i.kucherenko@test.ru>

# Устанавливаем и переходим в рабочую директорию
WORKDIR /go/src/app

# Копируем go.mod и go.sum для загрузки зависимостей
COPY go.mod go.sum ./

# Загружаем зависимости
RUN go mod download

# Копируем исходный код приложения
COPY . .

# Собираем приложение
RUN CGO_ENABLED=0 go build -o /go/bin/app
RUN chmod +x /go/bin/app

# Создаем runtime образ на основе gcr.io/distroless/static-debian12:latest-amd64
FROM gcr.io/distroless/static-debian12:latest-amd64

# Копируем собранный бинарный файл из builder образа
COPY --from=builder /go/bin/app /go/bin/app

# Определяем команду, которая будет запускаться при запуске контейнера
CMD ["/go/bin/app"]

Запуск сборки

sudo docker build -t ikfellk/catgpt:v1 .

Запуск контейнера

docker run -d -p 8080:8080 ikfellk/catgpt:v1

Тестируем

Для проверки созданных образов выполняем команду

docker images
и получаем подобный вывод

Для проверки созданных контейнеров выполняем команду

docker ps -a
и получаем подобный вывод

идем в браузер и открываем страницу

http://ваш_ip:8080/

Получаем такой вывод

Коннектимся к яндекс облаку через Oauth

Для полноценного выполнения задания еще потребуется настроить связь через oauth яндекса с яндекс облаком. Тут ничего сложного, нужно получить токен через свой аккаунт яндекса перейдя по ссылке Далее в ранее созданной виртуальной машине или машинах выполнить подключение в несколько этапов:

  • Скачать и установить яндекс CLI

curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

  • Выполнить настройку подключения через созданный токен

yc init

Создаем реестр

Выполнив одну команду, получаем созданный реестр

yc container registry create --name registry-ikfellk

Где:
  • registry-ikfellk - любое имя на ваше усмотрение

Загружаем образ в реестр

Для начала смотрим на образы

docker images

Выбираем нужный нам образ для загрузки и присваиваем тег яндекса

docker tag ikfellk/catgpt:v1 \
cr.yandex/crp3b70qbcrknbg22qbk/ikfellkcatgpt:v1
Где:

  • crp3b70qbcrknbg22qbk - идентификатор вашего реестра на яндекс облаке

Загружаем образ в реестр

docker push cr.yandex/crp3b70qbcrknbg22qbk/ikfellkcatgpt:v1
Проверяем что образ загрузился командой
yc container image list
И получаем такую картину

Автосборка с помощью Github CI

Для начала нужно создать ключи доступа к яндекс облаку из Github

yc iam access-key create --service-account-name ikfellk

Где:

  • ikfellk - имя вашего аккаунта в яндекс облаке

Получаем такой вывод

Создаем токен авторизации

yc iam create-token

Создаем в корне своего репозитория на гитхабе файл

docker-build-catgpt.yml
name: Docker Build and Deploy catgpt

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Build and push Docker image
        run: |
          docker build -t ikfellk/catgpt:v1 .
          docker tag ikfellk/catgpt:v1 cr.yandex/crp3b70hbcrvtbg25qbk/ikfellkcatgpt
          echo "$YANDEX_CLOUD_SERVICE_ACCOUNT_KEY" | yc auth login --service-account-key -
          docker login -u jsonkey -p "$(yc registry get-credentials)" cr.yandex/crp3b70hbcrvtbg25qbk
          docker push cr.yandex/crp3b70hbcrvtbg25qbk/ikfellkcatgpt
      env:
        YANDEX_CLOUD_SERVICE_ACCOUNT_KEY: ${{ secrets.YANDEX_CLOUD_SERVICE_ACCOUNT_KEY }}
      - name: Deploy to Yandex.Cloud
        run: |
          yc compute container create --name registry-ikfellk --image cr.yandex/crp3b70hbcrvtbg25qbk/ikfellkcatgpt --format json

Обсуждение

Ваш комментарий: