STUDY/Data Engineering

[인프런] 쿠버네티스 (도커와 쿠버네티스 시작하기)

wonpick 2023. 3. 22. 09:09

쿠버네티스란? 

  •  컨테이너 기반 오픈 소스 가상화 프로젝트 
  • 5.6m(560만명)이 쿠버를 쓴다. 크라우드 네이티브 시스템을 구축하게되면 쿠버네티스 사용하는 비율이 많다. 

왜 쿠버야?

  •  클라우드 네이티브를 도입하고 쿠버를 도입하면 조직의 문화를 엄청 변화시키는 것 임. 
  • (문제)
    • 교육(러닝커브가 심함, 기존에 있던 인력들은 신기술을 접해보지 못했기 때문에)
    • 문화(마이크로서비스 아키텍쳐 등 개발에 대한 과정을 이해하고 바꿔야함) 
    •  보안 (시스템을 바꾸면 안전한가?라는 고민) 

 

클라우드 네이티브란?

  • 클라우드의 장점을 최대한 활용하여 정보 시스템을 구축 및 실행하는 환경 
  • 클라우드에 대한 수요는 계속 늘고 있다. (정부에서 사용할 정도로) 
  • 클라우드 네이티브 기술, 애플리케이션, 아키텍쳐, 개발방법론, 조직, 프로세스 등 다양한 용어와 결합하여 다양한 의미로 사용한다. 
  • 쿠버네티스는 클라우드 네이티브 구성요소를 완전히 수행할 수 있는 최고의 플랫폼
  • CNCF(cloud native coputing foundation) 쿠버를 도입한다고 하면 이 플젝을 모를 수 없다. 클라우드 네이티브를 운영하려면 cncf 프로젝트를 알 수 밖에 없다. 나중에 이 프로젝트를 봐봐라 

기존 애플리케이션과 클라우드 네이티브 애플리케이션의 차이점?

  • 기존 애플리케이션은 장기간에 걸쳐 긴밀하게 결합된 모놀리식 기반 위에서 동작 (*jsp,php 등 웹서버 공부해보면 알 수 있음. 모놀리식은 애플리케이션을 다같이 프로세스 하나에 합쳐놓은것을 의미 , 로그인 회원관리 기능, 게시 기능, 결제 등등 모든 기능들을 쪼개지않고 애플리케이션을 하나의 프로세스안에 다 넣는걸 모놀리식 구조라고 함) 
  • 근데 모놀리식에서 마이크로서비스로 바꾼다는건 모든 기능들을 쪼개는 것을 의미. 하나의 프로그램으로 동작하는게 아니라 다 개별적으로 동작하게 됨. (우버는 1000개 넷플릭스는 900개의 서비스로 쪼개져있음) 
  • 클라우드 네이트브도 실행환경을 VM으로 할 수 있지만 컨테이너 양이 너무 많기 때문에 너무 비효율 적임.
  • 수직확장(CPU 메모리 개수를 늘린다.) 수평확장(디도스 공격이런게 일어나면 컨테이너를 증가 시킴) 
  • 인프라의존성 (물리서버에 의존적이니 인프라의존이고, 컨테이너는 가상환경이기 때문에 인프라 독립 이식성 보장됨)
  • 폭포수(사용자 요구사항이랑 이런거 다 수립해서 개발했는데 수정사항이 생겨도 다시 되돌아가는게 쉽지 않음, 폭포를 거슬러 올라가는게 쉽지 않기 때문에), 애자일(소프트웨어 프로토타입을 중요한것만 만들어 놓고 점점 개선해나갈 수 있음) 
  • CI/CD(ContinuousIntergration 지속적 통합/ContinuousDeployment 연속적 배포): 데브옵스의 개발 프로세스, 지속적으로 연속적으로 배포할 수 있도록 파이프라인을 자동화 함. 애플리케이션 배포하는데 엄청 빠르게할 수 있음. 아마존은 1초에 6번씩 배포한다고 함. 
  • 데브 옵스는 소프트웨어 개바로가 it운영을 결합한 합성어임. 기존의 분리된 소프트웨어 개발팀과 it운영팀의 협업으로 전체 라이프 사이클을 함께 관리할 수 있다는 일종의 운동.. 소프트웨어 개발 팀과 it팀이 빠르고 안정적이게 소프트웨어 빌드 릴리즈 할 수 있도록 두팀간의 프로세스를 자동화하는 일련의 과정이다. 

불필요한 서비스까지 복제해서 리소스 낭비, 라이브러리 관리하기 힘듦. 조금만 수정해도 전체 빌드를 해야함. 빌드하는데 너무 오래걸림.이틀 이상 걸릴 수 있음.. 출근 안해도 돼..... 
아마존 경우 팀당 15분에 1번씩 빌드 릴리즈를 할 수 있음. 마이크로 서비스 한계들을 우리가 공부함으로써 돌파해나가는 것임.. 

 

