
Решение OpenSource, которое определяет и управляет полный жизненный цикл ресурсов, используемых и предоставляется в облако!
Изучите документы »
SLD помогает ускорить развертывание, взвешивание и создание многократного использования IAAC, генерируя динамические формы и поддержание различных переменных в каждой среде с одним и тем же кодом. С SLD вы можете планировать развертывания инфраструктуры, такие как его разрушение, управление пользователями по ролям и отдельным стеком от команды и окружающей среды


Основные особенности:
SLD - это простой способ использования вашего кода TerraFrom!
Вам нужен Docker и Docker-Compse или добрый (рекомендуется).
Клонировать SLD Repo
git clone https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.gitРазвернуть SLD в K8s с добрым
cd Stack-Lifecycle-Deployment/play-with-sld/kubernetes
sh kplay.sh startРезультат:
Starting SLD for play
Creating cluster " kind " ...
✓ Ensuring node image (kindest/node:v1.20.2) ?
✓ Preparing nodes ? ?
✓ Writing configuration
✓ Starting control-plane ?️
✓ Installing CNI ?
✓ Installing StorageClass ?
✓ Joining worker nodes ?
Set kubectl context to " kind-kind "
You can now use your cluster with:
kubectl cluster-info --context kind-kindСоздать пользователя init
sh kplay.sh initРезультат:
kind ok
docker ok
kubectl ok
jq ok
curl ok
init SLD
# ################################################
# Now, you can play with SLD ?️ #
# ################################################
API: http://localhost:5000/docs
DASHBOARD: http://localhost:5000/
---------------------------------------------
username: admin
password: Password08@
---------------------------------------------
Список эндопинтов
sh kplay.sh listРезультат:
kind ok
docker ok
kubectl ok
List endpoints
API: http://localhost:8000/docs
DASHBOARD: http://localhost:5000/Вход в приборную панель:

Нажмите на ссылку на приборную панель:

Добавьте облачную учетную запись

Заполните форму необходимыми данными. В нашем примере мы будем использовать
По умолчанию работники работают как Squad1 и Squad2 для игровой цели, но вы можете изменить его и масштабировать, когда хотите
Когда вы добавляете учетную запись в провайдер (AWS, GCP, Azure), создается один отряд, вы должны создать работника для имени созданного отряда, если вы этого не сделаете, развертывание останется в «ожидающем» государственном чтении работников
Наконец добавить:
Добавить модуль или стек Terraform

Поддерживаются префиксы: AWS_, GCP_, Azure_
Вы можете перенести пользователь и пароль в качестве https: // username: [email protected]/aws_vpc для ssh, вы можете передать его в виде секрета в развертывании пользователю SLD
'*' = дает доступ ко всем, вы можете разрешить доступ к одной или многим отрядам, разделенным запятыми: Squad1, Squad2
https://releases.hashicorp.com/terraform/
Развернуть свой первый стек !!!
Список стеков для развертывания

Выберите развертывание

SLD будет генерировать динамическую форму на основе переменных стека, заполните форму и нажмите кнопку развертывания

Важный! Назначьте ту же состав и среду, что и ранее, при добавлении учетной записи (см. Добавить облачную учетную запись)
Теперь статус задачи изменится по мере развития развертывания.

