다음 몇 주 동안, 우리는 우리가 컨테이너 기술에 대 한 Google의 견해 중 일부를 설명 하 고 블로그의 새로운 시리즈를 발표 한다 고 우리가 지난 10 년간 컨테이너에서 서비스를 실행 하는에 Google의 경험의 일부 독자 들과 공유 합니다. 우리는 Google의 제품 관리자, 일선 기술자, 건축가의 팀이 고 팀의 일반적인 목표는 보다 효과적으로 독자 컨테이너 기술 혁명을 만들 수 있는 방법 및 실행된 서비스를 이해 하. 이 시간 우리 블로그의이 시리즈의 개통을 공유 하는 Google 클라우드 플랫폼 글로벌 솔루션, 마일 구에서에서 전문가 초청.
안녕하세요, 모두 들! 오신 것을 환영 합니다 우리의 새로운 시리즈의 블로그, 그리고이 시리즈에서 우리는 오늘날의 계산 모델 혁신의 가장 세련 된 지역 중 하나를 소개 하 거 야: 기술 (containerization) 컨테이너.
질문을 많이 할 수 있습니다: 컨테이너 무엇 이며 어떻게 작동 합니까? 독 노동자와 무엇 무엇 Google 컨테이너 엔진과 관리 되는 VM은 kubernetes, 의미? 그들 사이 연결 이란 무엇입니까, 어떻게 우리가 컨테이너를 통해 강력한 서비스를 구축 하 고 생산 환경의 큰 클러스터에서 사용할 수 있도록? 사용자가이 기술로 비즈니스 가치를 어떻게 받을 수 있나요? 글쎄, 우리는 더 이상 서 스 펜스, 그리고 우리는 주제에 (게) 똑바로. 우리는 컨테이너 기술에 대 한 구체적인 소개와 함께 시작 하 고 컨테이너 기술을 어떻게 우리가 더 나은 일을 만들 수에 대 한 이야기.
계산 모델 (컴퓨팅 모델)의 개발, 우리는 계산 모델 솔루션에 몇 가지 변화 받은. 지난 회 10, 우리는 매우 명확 하 게 가상화 기술의 관점에서에서 이러한 변화의 과정을 볼 수 있습니다. 가상화 기술 개발에서 혜택, 우리는 크게 향상 우리의 전반적인 자원의 효율성 우리의 일 및 서비스를 제공 하는 반복 작업의 값에 따라 감소 되었습니다 동시에 동안. 이러한 경향은 멀티 테 넌 트, API 기반 관리의 출현에 의해 강화 하고있다 그리고 공공 클라우드 컴퓨팅 기술. 주요 돌파구 중 하나 리소스가 사용 되는 방식에 변화입니다. 가상 방식으로, 우리는 수 분, 그리고이 가상 CPU 코어 안에 작은, 독립, 온 디맨드 CPU 커널 느낌 가상 실제 컴퓨터 외부 직접 실행. 질문은, 그래서 그것은 가상 하는 데 필요한 전체 기계 단지 작은 양의 리소스를 필요로 할 때?
Google은 하루에 일찍이 문제를 발생 하 고 있다: 우리가 빠르고 저렴, 소프트웨어를 출시 하 고 컴퓨팅 서비스의 운영을 지 원하는 데 필요한 리소스의 규모는 전에 해 적. 이 수요를 충족 시키기 위해 우리 서비스 세분화를 통해 리소스를 제어할 수 있도록 기존 리소스의 추상화의 높은 레벨을 할 필요가. 이 위해, 새로운 기술을 Cgroup을 통해 우리는 컨테이너 라고 하는 서비스 런타임 환경, 분리 라고 하는 리눅스 커널에 추가 했습니다. 이것은 모든 Google의 서비스에 대 한 실행 하는 데 필요한 기본 운영 체제 환경을 간소화 하는 새로운 가상화 기술입니다. 지금까지 다음 몇 년 동안, 컨테이너 관련 기술 진화 되어, 독 노동자의 도래와 함께이 기술의 영향 더 확장 되었습니다, 독 노동자는 상호 운용 가능한 만들 기반 컨테이너 응용 프로그램에 대 한이 기술을 사용 하 여는 형식 (상호 운용 가능한 형식).
컨테이너를 사용 하는 이유는?
어떤 가상 컴퓨터 할 컨테이너 기술 제공?
간체 배포 (간단한 배포): 컨테이너 기술을 단일 주소-액세스, 레지스트리 저장 (레지스트리 저장) 구성 요소 명령 한 줄으로 배포할 수 있는 응용 프로그램을 패키지할 수 있습니다. 어디에 서비스를 배포 하려면에 컨테이너 근본적으로 서비스 배포를 단순화할 수 있습니다.
빠른 제공 (급속 한 가용성):이 방법에서는, 전체 물리적 컴퓨터 리소스를 가상화 패키지 서비스 시작할 수 1/20 초에서에 비해 보다 컨테이너 기술을 다시, 운영 체제의 자원을 추상화 그것은 가상 컴퓨터를 시작 하는 분을 걸릴 수 있습니다.
마이크로-서비스 (활용 MicroServices): 작은 가상 컴퓨터는 서비스를 실행 하는 데 필요한 리소스에 대 한 또는 귀하의 시스템에 대 한 너무 큰 리소스를 제공 하는 경우 컨테이너 수 컴퓨팅 리소스를 더 세분 하는 개발자와 시스템 관리자 많은 작업을 요구를 한 번에 대 한 가상 기회를 확장 하 고 컨테이너 잘 상황을 향상 시킬 수 있습니다.
무슨 컨테이너 기술의 이러한 장점은 당신을 도울 수 작업?
가장 확실 한 측면 중 하나는 개발자가 그들의 노트북을 통해 동시에 여러 컨테이너를 실행 하 고 빠른 서비스 배포를 용이 하 게 수입니다. 단일 컴퓨터에서 여러 가상 컴퓨터를 실행할 수도 있지만, 간단 하 게, 빠르고 가벼운 컨테이너 될 수 있습니다 분명 하다.
또한, 컨테이너 서비스 릴리스 관리를 쉽게 만들 수 있습니다 하며 새로운 컨테이너 버전만 단일 명령. 동시에 공용 클라우드 플랫폼에서 쉽게 되는 테스트 작업, 10 분 이상 (또는, 전체 시간?) 결제 방법을 가상 컴퓨터 수 만 단일 테스트 프로그램을 실행 하는 경우 없을 수 있습니다 테스트에서 소비 하는 자원의 많은. 그러나, 매일 수천 테스트 기반 프로그램을 실행 하면, 자원의 비용 위로 갈 수 있다. 컨테이너를 사용 하 여 동일한 테스트를 수행 하는 경우 동일한 리소스 소비 (가상 컴퓨터를 사용 하 여 동일한 리소스 소비), 크게 서비스 비용을 절약할 수 있는 테스트의 수천을 완료 해야 합니다.
또 다른 중요 한 장점은 컨테이너에 배포 되는 기능의 조합을 이며 전체 시스템 조립, 특히 오픈 소스 소프트웨어를 사용 하는 이러한 시스템에 대 한 쉽게 된다. 시스템 관리자, 다음과 같은 작업은 위협할 수: 설치 및 MySQL, memcatched, MongoDB, Hadoop, Glusterfs, RABBITMQ, Node.js, Nginx, 그리고에 구성 하 고 다음 소프트웨어 캡슐화. 서비스에 대 한 실행 중인 플랫폼을 제공 합니다. 그러나, 여러 컨테이너를 시작 하 고, 해당 컨테이너에 캡슐화 하 고 다음 컨테이너 배포를 단순화 하기 위해 뿐만 아니라 운영 위험을 줄일 수 필요에 따라 함께 작동 하도록 일부 스크립트를 결합 하 여 이러한 복잡 한 작업을 수행할 수 있습니다.
앞에서 설명한 과정에 따라 서비스 플랫폼을 구축 하려는 경우 있을 수 있습니다 오류를 많이 발생 하기 쉬운 지역, 전체 준비 과정 또한 매우 전문 지식 필요, 작업의 중복을 많이 있을 수 있습니다. 따라서, 우리가 먼저 정식 방식에서 핵심 컨테이너 구성 요소를 구현 하 고 공공 레지스트리 서비스에 추가할 수 있습니다. 이 다른 사용자가 레지스트리 서비스를 통해 언제 든 지 필요한 용기를 얻을 수 있으며 높은-품질 구성 요소와 컨테이너 생태계 구축.
오랜 시간, 컨테이너 기술의 가장 중요 한 가치 경량, 일관 된 포맷을 제공 하는 다른 호스트에서 서비스를 실행 하기 위한 것입니다. 예를 들어 서비스를 오늘, 작성 하는 경우 당신은 미리 정의 된 인프라를 사용 하 여 가상화, 또는 사용 공유 또는 독자적인 클라우드 서비스 플랫폼 직접, 그리고 거기에서 선택할 수 많은 PAAs 공급자 후에 벌 거 벗은 금속 서버에 연결 하 고 좋습니다. 그러나, 다른 서비스 플랫폼에서 실행 하 여 서비스를 활성화 하면 다양 한 방법으로 패키지 서비스! 그리고 컨테이너 포맷에서 작업을 표준화 하는 경우 공급자 이러한 다른 컴퓨팅 모델의 사용자가 쉽게 작업을 마이그레이션할 수 있도록 독특한 배달 경험을 가진 사용자를 제공할 수 있고 사용자가 단일 플랫폼 공급자에 제한 되 고 피하기 위해 저렴 하 고 빠른 플랫폼에서 작업을 배포의 옵션.
독 노동자
웹, 특히 여기에 상세한 소개 문서 수 여기와 여기, 약 있습니다 어떻게 컨테이너 기술 및 독 노동자 관련 기술을 구현할 수 있다. 이 문서는 독 노동자는 "훌륭한 솔루션", 즉, 거기 되지 않을 수 있습니다 그것에 맞게 다른 솔루션 말을 충분.
컨테이너 기술 향상 리소스 컨트롤을 매우 실용적인의 세분성 하지만 수천 함께 실행 하는 서버를 필요로 하는 서비스에 대 한 간단한 컨테이너 기술을 증가 하지 않는다 실질적으로 어떤 작업의 효율성. 오늘날의 독 노동자만 그렇게 우리는 일련의 질문을 요청할 수 있습니다 단일 컴퓨터에서 작동 하도록 설계 되었습니다: 어떻게이 컨테이너에서 실행 하는 작업 및 컨테이너는 클러스터에서 실행 해야 할당 하 고 조정, 그리고 어떻게 그들이 자원의 소비에 따라 관리할 수? 그들은 다중 소유 네트워크 환경에서 어떻게 실행 합니까? 그들의 보안은 어떻게 보장 될 수 있다?
아마도 관점에서 시스템 디자인의, 우리는 본질적인 질문을 요청할 수 있습니다: 우리는 순간 오른쪽 리소스 추상화에 대 한 이야기는? 그들은 지정 된 컴퓨터에 지정 된 컨테이너에 관심이 없는, 그들은 정말 그들의 서비스를 시작, 생산 가치, 모니터링 하 고 유지 하기 쉬운, 그들은 모든 사소한 세부 사항을 알고 싶지 않아, 전달 했습니다 개발자와 기업 스폰서의 대부분 (적어도 그들은 하 고 싶지), 예를 들어 컴퓨터에 지정 된 컨테이너 뭐 지정 합니다.
Kubernetes
Google 제품의 일정 한 반복에 대 한 문제 해결: 우리 클러스터, 네트워크 및 명명 시스템을 관리 하는 데 사용할 수 있는 관리 시스템을 구축 했습니다. 이 관리 시스템의 첫 번째 버전 Brog, 불리고 그것의 후속 버전 오메가 라고. 이 관리 시스템으로 우리 구글의 대규모 클러스터 리소스에 컨테이너 기술을 사용할 수 있습니다. 우리는 지금 초당 약 7000 컨테이너를 시작 하 고 일주일 이상 2 십억 컨테이너 될 수 있습니다. 컨테이너 기술 및 기술 축적에 Google의 경험을 사용 하 여, 우리는 kubernetes (때로는 포럼에 k8s로 약식) 내장.
Kubernetes는 개발자와 관리자는 행동에 초점을 수 있는 다른 관점에서 자원의 추상화와 그냥 단일 구성 요소 또는 기본 리소스에 초점 보다는 오히려 서비스의 성능.
그래서 Kubernetes 클러스터에는 기능에 대 한 단일 컨테이너 무엇입니까? 그것은 단지 컨테이너-레벨 제어 보다는 오히려 서비스 수준 제어에 초점을 맞추고, Kubernetes 전체 서비스를 관리 하는 "정통한" 방법을 제공 합니다. Kubernete 솔루션에서 서비스 자체의 확장도, 자체 진단를 쉽게 확대 됩니다. 예를 들어 Google, 사용 하 여 기계 학습 기술을 실행 하는 각 서비스의 현재 상태에서 가장 효율적인 되도록.
경우 단일 컨테이너 개발자 배포의 복잡성을 줄일 수 있습니다, kubernetes 팀 개발 과정에서 함께 작업의 복잡성을 최소화할 수 있습니다. Kubernets는 컨테이너에서 서비스를 결합 하는 서비스가 올바르게 작동 되도록 지정 된 규칙에 따라 배포 팀을 수 있습니다. 고립의 부족 때문에 전통적인 방법으로, 서비스 또는 다양 한 서비스의 부분, 서로 방해 하기 쉽습니다 하지만 kubernetes를 통해 이러한 모순 시스템의 관점에서 Google에서이 향상 된 공동 작업을 사용 하 여 피할 수 있습니다, 그리고 개발자의 생산성을 향상 시킬 수 있습니다, 서비스의 가용성은 또한 더 강화 배포 큰 클러스터에 보다 신속 하 게 하.
그러나, 우리의 기술 개발의 초기 단계에서 아직도 이다. 현재, Kubernetes는 많은 고객 및 회사의 잘 알려진 팀, 레드햇, vm 웨어, coreos, 중간권 및 등등을 포함 하 여 채택 되었다. 이 회사는 kubernete 규모의 배포를 통해 컨테이너 기술의 상업적 가치를 추출 하는 그들의 고객을 도와주 고 싶어.
컨테이너 엔진
엔진 컨테이너 구글 Google의 클라우드 플랫폼 서비스 "컨테이너"의 아이디어를 소개 했다. Kubernetes 기술에 따라, 신속 하 게 빌드 및 컨테이너를 실행 하는 방법으로 개발자를 제공 하는 컨테이너 엔진 고 컨테이너 엔진 수 또한 배포, 관리 및 설정된 경계에 컨테이너를 확장. 다음 문서에서는 컨테이너 엔진을 더 소개 합니다.
배포 옵션
우리 색인화 기술 전산 모델의 진화의 시작 되었다 Google는이 기술 혁명에 무거운 역할 볼 수 있습니다. 독자 접촉 컨테이너 컨테이너는 하는 방법에 대 한 자세한을 시작으로 실제 서비스 배포에서 배포는 다음과 같은 방법으로 조사를 최고의 작품 중 하나를 선택:
관리 되는 클러스터를 실행 하거나 컨테이너의 수십을 시작 하려는 경우 Google 컨테이너 엔진을 사용 하 여 그것을 시도. 공유 인프라에 또는 자신의 시스템에 자신의 클러스터를 구축 하려는 경우에 그것을 조작 하 kubernetes를 사용할 수 있습니다. 에 이미 관리 되는 인프라, Google 응용 프로그램 엔진을 사용 하 여 또는 Vm을 관리 하는 시도에 컨테이너를 실행 합니다.