init: k8s 폴더 구조init
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# Copy this file to .iac-engine after choosing one engine.
|
||||
# Leave exactly one uncommented value in the copied file:
|
||||
# tofu
|
||||
# terraform
|
||||
@@ -0,0 +1,33 @@
|
||||
# Infrastructure
|
||||
|
||||
클라우드 또는 온프레미스의 네트워크, identity, DNS, registry와 Kubernetes
|
||||
cluster 같은 기반 리소스를 코드로 관리합니다.
|
||||
|
||||
```text
|
||||
components reusable primitive
|
||||
│
|
||||
├──────────────┐
|
||||
▼ ▼
|
||||
stacks live
|
||||
│ ▲
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
- `components`: 작고 재사용 가능한 구현 단위
|
||||
- `stacks`: 반복되는 component 조합(선택)
|
||||
- `live`: 실제 environment root와 state 경계
|
||||
- `tests`: component와 contract 검증
|
||||
|
||||
IaC 엔진은 프로젝트에서 하나를 선택합니다. Terraform/OpenTofu 호환이 필요하면
|
||||
같은 `.tf` 구성을 공유하고 실행 명령만 프로젝트 표준으로 통일합니다. 서로 다른
|
||||
엔진용으로 동일한 인프라 트리를 복제하지 않습니다.
|
||||
|
||||
IaC 파일을 추가할 때 `.iac-engine.example`을 `.iac-engine`으로 복사하고
|
||||
`tofu` 또는 `terraform` 중 하나만 기록합니다. 이 선택 파일은 커밋합니다.
|
||||
선택한 실행 파일과 version을 로컬/CI에 고정하고, 프로젝트별 `init -backend=false`
|
||||
및 semantic validate 단계도 검증 스크립트에 추가합니다. 기본 스켈레톤의 자동
|
||||
검사는 provider를 선택하지 않았기 때문에 IaC format까지만 수행합니다.
|
||||
|
||||
Kubernetes API 안의 platform/app 리소스는 원칙적으로 `gitops`가 소유합니다.
|
||||
클러스터 생성 시 반드시 필요한 최소 bootstrap 출력만 명시적인 contract로
|
||||
전달합니다.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Infrastructure Components
|
||||
|
||||
작고 응집된 재사용 단위를 둡니다.
|
||||
|
||||
예:
|
||||
|
||||
```text
|
||||
components/
|
||||
├── aws/
|
||||
│ ├── network/
|
||||
│ ├── identity/
|
||||
│ └── eks/
|
||||
├── gcp/
|
||||
│ ├── network/
|
||||
│ └── gke/
|
||||
└── shared/
|
||||
└── naming/
|
||||
```
|
||||
|
||||
실제로 사용하는 provider 경로만 만듭니다. component에는 environment backend,
|
||||
실제 credential과 환경 고유 값을 두지 않습니다. 입력, 출력, version constraint,
|
||||
권한 요구 사항과 사용 예를 component README에 기록합니다.
|
||||
|
||||
새 component는 `_template`을 복사해 시작합니다.
|
||||
@@ -0,0 +1,29 @@
|
||||
# __REPLACE_ME_COMPONENT_NAME__
|
||||
|
||||
## 책임
|
||||
|
||||
이 component가 생성하고 소유하는 리소스를 적습니다.
|
||||
|
||||
## 입력
|
||||
|
||||
필수/선택 입력과 민감 정보 여부를 적습니다.
|
||||
|
||||
## 출력
|
||||
|
||||
다른 component 또는 live root에 제공하는 안정적인 contract를 적습니다.
|
||||
|
||||
## 요구 권한
|
||||
|
||||
plan/apply에 필요한 최소 provider 권한을 적습니다.
|
||||
|
||||
## 사용 예
|
||||
|
||||
실제 credential, account ID와 운영 값을 포함하지 않는 호출 예를 적습니다.
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] backend를 선언하지 않는다.
|
||||
- [ ] provider/version constraint를 명시한다.
|
||||
- [ ] 입력 validation과 민감 output 표시를 추가한다.
|
||||
- [ ] 환경 이름을 내부에 하드코딩하지 않는다.
|
||||
- [ ] README와 테스트를 함께 갱신한다.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Live Infrastructure
|
||||
|
||||
실제로 plan/apply하는 root를 둡니다. leaf 디렉터리 하나가 독립적인 state,
|
||||
locking, 권한과 실패 범위입니다.
|
||||
|
||||
소규모 예:
|
||||
|
||||
```text
|
||||
live/
|
||||
└── dev/
|
||||
├── network/
|
||||
└── cluster/
|
||||
```
|
||||
|
||||
확장 예:
|
||||
|
||||
```text
|
||||
live/
|
||||
└── aws/
|
||||
└── platform-prod/
|
||||
└── ap-northeast-2/
|
||||
└── prod/
|
||||
├── network/
|
||||
├── shared-services/
|
||||
└── cluster-a/
|
||||
```
|
||||
|
||||
경로 깊이보다 leaf의 실행 계약이 중요합니다. 자동화는 특정 depth를 가정하지
|
||||
말고 IaC root marker를 기준으로 대상을 찾습니다.
|
||||
|
||||
## 규칙
|
||||
|
||||
- 각 root는 remote backend와 locking을 사용합니다.
|
||||
- production과 non-production state/credential을 분리합니다.
|
||||
- 민감하지 않은 입력만 커밋하며 secret 입력은 runtime에 주입합니다.
|
||||
- 다른 환경 경로를 상대 import하지 않습니다.
|
||||
- provider, module과 component version을 고정합니다.
|
||||
- output consumer와 파괴 영향 범위를 README에 기록합니다.
|
||||
@@ -0,0 +1,34 @@
|
||||
# __REPLACE_ME_LIVE_ROOT_NAME__
|
||||
|
||||
## 대상
|
||||
|
||||
- Provider/account/project: __REPLACE_ME_SCOPE__
|
||||
- Region: __REPLACE_ME_REGION_OR_GLOBAL__
|
||||
- Environment: __REPLACE_ME_ENVIRONMENT__
|
||||
- Stack: __REPLACE_ME_STACK__
|
||||
- Owner: __REPLACE_ME_OWNER__
|
||||
|
||||
## State
|
||||
|
||||
- Backend: __REPLACE_ME_BACKEND__
|
||||
- Locking:
|
||||
- Encryption:
|
||||
- Recovery runbook:
|
||||
|
||||
## 의존성
|
||||
|
||||
선행 state/output과 사용하는 component/stack version을 적습니다.
|
||||
|
||||
## Output Contract
|
||||
|
||||
downstream bootstrap 또는 system에 전달하는 값을 적습니다. 민감 output은
|
||||
명시적으로 표시하고 로그에 출력하지 않습니다.
|
||||
|
||||
## 실행
|
||||
|
||||
프로젝트가 선택한 IaC 엔진의 init/plan/apply 절차를 적습니다. production은
|
||||
검토된 plan, 승인과 concurrency lock 없이 적용하지 않습니다.
|
||||
|
||||
## 롤백/복구
|
||||
|
||||
되돌릴 수 있는 변경과 state 복구 절차 링크를 적습니다.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Infrastructure Stacks
|
||||
|
||||
여러 component 조합이 두 개 이상의 live root에서 반복될 때 사용하는 선택 계층입니다.
|
||||
|
||||
예:
|
||||
|
||||
- `regional-foundation`: network + shared identity + DNS
|
||||
- `cluster`: Kubernetes cluster + node pools + workload identity
|
||||
- `edge`: CDN + load balancer + certificate
|
||||
|
||||
작은 프로젝트에서는 `live`가 component를 직접 호출하고 이 계층을 생략합니다.
|
||||
stack은 실행 가능한 environment root가 아니므로 backend와 실제 credential을
|
||||
두지 않습니다. stack 중첩을 깊게 만들기보다 live root에서 평평하게 조합합니다.
|
||||
@@ -0,0 +1,19 @@
|
||||
# __REPLACE_ME_STACK_NAME__
|
||||
|
||||
## 목적
|
||||
|
||||
반복해서 함께 배포하는 component 조합을 설명합니다.
|
||||
|
||||
## 포함 Component
|
||||
|
||||
각 component의 version과 책임을 적습니다.
|
||||
|
||||
## 입력과 출력
|
||||
|
||||
live root에 노출하는 최소 interface를 적습니다.
|
||||
|
||||
## 제약
|
||||
|
||||
- backend와 environment credential을 선언하지 않습니다.
|
||||
- 특정 live 경로를 역참조하지 않습니다.
|
||||
- component가 한 번만 필요하면 stack 계층을 만들지 않습니다.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Infrastructure Tests
|
||||
|
||||
IaC를 선택한 뒤 다음 검증을 필요에 따라 추가합니다.
|
||||
|
||||
- formatter와 syntax/validate
|
||||
- component input/output contract test
|
||||
- policy/static analysis
|
||||
- ephemeral account/project integration test
|
||||
- upgrade와 state migration test
|
||||
|
||||
실제 cloud 통합 테스트는 일반 PR 검증과 분리하고, 짧은 수명의 identity와
|
||||
격리된 account/project를 사용합니다. 테스트가 production state를 읽거나
|
||||
변경해서는 안 됩니다.
|
||||
Reference in New Issue
Block a user