init: k8s 폴더 구조init

This commit is contained in:
donghyeon-ka
2026-07-26 17:11:25 +09:00
commit 0912b5030f
61 changed files with 2124 additions and 0 deletions
+4
View File
@@ -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
+33
View File
@@ -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로
전달합니다.
+24
View File
@@ -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와 테스트를 함께 갱신한다.
+38
View File
@@ -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에 기록합니다.
+34
View File
@@ -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 복구 절차 링크를 적습니다.
+13
View File
@@ -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에서 평평하게 조합합니다.
+19
View File
@@ -0,0 +1,19 @@
# __REPLACE_ME_STACK_NAME__
## 목적
반복해서 함께 배포하는 component 조합을 설명합니다.
## 포함 Component
각 component의 version과 책임을 적습니다.
## 입력과 출력
live root에 노출하는 최소 interface를 적습니다.
## 제약
- backend와 environment credential을 선언하지 않습니다.
- 특정 live 경로를 역참조하지 않습니다.
- component가 한 번만 필요하면 stack 계층을 만들지 않습니다.
+13
View File
@@ -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를 읽거나
변경해서는 안 됩니다.