
OpenSource -Lösung, die den vollständigen Lebenszyklus von Ressourcen definiert und verwaltet, die in einer Cloud verwendet und aufgenommen werden!
Erforschen Sie die Dokumente »
SLD hilft dabei, die Bereitstellung, Gewichtung zu beschleunigen und IAAC wiederverwendbar zu machen, dynamische Formen zu generieren und unterschiedliche Variablen in jeder Umgebung mit demselben Code aufrechtzuerhalten. Mit SLD können Sie Infrastrukturbereitstellungen wie die Zerstörung planen, Benutzer mit Rollen und separaten Stapeln nach Kader und Umgebung verwalten


Hauptmerkmale:
SLD ist die einfache Möglichkeit, Ihren Terrabrom -Code zu verwenden!
Sie benötigen Docker und Docker-Compse oder Art (empfohlen).
Klonen Sie das SLD -Repo
git clone https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.gitSLD in K8s mit Art einsetzen
cd Stack-Lifecycle-Deployment/play-with-sld/kubernetes
sh kplay.sh startErgebnis:
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-kindInit -Benutzer erstellen
sh kplay.sh initErgebnis:
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@
---------------------------------------------
Listen Sie Endopints auf
sh kplay.sh listErgebnis:
kind ok
docker ok
kubectl ok
List endpoints
API: http://localhost:8000/docs
DASHBOARD: http://localhost:5000/Melden Sie sich zum Dashboard an:

Klicken Sie auf den Dashboard -Link:

Cloud -Konto hinzufügen

Füllen Sie das Formular mit den erforderlichen Daten aus. In unserem Beispiel werden wir verwenden
Standardmäßig werden die Mitarbeiter als Squad1 und Squad2 für Spielzwecke ausgeführt, aber Sie können es ändern und skalieren, wenn Sie möchten
Wenn Sie einem Anbieter (AWS, GCP, Azure) ein Konto hinzufügen, wird ein Kader erstellt, müssen Sie einen Arbeiter für den Namen des erstellten Kaders erstellen. Wenn Sie dies nicht tun
Endlich hinzufügen:
Fügen Sie Terraform -Modul oder Stapel hinzu

Unterstützte Präfixe: AWS_, GCP_, azure_
Sie können Benutzer und Passwort als https: // username: [email protected]/aws_vpc für ssh übergeben. Sie können es als Geheimnis in der Bereitstellung an die Benutzer SLD übergeben
'*' = gibt Zugriff auf alle, Sie können den Zugriff auf eine oder viele Trupps ermöglichen, die von Commas getrennt sind: Squad1, Squad2
https://releases.hashicorp.com/terraform/
Stellen Sie Ihren ersten Stack ein !!!
Listen Sie Stapel zur Bereitstellung auf

Wählen Sie den Einsatz

SLD erzeugt ein dynamisches Formular basierend auf den Stapelvariablen, füllt das Formular aus und drückt die Bereitstellungstaste

Wichtig! Weisen Sie den gleichen Kader und die gleiche Umgebung zu, die wir zuvor beim Hinzufügen des Kontos erstellt haben (siehe Cloud -Konto hinzufügen).
Der Status der Aufgabe ändert sich nun im Verlauf der Bereitstellung.

Sie können den Lebenszyklus zur Implementierung steuern
Sie können zerstören und erneut implementieren, dass SLD die alten Werte beibehält, oder Sie können diese Werte auch nach Belieben bearbeiten.
Und schließlich können Sie den Lebenszyklus programmgesteuert verwalten und die Zerstörung / Schaffung der Infrastruktur bewältigen, eine gute Praxis für den Sparplan !!! 
SLD verwendet ein eigenes Remote -Backend, sodass Sie kein Backend in Terraform konfigurieren müssen. Das folgende Beispiel zeigt eine Backend -Konfiguration
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"
}
}
Derzeit unterstützt SLD MongoDB, S3 und lokales Backend (nur zu Testzwecken), um MongoDB als Backend zu konfigurieren. Sie müssen die folgenden Variablen als Parameter an den Remote-State-Service übergeben:
# 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
So konfigurieren Sie S3
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: ""
Für Azure Env müssen Sie den nächsten Env festlegen
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"
Siehe Azure-Storage-Konfigurationskonfiguration
Für den Google Cloud -Speichersatz:
SLD_STORE=gcp
export GOOGLE_APPLICATION_CREDENTIALS="/app/sld-gcp-credentials.json"
Importieren Sie den K8s -Geheimnis importieren
kubectl create secret generic gcp-storage --from-file=~/Downloads/storage.json
Modifizieren Sie SLD-Remote-State.yml Set GCP Storage Cloud Backend und 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
Um die Ausgänge anderer Stapel verwenden zu können, können Sie sie wie folgt konfigurieren. Die wichtigsten ALWYs sind das gleiche wie "Aufgabenname".
| Stapelname | Squad -Konto | env | Name einsetzen |
|---|---|---|---|
| AWS_VPC | Squad1 | entwickeln | VPC_CORE |
data "terraform_remote_state" "vpc_core" {
backend = "http"
config = {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
}
}
Testbeispiel:
echo "data.terraform_remote_state.vpc_core.outputs"|terraform console
Die Arbeitnehmer in der SLD sind für die Ausführung der Infrastrukturbereitstellung verantwortlich. Sie können einen oder mehrere Arbeitnehmer für jedes Konto oder mehrere Konten gleichzeitig verwenden. Es hängt alles von dem Grad der Parallelität und Segregation ab, die Sie in Betracht ziehen
# 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 hat drei vorkonfigurierte Rollen, damit Benutzer dies einfach verwalten können.
| Rollen | Umfang | Beschreibung |
|---|---|---|
| Yoda | global | Globaler Umfang, kann alle Trupps sehen und sind voll Administrator |
| DARTH_VADER | ein oder viele Kader | Begrenzen Sie den Umfang des Kaders, können Sie die zugewiesenen Trupps sehen, und Sie sind ein vollständiger Manager dieser Kader |
| Stormtrooper | ein oder viele Kader | Limits Squad Range, kann zugewiesene Kader sehen und nur die zugewiesene Bereitstellung auf dem Squad einsetzen |
| R2-D2 | alle, ein oder viele Kader | Diese Rolle dient nur zur Identifizierung und muss mit den vorherigen in Verbindung gebracht werden. Der Anwendungsfall ist für Bot -Benutzer, die auf die API zugreifen |

Beiträge machen die Open -Source -Community zu einem erstaunlichen Ort, um zu lernen, zu inspirieren und zu kreieren. Alle Beiträge, die Sie leisten, werden sehr geschätzt .
git checkout -b feature/AmazingFeature ).git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature ) Unter der MIT -Lizenz verteilt. Weitere Informationen finden Sie LICENSE .
Stapel -Lebenszyklus -Bereitstellung