[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
---
|
||||
id: devops-spinnaker-tekton
|
||||
title: Spinnaker / Tekton — modern CI/CD pipelines
|
||||
category: Coding
|
||||
status: draft
|
||||
source_trust_level: B
|
||||
verification_status: conceptual
|
||||
created_at: 2026-05-09
|
||||
updated_at: 2026-05-09
|
||||
tags: [devops, cicd, vibe-coding]
|
||||
tech_stack: { language: "YAML", applicable_to: ["DevOps"] }
|
||||
applied_in: []
|
||||
aliases: [Spinnaker, Tekton, CI/CD pipeline, multi-cloud, continuous delivery, Netflix, K8s pipeline]
|
||||
---
|
||||
|
||||
# Spinnaker / Tekton
|
||||
|
||||
> Modern CI/CD beyond Jenkins. **Spinnaker (multi-cloud), Tekton (K8s-native)**.
|
||||
|
||||
## 📖 핵심 개념
|
||||
- Spinnaker: Netflix 의 multi-cloud CD.
|
||||
- Tekton: K8s-native pipeline.
|
||||
- 매 stage = container.
|
||||
- GitOps 친화.
|
||||
|
||||
## 💻 코드 패턴
|
||||
|
||||
### Spinnaker pipeline (UI / JSON)
|
||||
```json
|
||||
{
|
||||
"name": "Deploy",
|
||||
"stages": [
|
||||
{ "type": "bake", "package": "my-app", "baseOs": "ubuntu" },
|
||||
{ "type": "deploy", "clusters": [{ "account": "aws", "region": "us-east-1" }] },
|
||||
{ "type": "manualJudgment", "message": "Approve prod?" },
|
||||
{ "type": "deploy", "clusters": [{ "account": "aws-prod" }] }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
→ Multi-cloud (AWS, GCP, Azure, K8s).
|
||||
|
||||
### Spinnaker 의 강점
|
||||
```
|
||||
- Multi-cloud (이주 cluster).
|
||||
- Canary (Kayenta automated analysis).
|
||||
- Manual judgment (approval).
|
||||
- Trigger (Jenkins, Docker, cron).
|
||||
- Audit / RBAC.
|
||||
```
|
||||
|
||||
### Tekton (K8s-native)
|
||||
```yaml
|
||||
apiVersion: tekton.dev/v1
|
||||
kind: Pipeline
|
||||
metadata:
|
||||
name: build-deploy
|
||||
spec:
|
||||
tasks:
|
||||
- name: build
|
||||
taskRef: { name: build-image }
|
||||
- name: deploy
|
||||
runAfter: [build]
|
||||
taskRef: { name: deploy-app }
|
||||
```
|
||||
|
||||
```yaml
|
||||
apiVersion: tekton.dev/v1
|
||||
kind: Task
|
||||
metadata:
|
||||
name: build-image
|
||||
spec:
|
||||
steps:
|
||||
- name: build
|
||||
image: gcr.io/kaniko-project/executor
|
||||
args: [--dockerfile=./Dockerfile, --destination=my-image]
|
||||
```
|
||||
|
||||
→ 매 task = pod.
|
||||
|
||||
### PipelineRun
|
||||
```yaml
|
||||
apiVersion: tekton.dev/v1
|
||||
kind: PipelineRun
|
||||
metadata:
|
||||
name: pr-1
|
||||
spec:
|
||||
pipelineRef: { name: build-deploy }
|
||||
```
|
||||
|
||||
→ Trigger.
|
||||
|
||||
### Tekton Triggers
|
||||
```yaml
|
||||
apiVersion: triggers.tekton.dev/v1beta1
|
||||
kind: EventListener
|
||||
metadata:
|
||||
name: github-listener
|
||||
spec:
|
||||
triggers:
|
||||
- name: github-push
|
||||
interceptors:
|
||||
- ref: { name: 'github' }
|
||||
bindings:
|
||||
- ref: { name: github-binding }
|
||||
template:
|
||||
ref: build-deploy-template
|
||||
```
|
||||
|
||||
→ GitHub webhook 가 PipelineRun.
|
||||
|
||||
### vs Jenkins
|
||||
```
|
||||
Jenkins:
|
||||
- Mature.
|
||||
- Plugin 큰 ecosystem.
|
||||
- Java VM.
|
||||
- 큰 server.
|
||||
|
||||
Spinnaker:
|
||||
- Multi-cloud first.
|
||||
- Canary / blue-green.
|
||||
- Netflix scale.
|
||||
|
||||
Tekton:
|
||||
- K8s-native.
|
||||
- 작은 (pod 별).
|
||||
- GitOps.
|
||||
```
|
||||
|
||||
→ K8s = Tekton.
|
||||
Multi-cloud / 큰 enterprise = Spinnaker.
|
||||
Legacy = Jenkins.
|
||||
|
||||
### vs GitHub Actions
|
||||
```
|
||||
GitHub Actions:
|
||||
- GitHub 친화.
|
||||
- Action marketplace.
|
||||
- 작은-중간 project.
|
||||
|
||||
Tekton:
|
||||
- K8s-native (자체 cluster).
|
||||
- 큰 organization.
|
||||
|
||||
→ Modern startup = GHA.
|
||||
큰 enterprise + K8s = Tekton.
|
||||
```
|
||||
|
||||
### vs Argo Workflows
|
||||
```
|
||||
Argo Workflows:
|
||||
- K8s-native (Tekton 와 비슷).
|
||||
- DAG-based.
|
||||
- 더 popular (Argo ecosystem).
|
||||
|
||||
Tekton:
|
||||
- Linear pipeline.
|
||||
- More 작은 + simpler.
|
||||
|
||||
→ Argo 가 더 powerful.
|
||||
Tekton 가 더 simple.
|
||||
```
|
||||
|
||||
### Spinnaker canary (Kayenta)
|
||||
```json
|
||||
{
|
||||
"stages": [
|
||||
{
|
||||
"type": "kayentaCanary",
|
||||
"canaryConfig": {
|
||||
"metricsAccountName": "datadog",
|
||||
"scoreThresholds": { "marginal": 75, "pass": 95 }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
→ Datadog metrics 가 canary 의 OK / abort.
|
||||
|
||||
### Tekton + ArgoCD
|
||||
```
|
||||
1. PR merge → Tekton build image.
|
||||
2. Tekton update Helm chart (git).
|
||||
3. ArgoCD detect change → deploy.
|
||||
|
||||
→ Build (Tekton) + Deploy (ArgoCD).
|
||||
```
|
||||
|
||||
### Spinnaker + ArgoCD
|
||||
```
|
||||
Spinnaker = orchestrator.
|
||||
ArgoCD = K8s sync.
|
||||
|
||||
→ Spinnaker 가 multi-cluster orchestrate.
|
||||
```
|
||||
|
||||
### Production
|
||||
- **Netflix**: Spinnaker 의 creator.
|
||||
- **Google**: 자체 (similar to Tekton).
|
||||
- **Capital One**: Spinnaker.
|
||||
- **IBM**: Tekton 의 contributor.
|
||||
|
||||
### When NOT?
|
||||
```
|
||||
Spinnaker:
|
||||
- 작은 team (overkill).
|
||||
- Single cloud (simpler tool).
|
||||
|
||||
Tekton:
|
||||
- 작은 / non-K8s.
|
||||
- GitHub-only (GHA 충분).
|
||||
```
|
||||
|
||||
### Cost
|
||||
```
|
||||
Spinnaker: free (open) + 큰 운영 cost.
|
||||
Tekton: free + K8s cost.
|
||||
GitHub Actions: per-use.
|
||||
Jenkins: free + 운영.
|
||||
|
||||
→ 운영 cost 가 큰 factor.
|
||||
```
|
||||
|
||||
### Monitoring
|
||||
```
|
||||
- Pipeline duration.
|
||||
- Failure rate.
|
||||
- Queue depth.
|
||||
- Stage-level metric.
|
||||
|
||||
→ Datadog / Prometheus.
|
||||
```
|
||||
|
||||
### Best practice
|
||||
```
|
||||
1. Pipeline as code (git).
|
||||
2. 매 stage 의 timeout.
|
||||
3. Auto-rollback.
|
||||
4. Manual approval (production).
|
||||
5. Canary / blue-green.
|
||||
6. Audit log.
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준
|
||||
| 상황 | 추천 |
|
||||
|---|---|
|
||||
| K8s-native | Tekton / Argo Workflows |
|
||||
| Multi-cloud | Spinnaker |
|
||||
| GitHub project | GitHub Actions |
|
||||
| Legacy enterprise | Jenkins |
|
||||
| 작은 startup | GHA / GitLab CI |
|
||||
| Canary auto-analysis | Spinnaker (Kayenta) |
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Spinnaker on single cloud**: overkill.
|
||||
- **Tekton + non-K8s**: 잘못 선택.
|
||||
- **모든 거 manual approval**: slow.
|
||||
- **No timeout**: hang.
|
||||
- **No audit**: incident response 어려움.
|
||||
|
||||
## 🤖 LLM 활용 힌트
|
||||
- Spinnaker = multi-cloud + Netflix-scale.
|
||||
- Tekton = K8s-native pipeline.
|
||||
- Argo Workflows = Tekton 의 popular alternative.
|
||||
- GitOps + Spinnaker / Tekton = production.
|
||||
|
||||
## 🔗 관련 문서
|
||||
- [[DevOps_CI_CD_Pipeline_Patterns]]
|
||||
- [[DevOps_ArgoCD_Apps_Deep]]
|
||||
- [[DevOps_Argo_Rollouts]]
|
||||
Reference in New Issue
Block a user