
클라우드에 사용되고 프로비저닝 된 자원의 전체 수명주기를 정의하고 관리하는 OpenSource 솔루션!
문서 탐색»
SLD는 배포, 가중치화 및 IAAC 재사용을 가속화하고 동적 형태를 생성하고 동일한 코드로 각 환경에서 다른 변수를 유지하는 데 도움이됩니다. SLD를 사용하면 파괴와 같은 인프라 배포를 예약하고 역할로 사용자 관리 및 분대 및 환경 별도의 스택을 사용할 수 있습니다.


주요 기능 :
SLD는 TerraFrom 코드를 사용하는 쉬운 방법입니다!
Docker와 Docker-Compse 또는 종류 (추천)이 필요합니다.
SLD 레포를 복제하십시오
git clone https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.gitK8에 SLD를 배포하십시오
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-kindInit 사용자를 만듭니다
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_
ssh 용 https : // username : [email protected]/aws_vpc로 사용자와 비밀번호를 전달할 수 있습니다.
'*'= 모든 사람에게 접근 할 수 있도록, 쉼표로 분리 된 하나 이상의 분대에 접근 할 수 있습니다 : 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을 구성하려면 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:
- name: SLD_STORE
value: azure
- name: AZURE_STORAGE_CONNECTION_STRING
value: "DefaultEndpointsProtocol=https;AccountName=<YOUR ACCOUNT>;AccountKey=<YOUR ACCESS KEY>;EndpointSuffix=core.windows.net"
Azure Storage-Configure-Connection-String을 참조하십시오
Google 클라우드 스토리지 세트의 경우 :
SLD_STORE=gcp
export GOOGLE_APPLICATION_CREDENTIALS="/app/sld-gcp-credentials.json"
Google 서비스 계정 키를 K8S Secret으로 가져옵니다
kubectl create secret generic gcp-storage --from-file=~/Downloads/storage.json
SLD-REMOTE-State.YML SET GCP 스토리지 클라우드 백엔드 및 마운트 비밀을 수정하십시오.
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는 "작업 이름"과 동일합니다.
| 스택 이름 | 분대 계정 | env | 배포 이름 |
|---|---|---|---|
| AWS_VPC | 분대 1 | 개발하다 | vpc_core |
data "terraform_remote_state" "vpc_core" {
backend = "http"
config = {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
}
}
Test example:
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 | 하나 또는 많은 분대 | 분대의 범위를 제한하고, 할당 된 분대를 볼 수 있으며, 당신은 그 분대의 완전한 관리자입니다. |
| Stormtrooper | 하나 또는 많은 분대 | 한계 분대 범위, 할당 된 분대를 볼 수 있으며 소속 분대에 할당 된 배치 만 배포 할 수 있습니다. |
| R2-D2 | 모두, 하나 또는 많은 분대 | 이 역할은 식별을위한 것이며 이전 역할과 관련이 있어야하며, 사용 사례는 API에 액세스하는 봇 사용자를위한 것입니다. |

기부금은 오픈 소스 커뮤니티를 배우고 영감을주고 창조 할 수있는 놀라운 장소입니다. 당신이하는 모든 기여는 대단히 감사합니다 .
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature MIT 라이센스에 따라 배포됩니다. 자세한 내용은 LICENSE 참조하십시오.
수명주기 배포를 쌓습니다