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

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


Выполнение домашнего задания для 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

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

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

on:
  push:
    tags:
      - '*'  # Любой тег

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Login to Yandex
        run: docker login -u ${{ secrets.YANDEX_USERNAME }} -p ${{ secrets.YANDEX_CLOUD_SERVICE_ACCOUNT_KEY }}  cr.yandex/crj3b74hbhretbg25qbk
      - name: Build and push Docker image
        run: |
          docker build -t cr.yandex/crj3b74hbhretbg25qbk/catgpt:v1 ./catgpt
          docker push cr.yandex/crj3b74hbhretbg25qbk/catgpt:v1

Где:
  • YANDEX_USERNAME - логин от яндекс облака
  • YANDEX_CLOUD_SERVICE_ACCOUNT_KEY - Токен авторизации созданный ранее
  • crj3b74hbhretbg25qbk - Идентификатор вашего реестра на яндекс облаке

Создаем секреты описанные в предыдущем шаге для создания вы должны находится в своем репозитории и нажать кнопку Settings

Далее перейти в Secrets and variables и далее в Actions

Теперь создаем секреты для авторизации Нужно нажать New repository secret Ввести названия что упоминались выше или можете посмотреть свой файл docker-build-catgpt.yml и там найти строки с секретами и изменить на ваши названия, которые вы создали

Важное напоминание

У вас должен лежать Dockerfile в каталоге, который использует команда docker build.

В случае данного задания у меня лежит файл в каталоге ./catgpt

Обсуждение

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