개발자로 살아남기 위해서는 Public Cloud 사용과 더불어 Cloud Native Architecture에 대한 이해와 적용 능력이 반드시 필요할 듯 하다. 꼭 MSA가 아니더라도 자동화와 관리의 측면에서 k8s를 많이 사용하는 추세이다.
업무상 필요하기도 하지만, 평소에도 관심이 있었기에 이번 기회에 CKA를 취득해보려고 한다. 2달 정도 열심히 공부해보자.
k8s는 아무래도 그 동안 업무에서 devops engineer의 영역이었기 때문에 개발자 입장에서 접할 기회가 많지 않았다. 따라서 beginner course 부터 시작하여 차근차근 내용을 정리해나갈 것이다.
강의 내용을 정리하기 전에 Container와 Container Orchestration의 의미에 대해 AI에게 질의해보았다.
- Container : 애플리케이션을 실행하는 데 필요한 모든 코드, 런타임, 시스템 도구, 라이브러리 및 설정을 패키징하여 격리된 환경에서 실행할 수 있게 해주는 단위입니다. 쉽게 말해, 컨테이너는 독립적인 미니 컴퓨터와 같아서, 어떤 환경에서도 동일하게 작동하도록 보장하며, 애플리케이션 배포 및 관리를 효율적으로 만들어줍니다.
- Container-Orchestration : 여러 컨테이너를 효율적으로 관리하고 자동화하는 것을 의미합니다. 컨테이너 배포, 확장, 네트워킹, 그리고 수명 주기 관리를 자동화하여 대규모 애플리케이션을 일관되고 규모에 맞게 배포할 수 있도록 지원합니다.
Virtual machine을 사용할 경우 운영체제에 hyperviser를 활성화하여 여러 개의 운영체제를 구동할 수 있도록 설정한 후 VM마다 OS를 올려 구동해야 한다. 이럴 경우 하드웨어 리소스를 많이 차지하게 되고, vm마다 독립적 환경을 구성해야 하므로 무겁다.
하지만 docker는 docker위에 가상화된 컨테이너를 사용함으로써, 모든 컨테이너가 host의 커널을 공유하며 각 컨테이너는 소프트웨어 실행에 필요한 lib/bin 등 만을 가지고 구동이 가능하게 된다. 즉 hyperviser 위에서 돌아가는 vm에 비해 가볍고 빠르다. (근데 window에서 docker쓸 땐 항상 hyperviser + WSL 조합을 사용하긴 했었다..)
Container (DOCKER)
Container 도입 배경
- 각 개발자들의 개발 환경이 상이하다. (OS Type, Version 등) 로컬에서 구동 되던 것이 배포 후 동작하지 않을 수 있다. (Dependency 종속성 이슈)
- 서로 다른 서비스를 하나의 OS에서 실행할 때 Dependency 종속성으로 인해 문제가 생길 수 있다.
Docker를 사용하여 Host의 커널을 공유하는 독립적인 가상환경을 구성하게 되면 위와 같은 종속성 문제를 해소할 수 있다.
OS의 구성요소
- 커널 (Kernel) : 하드웨어와 상호작용하는 OS의 핵심 기능
- 소프트웨어 (Software) : 응용프로그램 (서비스)
Docker를 사용한 컨테이너 기술은 HyperViser 위에서 구동되는 VM에 비해 격리 수준이 낮다. VM은 호스트 운영체제의 커널을 공유하지 않고 독립적인 OS 환경을 갖는 반면 Docker로 생성한 컨테이너는 host의 커널을 공유하며 Libs + dependencies 만으로 구동되기 때문에 격리 수준이 낮아지게 된다.
Container Orchestration (k8s)
운영 환경에서 유동적인 트래픽에 따라 auto-scailing in/out 과 up/down을 수동으로 진행하려면 굉장히 피곤할 것이다. Docker나 Containerd 같은 컨테이너 런타임을 사용하여 환경을 구성할 때 위와 같은 scailing, network 설정, 배포, 확장 등을 자동화할 수 있게 도와주는 관리 도구가 바로 Container Orchestration이다.
k8s 외에도 Docker swarm 등 다양한 도구가 있지만 대중적으로 k8s를 많이 사용하는 듯 하다.
AI를 통해 정리한 컨테이너 오케스트레이션의 기능은 아래와 같다.
- 배포 및 확장: 컨테이너를 서버에 배포하고, 필요에 따라 자동으로 확장 또는 축소합니다.
- 네트워킹: 컨테이너 간 통신을 관리하고, 서비스 검색 기능을 제공하여 컨테이너들이 서로 연결될 수 있도록 합니다.
- 장애 복구: 컨테이너 장애 발생 시 자동으로 다른 컨테이너로 대체하거나 복구합니다.
- 자원 관리: 컨테이너가 사용하는 컴퓨팅 자원 (CPU, 메모리 등)을 효율적으로 관리하고 할당합니다.
-
'devops > kubernetes' 카테고리의 다른 글
[k8s] RKE2를 활용한 Kubernetes 환경 구성 (0) | 2025.07.22 |
---|---|
[k8s] 기본 리소스 (5) | 2025.07.19 |