Вы можете контролировать жизненный цикл реализации
Вы можете уничтожить, переосмыслить, что SLD сохранит старые значения, или вы также можете редактировать эти значения по желанию.
И, наконец, вы можете программно управлять жизненным циклом, справиться с разрушением / созданием инфраструктуры, хорошей практикой для плана сбережений !!!
SLD использует свой собственный удаленный бэкэнд, поэтому вам не нужно настроить какой -либо бэкэнд в Terraform. В следующем примере показан конфигурация бэкэнда
terraform {
backend "http" {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
lock_address = "http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core"
lock_method = "PUT"
unlock_address = "http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core"
unlock_method = "DELETE"
}
}
На данный момент SLD поддерживает MongoDB, S3 и локальный бэкэнд (только для целей тестирования) для настройки MongoDB в качестве бэкэнда, вы должны передавать следующие переменные в качестве параметров в службу удаленного состояния:
# docker-compose.yaml
environment:
SLD_STORE: mongodb
SLD_MONGODB_URL: "mongodb:27017/"
MONGODB_USER: admin
MONGODB_PASSWD: admin
# k8s yaml
env:
- name: SLD_STORE
value: mongodb
- name: SLD_MONGODB_URL
value: "mongodb:27017/"
- name: MONGODB_USER
value: admin
- name: MONGODB_PASSWD
value: admin
Для настройки S3 вы можете передать доступ к Access и Secret of AWS, в случае, если SLD работает в AWS, рекомендуется использовать роли
env:
- name: SLD_STORE
value: "S3"
- name: SLD_BUCKET
value: "s3-sld-backend-cloud-tf-state"
- name: AWS_ACCESS_KEY
value: ""
- name: AWS_SECRET_ACCESS_KEY
value: ""
Для Azure Env вам нужно установить следующую Env
env:
- name: SLD_STORE
value: azure
- name: AZURE_STORAGE_CONNECTION_STRING
value: "DefaultEndpointsProtocol=https;AccountName=<YOUR ACCOUNT>;AccountKey=<YOUR ACCESS KEY>;EndpointSuffix=core.windows.net"
См. Азурскую конфигурационную конфетку
Для набора облачных хранилищ Google:
SLD_STORE=gcp
export GOOGLE_APPLICATION_CREDENTIALS="/app/sld-gcp-credentials.json"
Импортировать ключ учетной записи службы Google в секрет K8S
kubectl create secret generic gcp-storage --from-file=~/Downloads/storage.json
Модифицировать SLD-remote-State.yml Set GCP хранения в облаке Backend and Mount Secret:
apiVersion: apps/v1
kind: Deployment
metadata:
name: remote-state
labels:
name: remote-state
spec:
replicas: 1
selector:
matchLabels:
name: remote-state
template:
metadata:
labels:
name: remote-state
spec:
subdomain: primary
containers:
- name: remote-state
image: d10s0vsky/sld-remote-state:latest
volumeMounts:
- name: gcp
mountPath: "/app/gcp"
readOnly: true
env:
- name: SLD_STORE
value: gcp
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/app/gcp/storage.json"
resources:
limits:
memory: 600Mi
cpu: 1
requests:
memory: 300Mi
cpu: 500m
imagePullPolicy: Always
command: ["python3", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080", "--workers", "1"]
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /
port: 8080
httpHeaders:
- name: status
value: healthy
initialDelaySeconds: 60
periodSeconds: 60
volumes:
- name: gcp
secret:
secretName: gcp-storage
Чтобы иметь возможность использовать выходы других стеков, вы можете настроить их следующим образом, что ключ Alwys такой же, как «Имя задачи»
| пейзаж | Учетная запись отряда | эн | развернуть имя |
|---|---|---|---|
| AWS_VPC | Squad1 | развивать | vpc_core |
data "terraform_remote_state" "vpc_core" {
backend = "http"
config = {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
}
}
Пример теста:
echo "data.terraform_remote_state.vpc_core.outputs"|terraform console
Рабочие в SLD несут ответственность за выполнение развертывания инфраструктуры. Вы можете использовать одного или нескольких работников для каждой учетной записи или нескольких учетных записей одновременно. Все зависит от степени параллелизма и сегрегации, которую вы рассматриваете
# Example k8s worker for account squad1, change this for each of your accounts
# Stack-Lifecycle-Deployment/play-with-sld/kubernetes/k8s/sld-worker-squad1.yml
# Add replicas for increment paralelism
# Add more squad accounts if you want to group accounts in the same worker:
# command: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1,"another_squad_account"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: stack-deploy-worker-squad1
labels:
name: stack-deploy-worker-squad1
spec:
replicas: 1
selector:
matchLabels:
name: stack-deploy-worker-squad1
template:
metadata:
labels:
name: stack-deploy-worker-squad1
spec:
subdomain: primary
containers:
- name: stack-deploy-worker-squad1
image: d10s0vsky/sld-api:latest
imagePullPolicy: Always
env:
- name: TF_WARN_OUTPUT_ERRORS
value: "1"
resources:
limits:
memory: 600Mi
cpu: 1
requests:
memory: 300Mi
cpu: 500m
command: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1"]
# Example docker-compose worker for account squad1, change this for each of your accounts
# Stack-Lifecycle-Deployment/play-with-sld/docker/docker-compose.yml
worker:
image: d10s0vsky/sld-api:latest
entrypoint: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1"]
environment:
BROKER_USER: admin
BROKER_PASSWD: admin
depends_on:
- rabbit
- redis
- db
- remote-state
SLD имеет три предварительно сконфигурированные роли для пользователей, чтобы легко управлять этим.
| роли | объем | описание |
|---|---|---|
| Йода | глобальный | Глобальный объем, может видеть все команды и полные администраторы |
| darth_vader | одна или много состава | Ограничьте область применения отряда, может увидеть назначенные команды, и вы являетесь полным менеджером только этих отрядов |
| штурмовик | одна или много состава | Диапазон отрядов ограничений, может увидеть назначенные отряды и может развернуть только назначенное развертывание в Persive Squad |
| R2-D2 | все, один или много состава | Эта роль предназначена только для идентификации и должна быть связана с предыдущими, ее вариант использования предназначен для пользователей ботов, которые получают доступ к API |

Вклад - это то, что делает сообщество с открытым исходным кодом таким удивительным местом для изучения, вдохновения и создания. Любой вклад, которые вы вносите, высоко ценится .
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature ) Распределено по лицензии MIT. Смотрите LICENSE для получения дополнительной информации.
Развертывание жизненного цикла стека