ArgoCD, Crossplane та LocalStack: економте на витратах на хмарні сервіси, розробляючи локально та розгортаючи глобально в хмарі.

pic

“ArgoCD, Crossplane та LocalStack є важливими інструментами для зниження витрат за допомогою використання подвійного середовища та збереження єдиного джерела правди.”

ArgoCD, Crossplane, та LocalStack: ці інструменти дозволяють економно управляти хмарними ресурсами, даючи можливість розробникам розробляти локально і розгортати глобально. З LocalStack_ ви можете імітувати хмарні сервіси локально без витрат на реальні хмарні ресурси._ Crossplane надає декларативне управління хмарними ресурсами, тоді як ArgoCD забезпечує безперешкодну синхронізацію між вашими конфігураціями та розгорнутою інфраструктурою. Разом вони дозволяють організаціям економити на витратах на хмари, зберігаючи при цьому послідовність і масштабованість розгортань.

Управління витратами на хмарні ресурси є викликом для багатьох організацій. Хоча багато хмарних сервісів пропонують кредити та безкоштовні рівні, відсутність контекстуальної абстракції часто ускладнює ефективне використання одного середовища для розробки. Ця стаття спрямована на вирішення цих проблем, демонструючи, як зменшити витрати на хмарні ресурси через налаштування локального середовища розробки для управління хмарними ресурсами.”

“Наш підхід зосереджується на розділенні середовища розробки та хмарного середовища за допомогою LocalStack як віртуальної хмарної консолі. Також ми будемо використовувати Kubernetes і Crossplane.io для управління хмарними ресурсами. Створюючи єдине джерело правди всередині Kubernetes кластеру, ми забезпечимо послідовність, одночасно використовуючи хмарну консоль як надійне середовище для посилань.”

“Щоб продовжити, ми використаємо віддалене репозиторій, яке містить усі необхідні файли. Архітектура нашого підходу ілюструється на діаграмі вище, де показано, як ці інструменти працюють разом для досягнення економічно ефективного та результативного управління хмарними ресурсами.”

Огляд підходу

Ця установка продемонструє наступні інструменти:

  • LocalStack: Імітує хмарні сервіси як повністю функціональний локальний стек AWS.
  • Crossplane: Декларативно управляє хмарними ресурсами як додаток для Kubernetes.
  • Single Source of Truth (SSOT): Централізоване управління конфігураціями в Kubernetes за допомогою ArgoCD.
  • ArgoCD: Декларативний інструмент безперервного постачання на основі GitOps, який синхронізує стани Kubernetes кластера з конфігураціями, що зберігаються в Git репозиторії, забезпечуючи автоматизовані та послідовні розгортання.

“В кінці цього посібника Kubernetes буде виступати як центральний хаб для управління хмарними ресурсами, в той час як LocalStack буде служити пісочницею для експериментів з хмарними конфігураціями. Далі наведено покроковий посібник, який пояснює, як досягти цього робочого процесу.”

Встановлення передумов

Переконайтеся, що наступні інструменти встановлені:

  • AWS CLI: Використовується для взаємодії з LocalStack.
  • Docker: Запускає кластер Kind.
  • Kubectl: Інструмент командного рядка для управління Kubernetes кластерами.
  • ArgoCD CLI: Використовується для взаємодії з кластером ArgoCD.
  • Kind: Створює локальний Kubernetes кластер.
  • Helm: Розгортає LocalStack та Crossplane.
  • Git: Клонує демонстраційне репозиторій, що містить необхідні ресурси.

Розгортання Kubernetes Кластера

1.
Створіть локальний Kubernetes кластер за допомогою Kind:

kind create cluster --name local-cloud-dem
  1. Перевірте кластер:
kubectl get nodes

Встановлення LocalStack

  • Додайте Helm репозиторій LocalStack:
helm repo add localstack-charts https://localstack.github.io/helm-charts
  • Встановіть LocalStack:
helm install localstack localstack-charts/localstack --namespace localstack --create-namespace  
helm repo update
  • Перевірте встановлення: Перевірте статус подів, щоб переконатися, що всі поди працюють:
kubectl get pod -n localstack

Налаштування LocalStack

  1. Експортуйте змінні середовища та перевірте URL LocalStack: Виконайте наступні команди для експорту змінних середовища та отримання URL LocalStack. Виведення повинно показати URL LocalStack.
export NODE_PORT=$(kubectl get --namespace "localstack" -o jsonpath="{.spec.ports[0].nodePort}" services localstack)  
export NODE_IP=$(kubectl get nodes --namespace "localstack" -o jsonpath="{.items[0].status.addresses[0].address}")  
echo http://$NODE_IP:$NODE_PORT

2. Налаштуйте AWS CLI для LocalStack: Налаштуйте профіль AWS CLI для LocalStack, ввівши наступні значення, коли буде запропоновано:

aws configure --profile localstack
  • Ідентифікатор ключа доступу: test
  • Секретний ключ доступу: test
  • За замовчуванням регіон: us-east-1
  • Формат виведення: json

3. Перевірте налаштування LocalStack:

aws --endpoint-url=http://$NODE_IP:31566 s3 ls --profile localstack

