20160822

Kubernetes 1.3 실사용 감상

Kubernetes 1.3 올라왔고 회사에서 파일럿 클러스터 구축 지시. 몇 주 써본 소감.

환경: 자체 서버 3노드 (kubeadm 아직 공식 아님 → 1.4 쯤 추가 예정이라는 얘기. 우리는 kube-up.sh 대신 수동 설치). ubuntu 14.04 위에 etcd, kube-apiserver 등 수동 배치. 설치가 정말 빡셈.

처음 부딪힌 개념들:

  • Pod — 컨테이너의 단위라기보다 "같은 lifecycle을 공유하는 컨테이너 그룹"
  • ReplicationController → 1.2부터 ReplicaSet + Deployment로 바뀜. 이제 Deployment 쓰면 됨
  • Service — Pod의 IP가 바뀌어도 안정적 접근점 제공. ClusterIP / NodePort / LoadBalancer
  • ConfigMap / Secret — 1.2부터 공식 stable. 환경변수/설정파일 주입

간단한 deploy + service yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  template:
    metadata:
      labels: { app: web }
    spec:
      containers:
      - name: web
        image: registry.internal/web:1.2.3
        ports: [{ containerPort: 8080 }]
---
apiVersion: v1
kind: Service
metadata: { name: web }
spec:
  selector: { app: web }
  ports: [{ port: 80, targetPort: 8080 }]
  type: ClusterIP

kubectl apply -f deploy.yaml 로 반영.

좋은 점: 롤링 업데이트가 진짜 쉬움. 이미지 태그만 바꿔 kubectl set image 하면 자동으로 순차 교체. health check 기반이라 새 pod 준비된 다음에 예전 pod 삭제.

빡센 점:

  • 네트워킹. 오버레이 네트워크 필수 (우리는 flannel). CNI 세팅 안 맞으면 Pod끼리 통신 안 됨
  • 영속 볼륨. PV/PVC 개념이 복잡. NFS로 대충 붙여놨는데 production은 더 고민해야 함
  • Ingress는 1.3 기준 아직 베타. nginx ingress controller 따로 띄워서 검토중
  • 모니터링/로그. 기본 툴 부족. Heapster + Grafana 세팅 권장

학습 곡선이 진짜 가파른데, 갖춰놓고 나면 배포는 너무 편함. 3개월쯤 운영해보고 본서비스 이관 여부 판단 예정. 지금은 Docker Compose + swarm 조합이랑 병행.