
โซลูชัน OpenSource ที่กำหนดและจัดการวงจรชีวิตที่สมบูรณ์ของทรัพยากรที่ใช้และจัดเตรียมไว้ในคลาวด์!
สำรวจเอกสาร»
SLD ช่วยเร่งการปรับใช้น้ำหนักและการสร้าง IAAC ซ้ำได้สร้างรูปแบบไดนามิกและรักษาตัวแปรที่แตกต่างกันในแต่ละสภาพแวดล้อมด้วยรหัสเดียวกัน ด้วย SLD คุณสามารถกำหนดเวลาการปรับใช้โครงสร้างพื้นฐานเช่นการทำลายล้างผู้ใช้โดยบทบาทและสแต็คแยกต่างหากโดยทีมและสภาพแวดล้อม


คุณสมบัติหลัก:
SLD เป็นวิธีที่ง่ายในการใช้รหัส Terrafrom ของคุณ!
คุณต้องมีนักเทียบท่าและนักเทียบท่าหรือใจดี (แนะนำ)
โคลน repo sld
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@
---------------------------------------------
รายการ endopints
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: // ชื่อผู้ใช้: [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 คุณสามารถผ่านการเข้าถึงและคีย์ลับของ 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"
ดู Azure-Storage-Configure-Connection-String
สำหรับชุดจัดเก็บข้อมูล Google Cloud:
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 Storage Backend คลาวด์และ 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 เหมือน "ชื่องาน" เช่นเดียวกับ "ชื่องาน"
| สแต็กชื่อ | บัญชีทีม | 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"
}
}
ตัวอย่างทดสอบ:
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 | หนึ่งหรือหลาย ๆ ทีม | จำกัด ขอบเขตของทีมสามารถเห็นทีมที่ได้รับมอบหมายและคุณเป็นผู้จัดการเต็มรูปแบบของทีมเหล่านั้นเท่านั้น |
| สตอร์มทรูปเปอร์ | หนึ่งหรือหลาย ๆ ทีม | ช่วงการ จำกัด ช่วงของทีมสามารถดูทีมที่ได้รับมอบหมายและสามารถปรับใช้การปรับใช้ที่ได้รับมอบหมายได้เฉพาะในทีม |
| R2-D2 | ทั้งหมดหนึ่งหรือหลาย ๆ ทีม | บทบาทนี้มีไว้สำหรับการระบุตัวตนเท่านั้นและจะต้องเชื่อมโยงกับคนก่อนหน้านี้กรณีการใช้งานสำหรับผู้ใช้บอทที่เข้าถึง API |

การมีส่วนร่วมคือสิ่งที่ทำให้ชุมชนโอเพ่นซอร์สเป็นสถานที่ที่น่าทึ่งในการเรียนรู้สร้างแรงบันดาลใจและสร้าง การมีส่วนร่วมใด ๆ ที่คุณทำ จะได้รับการชื่นชมอย่างมาก
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature ) แจกจ่ายภายใต้ใบอนุญาต MIT ดู LICENSE สำหรับข้อมูลเพิ่มเติม
การปรับใช้วงจรชีวิตสแต็ก