Kubernetes TTL Operator는 Kubernetes 리소스에 TTL(Time To Live) 기능을 제공하는 Operator
리소스 생성 후 지정된 시간이 지나면 자동으로 삭제
- 리소스 생성 시 TTL(초 단위) 설정
- TTL 만료 시 자동 삭제
- 만료 상태 및 시간 추적
- Kubernetes 클러스터 (v1.20+)
- kubectl 설치 및 클러스터 접근 권한
- Go 1.21+ (개발 시)
- Docker 또는 Podman (이미지 빌드 시)
make install# 이미지 빌드 (선택사항)
make docker-build IMG=parkseoyeon/ttl-operator:latest
# Operator 배포
make deploy IMG=parkseoyeon/ttl-operator:latest또는 로컬에서 실행:
make runTTLResource를 생성하여 리소스에 TTL을 설정할 수 있습니다.
apiVersion: ttl.example.com/v1alpha1
kind: TTLResource
metadata:
name: ttlresource-example
spec:
ttlSeconds: 60 # 60초 후 자동 삭제# 샘플 리소스 생성
kubectl apply -f config/samples/ttl_v1alpha1_ttlresource.yaml
# 리소스 상태 확인
kubectl get ttlresource ttlresource-test -o yaml
# 리소스 목록 확인
kubectl get ttlresourcettlSeconds(필수): TTL 시간을 초 단위로 지정합니다. 0으로 설정하면 삭제되지 않습니다.
expired: TTL이 만료되었는지 여부 (boolean)createdAt: 리소스가 생성된 시각expiredAt: TTL 만료 시각
apiVersion: ttl.example.com/v1alpha1
kind: TTLResource
metadata:
name: short-lived-resource
spec:
ttlSeconds: 30apiVersion: ttl.example.com/v1alpha1
kind: TTLResource
metadata:
name: hourly-resource
spec:
ttlSeconds: 3600 # 3600초 = 1시간apiVersion: ttl.example.com/v1alpha1
kind: TTLResource
metadata:
name: no-ttl-resource
spec:
ttlSeconds: 0 # 0으로 설정하면 삭제되지 않음apiVersion: v1
kind: Pod
metadata:
name: test-pod-sy
annotations:
ttl.example.com/ttl-seconds: "10" # 10초 후 자동 삭제
spec:
containers:
- name: nginx
image: nginx:latest
apiVersion: v1
kind: Service
metadata:
name: test-service-sy
annotations:
ttl.example.com/ttl-seconds: "30" # 30초 후 자동 삭제
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
이 프로젝트의 주요 파일들과 역할을 설명합니다.
역할: Custom Resource의 타입 정의
이 파일은 TTLResource CRD의 Go 타입 정의를 포함합니다:
-
TTLResourceSpec: 사용자가 설정하는 원하는 상태
ttlSeconds: TTL 시간(초 단위)
-
TTLResourceStatus: Operator가 관리하는 관찰된 상태
expired: 만료 여부createdAt: 리소스 생성 시각expiredAt: TTL 만료 시각
역할: TTLResource를 관리하는 컨트롤러 로직
이 파일은 Operator의 핵심 비즈니스 로직을 구현합니다:
역할: Operator의 진입점 및 초기화
이 파일은 Operator의 메인 함수를 포함하며 다음을 수행합니다:
- Kubernetes Scheme 설정 (CRD 타입 등록)
- Controller Manager 생성 및 설정
- 메트릭스 서버 설정
- 헬스체크 엔드포인트 설정
- 리더 선출(Leader Election) 설정
- TTLResourceReconciler 등록
- Manager 시작
역할: CustomResourceDefinition 매니페스트
이 파일은 Kubernetes에 TTLResource CRD를 정의하는 YAML입니다:
- CRD 메타데이터 (그룹, 버전, 이름)
- OpenAPI 스키마 정의
- Spec 필드:
ttlSeconds(필수, integer) - Status 필드:
expired,createdAt,expiredAt
- Spec 필드:
- Status 서브리소스 활성화
이 파일은 make manifests 명령으로 자동 생성됩니다.
역할: Operator 배포 매니페스트
이 파일은 Operator를 Kubernetes에 배포하기 위한 Deployment 정의입니다:
- Namespace:
system - Deployment:
controller-manager- 컨테이너 이미지:
controller:latest - 리더 선출 활성화 (
--leader-elect) - 헬스체크 엔드포인트 (
/healthz,/readyz) - 리소스 제한 설정
- 보안 컨텍스트 설정 (Pod Security Standards 준수)
- 컨테이너 이미지:
역할: 프로젝트 빌드 및 배포 자동화
주요 타겟:
make install: CRD 설치make deploy: Operator 배포make build: 바이너리 빌드make docker-build: Docker 이미지 빌드make test: 단위 테스트 실행make manifests: CRD 및 RBAC 매니페스트 생성make generate: DeepCopy 코드 생성
# 의존성 설치
go mod download
# 코드 생성
make generate
# 매니페스트 생성
make manifests
# 빌드
make build
# 테스트 실행
make test# 코드 포맷팅
make fmt
# 린트 검사
make lint
# 린트 자동 수정
make lint-fixmake undeploymake uninstallApache License 2.0