4. Перевірте сервіс S3 в LocalStack: Отримайте логи з LocalStack пода та підтвердьте роботу S3 сервісу.

kubectl get pod -n localstack

5. Перевірте ініціалізацію S3 у логах: Перегляньте логи на наявність записів, які підтверджують ініціалізацію сервісу S3.

kubectl logs  -c localstack -n localstack

Шукайте повідомлення на кшталт:

  • Starting mock S3 service on port...
  • S3 service ready
  • API запити, пов'язані з S3 (наприклад, запити PUT, GET, DELETE до S3 бакетів).

Встановлення Crossplane

  1. Додайте Helm репозиторій Crossplane:
helm repo add crossplane-stable https://charts.crossplane.io/stable
  1. Встановіть Crossplane:
helm install crossplane --namespace crossplane-system --create-namespace crossplane-stable/crossplane  
helm repo update

3. Перевірте встановлення: Перевірте статус подів, щоб переконатися, що всі компоненти працюють:

kubectl get pods -n crossplane-system

Встановлення ArgoCD

  1. Створіть простір імен ArgoCD:
kubectl create namespace argocd

2. Застосуйте маніфести ArgoCD: Використовуйте офіційний YAML для розгортання компонентів ArgoCD:

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

3. Перевірте встановлення: Перевірте статус подів, щоб переконатися, що всі компоненти працюють:

kubectl get pods -n argocd

Клонуйте демонстраційне репозиторій

  1. Клонуйте репозиторій: Використовуйте команду git clone, щоб клонути репозиторій з нашими ресурсами.
git clone https://github.com/blanketops/demo-saving-costs-abstracting-context.git
  1. Перейдіть в каталог репозиторію: Після клонування перейдіть до каталогу репозиторію:
cd demo-saving-costs-abstracting-context
  1. Перевірте вміст: Перевірте вміст репозиторію, щоб переконатися, що він був успішно клонований:
tree .

Налаштуйте провайдери Crossplane

  1. Встановіть провайдер AWS:
kubectl apply -f providers/provider-aws.yaml
  1. Налаштуйте облікові дані провайдера: Створіть секрет Kubernetes з обліковими даними LocalStack:
kubectl create secret generic localstack-aws-secret -n crossplane-system --from-literal=creds="[default]  
aws_access_key_id = test  
aws_secret_access_key = test  
region = us-east-1"

3.
Застосуйте ProviderConfig: Створіть конфігурацію провайдера Localstack AWS.

kubectl apply -f provider-configs/provider-config-localstack.yaml

Налаштування наших ресурсів (LocalStack)

1. Створіть ресурс: Наш S3 бакет є керованим ресурсом як ArgoCD (Application).

kubectl apply -f argocd-applications/argocd_application.yaml

2. Доступ до інтерфейсу ArgoCD: Скопіюйте та збережіть пароль у безпечному місці.

argocd admin initial-password -n argocd

3. Перенаправлення порту для інтерфейсу ArgoCD: На окремому терміналі.

kubectl port-forward svc/argocd-server -n argocd 8081:443

4. Доступ до інтерфейсу ArgoCD: Перевірте інтерфейс ArgoCD, щоб підтвердити ресурс S3 бакету, https://localhost:8081.

pic

pic

5. Перевірте S3 бакет: Перевірте S3 бакет у консолі LocalStack та замініть на ім'я вашого LocalStack пода.

kubectl exec -n localstack  -c localstack -i -t -- awslocal s3 ls

Перехід до AWS консолі

  1. Відключіть ProviderConfig LocalStack: Відключіть конфігурацію провайдера provider-config-localstack від Crossplane.
kubectl delete applications --all -n argocd  
kubectl delete secret localstack-aws-secret -n crossplane-system  
kubectl delete providerconfigs.aws.upbound.io/default --all-namespaces

2. Налаштуйте облікові дані AWS провайдера: Створіть секрет Kubernetes з обліковими даними для AWS консолі:

kubectl create secret generic aws-secret -n crossplane-system --from-literal=creds="[default]  
aws_access_key_id =   
aws_secret_access_key =   
region = "

3. Застосуйте ProviderConfig:

kubectl apply -f provider-configs/provider-config-aws.yaml

4. Створіть наш S3 бакет: керований ресурс як ArgoCD (Application).

kubectl apply -f argocd-applications/argocd_application.yaml

5. Доступ до інтерфейсу ArgoCD: для підтвердження ресурсу S3 бакету, https://localhost:8081

pic

6. Перейдіть до вашої AWS Cloud консолі та перевірте S3 бакет

pic

“Дякуємо, що знайшли час ознайомитись з цією демонстрацією. Сподіваємось, що вона була корисною для вашої інженерної роботи. Ця демонстрація підкреслює, як поєднання ArgoCD, LocalStack та Crossplane може оптимізувати витрати, ефективно використовуючи хмарні ресурси. Також демонструється, як можна досягти узгодженості через налаштування.

Подяки

Перекладено з: ArgoCD, Crossplane, and LocalStack: Save on cloud costs by developing locally and deploying globally to the cloud.

Leave a Reply

Your email address will not be published. Required fields are marked *