728x90
반응형
Kubernetes(쿠버네티스)
- 구글이 컨테이너 운영을 위해 출시한 오픈소스 라이브러리
- 컨테이너 오케스트레이션 플랫폼 여러 IT 자동화 태스크 또는 프로세스를 조정하여 실행하는 것
- 다수의 Docker 컨테이너 관리, 자동으로 배포 및 스케일링, 장애 복구 기능 제공
- 여러 대의 서버(노드)에서 컨테이너 → 클러스터로 묶어 애플리케이션 분산, 필요할 때마다 리소스 할당 → 자동으로 확장 or 축소
⇒ Docker: 컨테이너 하나하나 관리/ Kubernetes: 그 컨테이너들 효율적으로 배치하고 관리
순서
- 코드 푸시 → CI/CD 파이프라인 트리거(Github Actions)
- Docker 이미지 빌드 → 이미지 레지스트리에 업로드(Docekr Hub, ECR 등)
- Kubernetes 클러스터에 배포(kubectl, Helm 등)
- 모니터링 및 자동 관리(Prometheus, Granfana 등)
단점
- 복잡한 초기 설정
- 컨테이너화: Dockerfile 작성, 의존성 관리, 컨테이너 네트워크 설정 등
- Kubernetes 설정: yml 파일 작성, 클러스터 네트워크 설정, 서비스 디스커버리 등
- 도구와 관리 복잡성
- 모니터링 및 로깅: ELK 스택, Prometheus, Granfana
- 디버깅 어려움
- 보안 문제
- 호스트 OS의 커널 공유
- 이미지 보안 → 악성 코드 포함
- 자원 관리 및 오버헤드
- 추가적인 리소스(마스터 노드, API 서버 등)
- 복잡한 네트워크 설정
- 서비스 디스커버리 로드 밸런싱, 네트워크 정책
- node: 하나의 가상머신 또는 물리머신
- pod: 가장 작은 단위
- node 내에 존재하고 container 여러 개로 구성되어 있음
- NodePort
- 클러스터 외부에서 내부 서비스에 접근할 수 있게 해줌
- 특정 포트를 각 노드에 열어두고 이를 통해 클러스터 외부에서 해당 서비스로 트래픽을 전달
Helm
- Kubernetes 패키지 관리를 도와줌
- ex. Node.js의 npm과 Python의 pip와 같은 역할
- chart, repository, release
server 설정
- `brew install helm`
- `helm create {serverName}`
- `cd charts`
- `helm create mysql`
- `helm create server`
- `cd ..` -> `helm install {serverName} .`
- `helm list`
- `clusterId`: 내부 통신 ⇒ `LoadBalancer` or `NodePort` 사용
- `LoadBalancer`: 이 포트 그대로 바깥이랑 연결
- `autoscaling`: 수평적 확장
- 80% 넘어가면 replica가 자동으로 늘려줌
ingress
- 외부 트래픽(HTTP 및 HTTPS 요청 등)을 클러스터 내부의 서비스로 라우팅하기 위해 사용하는 리소스
- 클러스터 내부에서 동작하는 애플리케이션 → 외부에서 접근 가능하도록 하는 역할
- `kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.3/deploy/static/provider/cloud/deploy.yaml`
인그레스(Ingress)
URI, 호스트네임, 경로 등과 같은 웹 개념을 이해하는 프로토콜-인지형(protocol-aware configuration) 설정 메커니즘을 이용하여 HTTP (혹은 HTTPS) 네트워크 서비스를 사용 가능하게 한다. 인그레스 개념은
kubernetes.io
GitHub - kubernetes/ingress-nginx: Ingress NGINX Controller for Kubernetes
Ingress NGINX Controller for Kubernetes. Contribute to kubernetes/ingress-nginx development by creating an account on GitHub.
github.com
728x90
반응형