클라우드 네이티브 구성요소 

  • 마이크로서비스 
    • 모놀리식에서 기능을 다 쪼갠 것. 독립적인 실행 및 배포가 가능한 마이크로서비스
  • 컨테이너
    • 프로세스를 독립시킨 환경, 경량화된 컨테이너 단위 수평적 확장
    • 코드, 해당 의존성 및 런타임은 컨테이너 이미지라는 이진 파일로 패키지. 
    • 예) 컨테이너 안에서 사람이 살고 있다고 생각할 때, 안에 생필품을 막 넣어주면 컨테이너 밖으로 나오지 않고 살거다. 프로세스도 마찬가지로 동작할 수 있도록 수많은 자원(cpu, 파일시스템, 환경변수 등등)을 제공한다. 외부 환경에 영향을 받지 않고 가상화되어 독립적인 가상화 환경에서 프로세스가 동작함.
  • devops
    • 개발팀과 운영팀간 단일한 협업 프로세스
  • 자동화
    • ci/cd(소규모 개발팀별 자율적 & 독립적 서비스 운영), 스크립트를 활용한 인프라 

 

마이크로 서비스 성공 사례 

  • 도커가 나오기 전부터 설계를 함 (2012년도니까) 
  • 저 하나하나가 컨테이너가 아닌 VM으로 구성함(EC2) 

복잡도감소? 자동차 부품 예로 나사만 개발하면 되니까 복잡도가 감소했다고 볼 수 있음. 

 

가상화 개념과 컨테이너 

  • 가상화란 무엇일까? 
    • 가상화는 전통적으로 하드웨어에 종속된 리소스를 사용해 유용한 IT 서비스를 만드는 기술이다. 
    • 가상화를 사용하면 물리적 머신 기능을 여러 사용자 또는 환경에 배포해 물리적 머신을 최대한 활용한다. 

  • 하이퍼바이저란?
    • 소프트웨어가 물리 리소르를 필요로 하는 가상 환경으로부터 물리 리소스를 분리
    • 호스트 컴퓨터 대에서 운영체제 다수를 동시에 실행하는 논리적 플랫폼 
    • 하드웨어를 가상화 시키는 작업이 필요함 파티셔닝해서 근데 이걸 하이퍼바이저가 담당함. 
    • 하이퍼 바이저는 노드북등 운영체제에 배포하거나 서버등의 하드웨어에 직접 설치해야됨.

많이 설치하는건 타입2, 서버관리자나 인프라관련에서 많이 쓰는건 타입1

  • 전가상화/반가상화
    • os가 하드웨어랑 vm 반반 통신하는게 반가상화 방식

 

  • 컨테이너
    • vm->컨테이너로 넘어가고 있음
    • 컨테이너는 가상환경을 사용해 각 마이크로 서비스를 isolate하는 기술 

  • 도커
    • 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나 (컨테이너 공부한다고하면 도커를 공부한다고 보면 됨, 애플리케이션 컨트롤하는게 도커만 있는건 아님) 
    • 다양한 운영체제에서 사용가능(윈도우위에서 쓰는거 azure 보면 됨) 

 

20년에 도커 안쓸거야라고 얘기를 하고 22년부터 도커를 안씀. 우린 도커 안쓸거임 했는데, 불필요한 통신이 일어나니 직접 효율성을 위해 컨테이너를 직접 통제하겠다고 함.  실제 도커를 설치안해도 됨. 

  • 컨테이너 종류는 엄청 많다. 
  • 가장 유명한 레지스트리는 docker hub registry가 있다. 도커사에서 직접 운영하는 외로 azure, aws 등에서 운영하는것도 있다. 이렇게 퍼블릭 클라우드로 퍼블릭하게 운영도가능하고 private하게 나만 접근해서 인증과정으로 다운받게 운영도 가능함.
  • 외부에서 접근 못하게 폐쇄망(내부망)에서 운영해야되면 온프레미스 환경을 구성하게 됨. 외부 인터넷 환경과 접속하지 않고 사내에 이미지 레지스트리를 구성하고 거기서 다운받아서 애플리케이션 배포할 수 있게 만든다. 그래서 온프레미스 환경에서도 구성할 수 이싿. 
    • 대표적인 솔루션은 오픈소스를 통해 cncf의 harbor라는 애플리케이션을 사용하면 보다 쉽게 프라이빗한 기능을 많이 갖춘 레지스트리를 만들어줄 수도 있다.  

쿠버네티스 

  • 2014년 구글이 오픈 소스 공개
  • 고대 그리스어로 항해사라는 의미를 가짐
  • 구글이 컨테이너 운영 노하우가 담긴 오픈소스(go언어로 만듦)
  • 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구

  • 컨테이너는 프로세스를 격리하는 환경이고 기존의 vm보다 뛰어난 성능을 보여준다. 하지만 컨테이너를 컨트롤 하기 어렵기 때문에 도커를 사용해서 컨트롤하기 시작했다. 
  • 도커도 마찬가지로 호스트 하나마다 다 설치되어서 운영되면 쉽지 않겠지만 도커를 컨트롤 할 수 있는 쿠버네티스를 활용함으로써 편이성을 높였다.