Самый быстрый способ развернуть приложение Go в Kubernetes
Настройка кластера Kubernetes может потребовать значительных затрат времени. Переход от нуля к развертыванию обычно включает в себя множество шагов, требующих обращения к документации и нескольким руководствам — просто для того, чтобы все было относительно безопасно.
В этой статье мы будем использовать Encore Infrastructure SDK , чтобы декларативно определить инфраструктуру, необходимую нашему бэкэнду Go, а затем использовать Encore для автоматического выделения нашего кластера Kubernetes вместе с другой инфраструктурой. прямо в нашем облачном аккаунте.Ваш код можно будет развернуть как в GCP, так и в AWS, а Encore подготовит ваш кластер с помощью GKE или EKS Fargate, в зависимости от того, какое облако вы выберете.
При желании вы также можете выполнить развертывание с использованием бессерверных вычислительных экземпляров, не меняя ни строчки кода. Это отлично подходит для создания дешевых и простых в использовании тестовых сред.
Установите Encore
Установите Encore CLI для запуска локальной среды:
- macOS:
brew install encoredev/tap/encore
- Linux:
curl -L https://encore.dev/install.sh | bash
- Windows:
iwr https://encore.dev/install.ps1 | iex
Создайте свое приложение
Для простоты объяснения того, как работает Encore, мы собираемся клонировать готовое приложение из репозитория шаблонов Encore . Это простой монолит, реализующий сокращатель URL-адресов. Приложение имеет REST API и базу данных PostgreSQL.
Установите его, запустив:
encore app create my-app-name --example=url-shortener
Запуск локально
Чтобы запустить приложение локально, убедитесь, что у вас установлен и работает Docker . Это необходимо для запуска приложений Encore с базами данных SQL.
Затем просто запустите:
encore run
Вы должны увидеть это:
Попробуйте API
Затем сделайте запрос в свою конечную точку:
curl http://localhost:4000/url -d '{"URL": "https://encore.dev"}'
Вы должны увидеть это:
{ "ID": "5cJpBVRp", "URL": "https://encore.dev" }
Откройте панель разработчика.
Во время encore run
работы откройте http://localhost:9400/ , чтобы просмотреть локальную панель разработчика Encore .
Здесь вы можете просмотреть документацию по API, использовать API через проводник API и просмотреть трассировки с помощью встроенной распределенной трассировки Encore.
Взгляните на код
Это приложение теперь работает локально, без какой-либо ручной работы по настройке локального экземпляра Kubernetes, и мы собираемся развернуть его в нашей облачной учетной записи. Итак, как это работает?
Давайте посмотрим на код.👇
package url import ( "context" "crypto/rand" "encoding/base64" "encore.dev/storage/sqldb" ) type URL struct { ID string // short-form URL id URL string // complete URL, in long form } type ShortenParams struct { URL string // the URL to shorten } // Shorten shortens a URL. // //encore:api public method=POST path=/url func Shorten(ctx context.Context, p *ShortenParams) (*URL, error) { id, err := generateID() if err != nil { return nil, err } else if err := insert(ctx, id, p.URL); err != nil { return nil, err } return &URL{ID: id, URL: p.URL}, nil } // Get retrieves the original URL for the id. // //encore:api public method=GET path=/url/:id func Get(ctx context.Context, id string) (*URL, error) { u := &URL{ID: id} err := sqldb.QueryRow(ctx, ` SELECT original_url FROM url WHERE id = $1 `, id).Scan(&u.URL) return u, err } type ListResponse struct { URLs []*URL } // List retrieves all URLs. // //encore:api public method=GET path=/url func List(ctx context.Context) (*ListResponse, error) { rows, err := sqldb.Query(ctx, ` SELECT id, original_url FROM url `) if err != nil { return nil, err } defer rows.Close() urls := []*URL{} for rows.Next() { var u URL if err := rows.Scan(&u.ID, &u.URL); err != nil { return nil, err } urls = append(urls, &u) } if err := rows.Err(); err != nil { return nil, err } return &ListResponse{URLs: urls}, nil } // generateID generates a random short ID. func generateID() (string, error) { var data [6]byte // 6 bytes of entropy if _, err := rand.Read(data[:]); err != nil { return "", err } return base64.RawURLEncoding.EncodeToString(data[:]), nil } // insert inserts a URL into the database. func insert(ctx context.Context, id, url string) error { _, err := sqldb.Exec(ctx, ` INSERT INTO url (id, original_url) VALUES ($1, $2) `, id, url) return err }
Как вы можете видеть, здесь нет конфигурации Kubernetes или другой конфигурации инфраструктуры. Это все код Go и почти только бизнес-логика.
Мы просто определили конечную точку API с помощью аннотации //encore:api
и импортировали encore.dev/storage/sqldb
пакет.
Во время компиляции Encore анализирует код, чтобы понять, каковы требования к инфраструктуре для запуска приложения, а затем генерирует необходимый шаблонный код.
При локальном запуске CLI заботится о настройке локальных версий инфраструктуры, а в облаке Encore предоставляет необходимые вам облачные сервисы на основе ваших параметров конфигурации при создании среды. Теперь давайте продолжим и сделаем именно это!
Подключите свой облачный аккаунт
Сначала нам нужно подключить облачный аккаунт к Encore. Сделайте это с помощью облачной панели управления > (выберите свое приложение) > Настройки приложения > Интеграции > Подключить облако .
AWS
Если вы используете AWS, следуйте инструкциям на странице, чтобы создать роль IAM, а затем подключите эту роль к Encore.
В целях вашей безопасности обязательно проверьте Require external ID
и укажите внешний идентификатор, указанный в инструкции.
GCP
Если вы используете GCP, следуйте инструкциям на экране, чтобы создать учетную запись службы GCP для вашего приложения Encore.
Organization account
Примечание. Чтобы создавать учетные записи служб, вам необходим GCP .
Создать среду
После того, как вы подключили свою учетную запись, пришло время создать новую среду. Для этого перейдите на страницу «Среды» на облачной панели Encore и нажмите «Создать среду» .
На этой странице вы можете настроить:
- В каком облаке выполнить развертывание (выберите то, к которому вы подключаете свою учетную запись)
- Регион (выберите тот, который вам больше нравится)
- Вычислительный экземпляр (выберите Kubernetes)
- Распределение процессов (Выберите
All processes in one service
)
Затем нажмите «Создать» , чтобы сохранить среду.💾
Наконец, давайте убедимся, что только что созданная среда установлена в качестве цели развертывания по умолчанию:
- Зайдите в раздел «Основные» в меню настроек приложения.
- В разделе «Основная среда» выберите только что созданную среду и нажмите «Обновить» .
Теперь мы готовы к развертыванию!✨
Развертывание в Kubernetes
Прежде чем нажать кнопку, помните: Encore предоставит в вашей учетной записи реальный работающий кластер Kubernetes, а также передовые меры безопасности. Это означает, что развертывание повлечет за собой расходы на вашем аккаунте.
Чтобы развернуть приложение и создать новый кластер Kubernetes, просто запустите:
$ git add -A . $ git commit -m 'Initial commit' $ git push encore
Теперь Encore создаст и протестирует ваше приложение, предоставит необходимую инфраструктуру, включая кластер Kubernetes и кластер базы данных, а также развернет ваше приложение в облаке.🚀
После запуска развертывания вы увидите URL-адрес, по которому можно просмотреть ход выполнения на облачной панели управления Encore.
Это будет выглядеть примерно так:https://app.encore.dev/$APP_ID/deploys/...
Отсюда вы также можете просмотреть метрики, трассировки и подключить свою учетную запись GitHub.
Теперь у вас есть полноценный Go-бэкенд, работающий в Kubernetes!
Примечание. Если вы хотите контролировать расходы, вам следует удалить все созданные ресурсы, если вы не хотите продолжать использовать новый кластер. Это легко сделать с консоли вашего облачного провайдера.
Отличная работа – все готово!
Теперь у вас есть начало масштабируемого бэкенда Go, работающего в Kubernetes.