Управление кластером Kubernetes может быть сложной задачей по нескольким причинам. Что бы вы сделали, например, если что-то напортачили и весь кластер сломался? Это кошмар для всех. Вы можете подумать, что этого не происходит, но Spotify уничтожил 2 из 3 своих производственных кластеров. Об этом они дали отличный доклад на KubeCon и CloudNativeCon EU.

Так что, если вы окажетесь в такой ситуации? Как бы вы ее решили? Вы только начинаете применять YAML, которые, как мы надеемся, сохранили где-то в новом кластере? Вы уверены, что у вас есть все YAML и команды для того, чтобы ваш кластер начал работать так, как раньше? Кто знает, какие команды ваша команда могла выполнить на кластере, пока вы не смотрели…

Вы уверены, что у вас есть все YAML и команды для того, чтобы ваш кластер начал работать так, как раньше?

Возможно, вы уже используете такой инструмент, как Git, для хранения ваших YAML. Но невозможно узнать, какие файлы применяются в кластере, а какие нет. Файлы в вашем репо не отражают состояние вашего кластера. Кроме того, как вы собираетесь применять все эти файлы? Рукой? В каком порядке?

Terraform

На смену приходит Terraform. Terraform - это инструмент, созданный HashiCorp, который позволяет нам предсказуемо создавать, изменять и улучшать инфраструктуру как код. Особенности:

  • Инфраструктура как код: напишите декларативные файлы конфигурации для управления полным жизненным циклом кластера. Мы можем использовать GitOps для управления этими файлами конфигурации и их применения к нашему кластеру.
  • Планы: предварительно просмотрите, какие изменения будут применены или какие ресурсы будут удалены / заменены, прежде чем применять их. Предотвращайте ошибки до того, как они могут произойти.
  • Воспроизводимый. Независимо от того, сколько раз вы его применяли, он должен снова и снова создавать идентичный кластер. Это также упрощает повторное использование конфигураций для аналогичных инфраструктур (AWS, GCP, Azure, DO,…).

Terraform - это не просто инструмент Kubernetes. Вы также можете использовать его для запуска виртуальных машин на AWS, создания баз данных на GCP, размещения веб-сайтов в Azure и многого другого ... Взгляните на их страницу поставщиков, чтобы увидеть возможности. (Вы даже можете написать своих провайдеров)

Terraform - не единственный инструмент, который мы можем использовать для создания инфраструктуры в виде кода. Существуют и другие инструменты, такие как Pulumi и CDK, которые имеют ту же цель, хотя подход немного отличается.

Terraform использует специальный язык под названием HCL (HashiCorp Configuration Language) для настройки ваших кластеров. Это означает, что вам нужно выучить новый язык, чтобы иметь возможность работать с Terraform.

Pulumi и CDK используют существующие языки программирования, такие как TypeScript, например, где вы можете создавать свои кластеры и управлять ими с помощью. Большим преимуществом является то, что вам не нужно изучать новый язык, вы можете просто использовать тот язык, который вам уже знаком. Что ж, если вы такой же программист, как я. Это также означает, что вы можете легко использовать, например, циклы for и if.

Я настоятельно рекомендую вам проверить некоторые из этих инструментов, если вы используете кластер Kubernetes. Если что-то пойдет не так, это может спасти вам жизнь, но также дает четкое представление о вашем кластере.