본문 바로가기
반응형

12. 쿠버네티스란10

쿠버네티스의 장점 쿠버네티스가 모든 서버에 배포된 경우, 운영팀은 더 이상 어플리케이션을 배포할 필요가 없다. 컨테이너화된 어플리케이션에는 이미 필요한 모든 항목이 포함되어 있기 떄문에 시스템 관리자는 어플리케이션을 배포하고 실행하기 위해 아무것도 설치할 필요가 없다. 쿠버네티스가 배포된 노드에서는 시스템 관리자의 도움 없이 즉시 어플리케이션을 실행할 수 있다. 어플리케이션 배포 단순화 쿠버네티스는 모든 워커 노드를 단일 배포 플랫폼으로 제공하므로 어플리케이션 개발자는 직접 어플리케이션을 배포할 수 있으며 클러스터를 구성하는 서버에 대해 알 필요도 없다. 본질적으로 모든 노드는 어플리케이션이 노드를 소비하기를 기다리고 있는 계산된 리소스다. 개발자는 일반적으로 서버가 어플리케이션에 적절한 시스템 리소스를 제공할 수 있는 .. 2020. 5. 31.
쿠버네티스에서 어플리케이션 실행 쿠버네티스에서 어플리케이션을 실행하려면 먼저 하나 이상의 컨테이너 이미지들을 패키지로 만들어 이미지 레지스트리에 푸시한 후 쿠버네티스 API 서버에 어플리케이션의 디스크립션을 게시해야 한다. 디스크립션에는 컨테이너 이미지 또는 어플리케이션 컴포넌트가 들어 있는 이미지가 있고, 컴포넌트 간 관련성 및 노드 배치 정보도 있다. 각 컴포넌트의 실행 복제본 수를 지정할 수도 있다. 그 뿐만 아니라 디스크립션에는 내부 클라이언트나 외부 클라이언트에 서비스를 제공하는 컴포넌트가 들어 있고, 단일 IP 주소로 노출해 다른 컴포넌트에서 검색할 수 있어야 한다. 디스크립션이 컨테이너의 실행을 가져오는 방법 스케줄러는 API 서버가 어플리케이션의 디스크립션을 처리할 때 각 그룹에서 필요한 연산 리소스와 각 노드의 할당되지.. 2020. 5. 1.
쿠버네티스 클러스터 아키텍처 쿠버네티스 클러스터는 하드웨어 수준에서 많은 노드로 구성되며 두 가지 유형으로 나눌 수 있다. (1) 마스터 노드는 전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 관장한다. (2) 워커 노드는 실제 배포하고자 하는 어플리케이션의 실행을 담당한다. 컨트롤 플레인 컨트롤 플레인에서는 클러스터를 관리하고 클러스터의 기능을 실행한다. 단일 마스터 노드에서 실행하거나 여러 노드로 분할되고 복재돼 고가용성을 보장할 수 있는 여러 요소로 구성된다. 구성 요소는 다음과 같다. (1) 사용자, 컨트롤 플레인과 통신하는 쿠버네티스 API 서버 (2) 어플리케이션을 예약하는 스케줄러(어플리케이션의 배포 가능한 각 구성 요소에 워커 노드를 할당) (3) 구성 요소 복제, 워커 노드 추적, 노드 장애 처.. 2020. 5. 1.
도커 컨테이너 플랫폼 컨테이너 기술은 오랫동안 사용되어 왔지만 도커 컨테이너 플랫폼의 등장으로 널리 알려졌다. 도커는 컨테이너를 여러 컴퓨터에 쉽게 이식 가능하게 하는 최초의 컨테이너 시스템이다. 컨테이너 시스템은 어플리케이션뿐만 아니라 라이브러리와 여러 의존성, 심지어 전체 운영체제 파일 시스템에 이르기까지 패키징 프로세스를 단순화시켰고, 도커가 운영중인 다른 머신에 어플리케이션이 프로비저닝할 수 있도록 단순하고 간편한 포터블 패키지로 변화시켰다. 도커를 통해 패키지된 어플리케이션을 실행하면 어플리케이션은 도커에 함께 제공된 파일 시스템 내용을 정확하게 볼 수 있다. 개발 머신에서 실행중이든, 운영 머신에서 실행중이든, 심지어 운영 서버가 다른 리눅스 OS상에서 실행 중이든 동일한 파일을 보게 된다. 어플리케이션은 실행 중.. 2020. 5. 1.
컨테이너 격리를 가능하게 하는 메커니즘 컨테이너 격리를 가능하게 하는 메커니즘에는 두 가지가 있다. 첫번째 메커니즘은 각 프로세스가 파일, 프로세스, 네트워크 인터페이스, 호스트 이름 등 시스템에 독립 뷰를 제공하는 리눅스 네임스페이스다. 두번째 메커니즘은 프로세스가 소비할 수 있는 리소스의 양을 제한할 수 있는 리눅스 컨트롤 그룹이다. 리눅스 네임스페이스 기본적으로 리눅스 시스템은 초기 구동 시 하나의 단일 네임스페이스를 갖는다. 파일 시스템, 프로세스ID, 사용자ID, 네트워크 인터페이스 등과 같은 모든 시스템 자원은 단일 네임스페이스에 속한다. 그러나 네임스페이스를 추가로 만들고 리소스를 구성할 수 있다. 프로세스를 실행하면 프로세스는 네임스페이스 중 하나에서 실행된다. 프로세스는 동일한 네임스페이스 안에 있는 리소스만 볼 수 있다. 여.. 2020. 4. 30.
컨테이너의 이해 어플리케이션이 더 작은 수의 커다란 구성 요소로 구성되는 경우, 각 구성 요소에 전용 VM을 부여하고 각 구성 요소에 자체 운영체제 인스턴스를 제공해 환경을 격리할 수 있다. 그러나 이런 구성 요소가 점점 작아져 그 수가 늘어나기 시작하면 하드웨어 리소스를 낭비하지 않고 비용을 줄이기 위해 각자 고유의 VM을 제공하기는 어렵다. 이는 단지 하드웨어 리소스 낭비만의 문제는 아니다. 일반적으로 VM을 개별적으로 구성하고 관리해야 하므로 VM 수가 많아질수록 시스템 관리자의 작업 부하도 증가되기 때문에 인적 자원도 낭비된다. 리눅스 컨테이너 기술을 통한 컴포넌트 분리 개발자는 VM을 사용해 각 마이크로서비스의 환경을 격리하는 대신 리눅스 컨테이너 기술을 사용한다. 이 기능을 사용하면 같은 호스트 시스템에서 여.. 2020. 4. 30.
지속적배포(CD)로 이동: DevOps와 NoOps 지난 몇 년간 전체 어플리케이션의 개발 프로세스와 프로덕션에서 어플리케이션이 처리되는 방식에 큰 변화가 있었다. 과거에는 개발팀에서 어플리케이션을 만든 후에 운영팀에 넘겨주면 어플리케이션을 배포하고, 관리하며 계속 실행했다. 그러나 지금은 어플리케이션을 개발하는 사람이 배포에도 참여하고 전체 라이프사이클을 함께 관리할 수 있게 팀을 구성하는 편이 더 효율적이라는 사실을 알게 됐다. 이것은 개발자, 품질 보증, 운영팀이 전체 프로세스를 모두 함께 작업해야 한다는 의미이다. 이런 작업 방식을 DevOps라고 부른다. DevOps의 장점 개발자가 운영에서 어플리케이션 실행에 좀 더 많은 시간을 들인다면 사용자가 무엇을 필요로 하는지, 어떠한 문제가 있는 더 잘 이해하게 되고, 운영팀이 어플리케이션을 유지하는 .. 2020. 4. 30.
어플리케이션에 일관된 환경 제공 개발팀과 운영팀 사이의 가장 큰 문제 중 하나는 개발자가 개발하고 배포하는 구성 요소의 수가 얼마나 많은지에 관계없이 어플리케이션을 실행하는 환경의 차이를 다뤄야 한다는 점이다. 개발 환경과 운영 환경 간의 커다란 차이뿐만 아니라 개별 운영 시스템 간에도 차이점이 발생한다. 시간이 지나면서 단일 운영 시스템의 환경이 변하는 것은 피할 수 없다. 이런 차이점은 하드웨어에서 운영체제, 각 시스템에서 사용 가능한 라이브러리에 이르기까지 다양하다. 프로덕션은 운영 팀에서 관리하지만 개발자는 가끔씩 개발 노트북만을 신경 쓸 뿐이다. 이 차이점은 이 두 그룹에 소속된 사람들이 시스템 관리를 얼마나 알고 있느냐에 기인한다. 이런 이해도는 이 두 시스템 사이에 상대적으로 큰 차이를 만든다. 시스템 관리자는 최신 보안 .. 2020. 4. 30.
모놀리식 어플리케이션에서 마이크로서비스로의 전환 모놀리식 어플리케이션은 모든 것이 서로 강하게 결합해 구성되며, 전체가 단일 운영체제 프로세스로 실행되기 때문에 하나의 개체로 개발, 배포, 관리해야 한다. 어플리케이션을 조금만 변경해도 전체 어플리케이션을 다시 배포해야 하므로 개발과 배포, 관리의 경계는 시간이 지나면서 모호해진다. 결국 시스템 전체의 품질이 저하된다. 일반적으로 모놀리식 어플리케이션을 실행하려면 어플리케이션을 실행하는 데 필요한 리소스를 제공할 수 있는 소수의 강력한 서버가 있어야 한다. 시스템상 증가하는 부하를 처리하려면 CPU, 메모리, 그 밖의 서버 구성 요소를 추가해 서버를 수직적으로 확장하거나(스케일링 업) 서버를 추가하고 셋업해 어플리케이션의 복사본을 여러 개 실행함으로써 모든 시스템을 수평적으로 확장할(스케일링 아웃) 수.. 2020. 4. 30.
반응형