Поскольку организации внедряют Kubernetes для облачных приложений, эффективное управление инфраструктурой становится вызовом. Традиционные инструменты Infrastructure as Code (IaC), такие как Terraform, Pulumi и другие, предоставляют декларативные конфигурации, но не имеют плавной интеграции в рабочие процессы Kubernetes-среды.
Crossplane эффективно сокращает разрыв между Kubernetes и облачной инфраструктурой в данной ситуации. В этом блоге мы исследуем, как Crossplane обеспечивает IaC для Kubernetes и за его пределами.
Что такое Crossplane?
Crossplane – это открытый аддон Kubernetes, который позволяет вам создавать и управлять облачной инфраструктурой с использованием определений кастомных ресурсов (CRDs) Kubernetes и API Kubernetes. В отличие от традиционных инструментов IaC, требующих внешнего выполнения, например, запуска скриптов Terraform внешне, Crossplane встраивает управление инфраструктурой в Kubernetes. Это делает его действительно декларативным и поддерживающим GitOps.
Применение: Terraform против Crossplane
Когда использовать Terraform?
- Лучше всего для управления инфраструктурой за пределами Kubernetes
- Идеально подходит для традиционных многоплатформенных развертываний и виртуальных машин
- Сильная экосистема с обширными модулями и провайдерами
- Хорошо работает с инструментами типа Ansible, Packer и Vault для автоматизации
Когда использовать Crossplane?
- Лучший выбор для среды, сосредоточенной на Kubernetes
- Идеально подходит для рабочих процессов GitOps (ArgoCD, Flux)
- Позволяет самостоятельное предоставление услуг с помощью Kubernetes CRD
- Хорошо подходит для управления многоплатформенным контролем Kubernetes (управление облачными службами через API K8s)
Начало работы с Crossplane
Для этого примера мы будем использовать minikube. Но те же шаги можно применить к любому Kubernetes.
Шаг 1: Развертывание MySQL в Kubernetes
1. Разверните MySQL как Развертывание с Службой для настройки с помощью Crossplane. Вы также можете использовать MySQL, развернутый из другого места.
2. Определите mysql-deployment.yaml
, который создает секрет, развертывание и службу, необходимые для запуска MySQL.
apiVersion v1
kind Secret
metadata
name mysql-root-password
type Opaque
data
password cGFzc3dvcmQ= # Base64 encoded "password"
---
apiVersion v1
kind Service
metadata
name mysql-service
spec
selector
app mysql
ports
protocol TCP
port3306
targetPort3306
---
apiVersion apps/v1
kind Deployment
metadata
name mysql
spec
selector
matchLabels
app mysql
strategy
type Recreate
template
metadata
labels
app mysql
spec
containers
image mysql8.0
name mysql
env
name MYSQL_ROOT_PASSWORD
valueFrom
secretKeyRef
name mysql-root-password
key password
ports
containerPort3306
name mysql
3. Примените YAML с помощью команды kubectl apply -f mysql-deployment.yaml
.
4. Проверьте, что поды запущены с помощью команды kubectl get pods
.
5. Проверьте подключение к MySQL, запустив временный SQL-под для проверки развертывания MySQL. Создайте клиент с помощью команды kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash
.
6. Подключитесь к MySQL внутри пода, используя команду mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword
.
Шаг 2:Установка Crossplane на Kubernetes
1. Установите Crossplane с помощью Helm:
kubectl create namespace crossplane-system
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane crossplane-stable/crossplane --namespace crossplane-system
Примечание: Crossplane требуется несколько минут для запуска.
2. Проверьте установку Crossplane с помощью команды kubectl get pods -n crossplane-system
.
Шаг 3: Установите поставщика Crossplane для SQL
1. Определите поставщика MySQL, используя приведенное ниже содержимое YAML.
apiVersion pkg.crossplane.io/v1
kind Provider
metadata
name provider-sql
spec
package xpkg.upbound.io/crossplane-contrib/provider-sql v0.9.0
2. Создайте поставщика с помощью команды kubectl apply -f provider.yaml
.
3. Проверьте поставщика с помощью следующих команд: kubectl get pods -n crossplane-system
и kubectl get providers
.
Примечание: Поставщики SQL требуют несколько минут для запуска.
Шаг 4: Настройка поставщика MySQL Crossplane
Конфигурация поставщика сообщает Crossplane, как аутентифицироваться в MySQL. Определите секреты, которые должны быть созданы для использования поставщика. Обновите stringData
соответственно в приведенном ниже YAML. Примените YAML с помощью kubectl apply -f mysql-secret.yaml
.
apiVersion v1
kind Secret
metadata
name mysql-conn-secret
namespace default
type Opaque
stringData
credentials"root:password@tcp(mysql-service.default.svc.cluster.local:3306)"
username"root"
password"password"
endpoint"mysql-service.default.svc.cluster.local"
port"3306"
Примените приведенную ниже конфигурацию поставщика для Crossplane, которая использует указанные выше секреты. Примените ее с помощью команды kubectl apply -f providerconfig.yaml
.
apiVersion mysql.sql.crossplane.io/v1alpha1
kind ProviderConfig
metadata
name mysql-provider
spec
credentials
source MySQLConnectionSecret
connectionSecretRef
name mysql-conn-secret
namespace default
Проверьте создание конфигурации поставщика с помощью команд — kubectl get providerconfigs.mysql.sql.crossplane.io
и kubectl get crds | grep providerconfig
.
Шаг 5. Создание базы данных MySQL с использованием Crossplane
Теперь используйте Crossplane для создания новой базы данных. Используйте нижеприведенный YAML и примените его с помощью kubectl apply -f mysqlinstance.yaml
.
apiVersion mysql.sql.crossplane.io/v1alpha1
kind Database
metadata
name my-database
spec
providerConfigRef
name mysql-provider
forProvider
binlog true
writeConnectionSecretToRef
name db-conn
namespace default
Шаг 6: Проверьте создание базы данных
Проверьте создание базы данных с помощью команды kubectl get database.mysql.sql.crossplane.io/my-database
.
Используйте те же шаги проверки, упомянутые в Шаге 1, чтобы подключиться к MySQL и проверить создание базы данных.
С помощью вышеуказанных шагов вы установили Crossplane, настроили провайдер MySQL и использовали Crossplane для создания базы данных.
Могут ли Terraform и Crossplane работать вместе?
Терраформ и Crossplane могут использоваться вместе для многих сценариев.
Сценарий 1
В полном сценарии IaC Терраформ может использоваться для инициализации кластеров Kubernetes, а затем Crossplane может использоваться для управления облачными ресурсами изнутри Kubernetes. Терраформ также может развертывать сам Crossplane. Этот гибридный пример рабочего процесса
- Терраформ создает кластер Kubernetes в любом облачном провайдере.
- Crossplane управляет облачными службами (базы данных, хранилище и сети) с использованием CRD Kubernetes.
Сценарий 2
Crossplane также поддерживает поставщика Terraform, который можно использовать для запуска сценариев Terraform в рамках модели IaC Crossplane. Запуск поставщика Terraform для Crossplane может быть полезен в нескольких сценариях, когда собственные поставщики Crossplane еще не поддерживают определенные облачные ресурсы или функционалы. Вот причины запуска поставщика Terraform для Crossplane:
- У Terraform есть обширная экосистема поставщиков, поддерживающих множество облачных сервисов, которые Crossplane может еще не иметь собственных поставщиков.
- Когда организация уже использует Terraform для управления инфраструктурой, нет необходимости переписывать все в CRD Crossplane.
- Crossplane поддерживает управление мультиоблаками, но его собственные поставщики могут не охватывать каждую интеграцию с оборудованием на месте или SaaS.
- Для организаций, стремящихся постепенно перейти от Terraform к Crossplane, использование поставщиков Terraform в рамках Crossplane может выступать в качестве гибридного решения перед полной миграцией.
- Запуск Terraform в рамках Crossplane вводит Terraform в декларативную модель GitOps Kubernetes.
Шаги по созданию базы данных IBM Cloud Cloudant с использованием Crossplane
Шаг 1. Определите поставщика Terraform.
apiVersion pkg.crossplane.io/v1
kind Provider
metadata
name provider-terraform
spec
package xpkg.upbound.io/upbound/provider-terraform v0.19.0
Шаг 2. Настройте поставщика.
apiVersion tf.upbound.io/v1beta1
kind ProviderConfig
metadata
name terraform-provider-ibm
spec
Шаг 3. Предоставьте базу данных Cloudant в IBM Cloud, используя сценарии Terraform в рамках Crossplane.
apiVersion tf.upbound.io/v1beta1
kind Workspace
metadata
name ibm-cloudant-db
spec
providerConfigRef
name terraform-provider-ibm
writeConnectionSecretToRef
name ibmcloud-terraform-secret
namespace crossplane-system
forProvider
source Inline
module
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
}
}
backend "kubernetes" {
secret_suffix = "ibmcloud-terraform-secret"
namespace = "crossplane-system"
}
}
provider "ibm" {
ibmcloud_api_key = var.ibmcloud_api_key
}
resource "ibm_cloudant" "cloudant_instance" {
name = "crossplanecloudant"
location = "us-south"
plan = "lite"
}
variable "ibmcloud_api_key" {
type = string
}
vars
key ibmcloud_api_key
value"<Your IBM Cloud API Key>"
Это предоставляет базу данных Cloudant с именем crossplanecloudant в IBM Cloud.
Как Crossplane вписывается в инженерию платформы
Инженерия платформ фокусируется на построении и поддержке внутренних платформ разработчика (IDP), которые упрощают управление инфраструктурой и развертывание приложений. Кроссплейн играет значительную роль в этом, позволяя использовать подход, ориентированный на Kubernetes.
Кроссплейн обеспечивает декларативное, самообслуживание и управляемое политикой предоставление облачных ресурсов. Функции Кроссплейн, такие как декларативная инфраструктура с API Kubernetes, пользовательские абстракции для инфраструктуры и приложений, защита и контроль соответствия, управляемые версией и автоматизированные развертывания, а также непрерывная коррекция дрейфа, помогают инженерии платформ.
Заключение
Кроссплейн изменяет способ управления облачной инфраструктурой, внедряя IaC в экосистему Kubernetes. API Kubernetes позволяют по-настоящему декларативный и управляемый GitOps подход к предоставлению и управлению облачными ресурсами. Если вы уже используете Kubernetes и хотите модернизировать свою стратегию IaC, то Кроссплейн определенно стоит изучить.
Source:
https://dzone.com/articles/codify-cloud-kubernetes-crossplane-iac