Docker(도커)**를 사용하는 이유?

  1. 이식성 (Portability) Docker 컨테이너는 애플리케이션과 그 종속성(라이브러리, 설정 파일 등)을 함께 패키징하여, 어디서나 동일한 환경에서 실행할 수 있습니다. 개발 환경, 테스트 환경, 운영 환경 간에 일관성을 유지

  2. 경량화된 가상화 컨테이너는 OS 커널을 공유하기 때문에 실행 속도가 빠르고, 리소스 소비가 적으며, 시스템 자원을 효율적으로 사용합니다.

  3. 일관된 개발 환경(일관성) 컨테이너는 각 애플리케이션이 독립적인 환경에서 실행되도록 보장합니다.

kubernetes 의 주요 구성 요소들에 대해 설명해 주세요.

  • 마스터 노드 (Master Node): 클러스터의 제어를 담당하는 노드. ==API 서버, 컨트롤러 매니저, 스케줄러, ETCD== 등의 컴포넌트가 포함됩니다. 이들 구성 요소는 클러스터를 관리하고 작업을 조정합니다.
  • kubeapi : Kubernetes API 서버로, 클러스터의 모든 리소스에 대한 CRUD 작업을 처리. 사용자 및 클러스터와의 모든 상호작용을 관리
  • Kubelet: 각 ==워커 노드==에서 실행되며, 마스터 노드로부터 명령을 받아 POD를 관리. POD 내 컨테이너 상태 조정
  • ETCD: 클러스터의 모든 구성 데이터를 저장하는 분산 키-값 저장소
  • Scheduler : 새로 생성된 포드를 적절한 워커 노드에 할당하는 역할
  • Controller Manager: 클러스터의 상태를 관리하는 다양한 컨트롤러를 실행하는 컴포넌트. ReplicaSet, Job, DaemonSet 등 여러 리소스를 모니터링하고 상태를 조정
  • 워커 노드 (Worker Node): 애플리케이션이 실행되는 노드, **==Kubelet, Kube-proxy, 컨테이너 런타임**== 등 포함.
  • Kube-proxy: 클러스터 내부의 네트워크 통신을 관리하며, 서비스 간의 트래픽을 라우팅
  • kubeadm : kubernetes 클러스터를 쉽게 설치하고 관리할 수 있도록 도와주는 도구.
  • Kubernetes Network Plugin (CNI)* : Kubernetes 클러스터 내에서 네트워크를 설정하는 데 사용되는 플러그인입니다. Calico, Flannel, Weave Net 등이 있습니다.

Calico 가 뭔데요?

컨테이너 런타임( ContainerRuntime)이 어떤 역할을 하는지 설명해 주세요.

답변: “컨테이너 런타임은 컨테이너를 실제로 실행하고 관리하는 역할을 하는 소프트웨어입니다. 쿠버네티스에서 Kubelet은 컨테이너 런타임과 상호작용하여 컨테이너를 시작하고, 정지하며, 모니터링합니다. 일반적으로 Docker, containerd, CRI-O 등이 사용됩니다. 컨테이너 런타임은 애플리케이션의 격리된 환경을 제공하며, 필요한 리소스를 할당하고, 실행되는 컨테이너의 상태를 관리합니다. 쿠버네티스는 표준화된 CRI(Container Runtime Interface)를 통해 다양한 컨테이너 런타임과 호환성을 유지합니다.”

쿠버네티스의 오토스케일링(Autoscaling) 기능을 활용한 경험이 있나요? 구체적인 사례를 들어 설명해 주세요.

답변: “예, 쿠버네티스의 오토스케일링 기능을 활용한 경험이 있습니다. 예를 들어, HPA(Horizontal Pod Autoscaler)를 사용하여 웹 애플리케이션의 트래픽이 급증할 때 자동으로 포드의 개수를 조정한 적이 있습니다. 당시 애플리케이션이 특정 시점에 트래픽이 급증하는 패턴을 보였는데, HPA를 사용해 CPU 사용률을 기준으로 스케일링을 설정했습니다. 이로 인해 사용자의 증가에 따라 포드가 자동으로 늘어나 안정적인 서비스를 제공할 수 있었습니다. 또한, MPA(Metric Server)를 통해 다양한 메트릭을 모니터링하며 필요에 따라 확장 전략을 조정한 경험도 있습니다.”

인그레스( Ingress)와 이스티오( Istio)와 같은 네트워크 관련 도구들을 사용해 본 경험이 있나요? 각 도구의 차이점에 대해 설명해 주세요.

답변: “네, 인그레스와 이스티오를 사용해 본 경험이 있습니다.

  • 인그레스 (Ingress): 쿠버네티스에서 외부 트래픽을 클러스터 내부 서비스로 라우팅하기 위해 사용되는 리소스입니다. 일반적으로 HTTP/HTTPS 트래픽을 처리하며, 도메인 기반 라우팅, TLS/SSL 설정 등을 지원합니다. NGINX, Traefik과 같은 인그레스 컨트롤러를 사용하여 인그레스 리소스를 관리할 수 있습니다.
  • 이스티오 (Istio): 서비스 메쉬 솔루션으로, 마이크로서비스 간의 통신을 관리하고, 보안, 트래픽 관리, 모니터링 등의 기능을 제공합니다. 이스티오는 Envoy 프록시를 사이드카 패턴으로 각 서비스에 배치하여, 서비스 간의 통신을 제어합니다. 이스티오는 보다 복잡한 트래픽 관리, 장애 복구, 가시성 제공 등의 기능을 추가로 제공합니다.
  • 차이점: 인그레스는 주로 클러스터 외부와 내부 간의 트래픽을 관리하는 데 중점을 두며, 기본적인 라우팅과 SSL 처리가 주요 기능입니다. 반면에 이스티오는 클러스터 내부 서비스 간의 통신을 더욱 세밀하게 관리하며, 트래픽 제어, 보안 정책 적용, 모니터링 등의 고급 기능을 제공합니다.”