IBM Cloud Kubernetes

Jeongmin Yeo (Ethan)·2020년 11월 20일
3

IBM C:LOUDERs

목록 보기
2/5
post-thumbnail

IBM Cloud Kubernetes Service에서 사용되고 있는 Kubernetes에 대해서 알아보겠습니다.

https://www.ibm.com/cloud/learn/kubernetes

학슬할 내용은 다음과 같습니다.

  • What is Kubernetes?
  • What are containers?
  • Container orchestration with Kubernetes
  • Kubernetes architecture
  • Istio service mesh
  • Knative and serverless computing
  • Kubernetes tutorials
  • Kubernetes and IBM Cloud

1. What is Kubernetes?

Kubernetes는 k8s 또는 kube 라고 많이 불립니다. Kubernetess는 컨테이너 형 애플리케이션을 스케쥴링, 자동 배포 및 관리해주는 orchestration platform 입니다.

Kubernetes는 VM과 어깨를 나란히 하는 범용 컴퓨팅 플랫폼과 생태계로 성장하고 있습니다. Kubernetes를 통해 클라우드 네이티브 에플리케이션 개발을 할 때 여러 인프라 및 운영 작업을 할 떄 발생하는 이슈들을 해결해 개발자들이 코딩에 집중할 수 있게 해줍니다.

자세한 내용은 다음 영상을 통해 확인할 수 있습니다.

https://www.youtube.com/watch?v=aSrqRSk43lY&t=229s

Glossary

  • Kubenretes Master

    • Kubenetes 아키텍처는 서버와 클라이언트 구조처럼 컨테이너를 관리하는 에이전트(Master)가 있고 중앙에서 API를 통해 원격으로 관리하는 형태입니다.

    • Kubernetes는 중앙(Master)에서 상태 저장소를 두고 각 서버의 노드(Kubelet)와 통신하는 구조입니다.

    • Master는 다양한 모듈의 확장성을 고려해 기능별로 쪼개져 있다고 합니다. 관리자만 접속할 수 있도록 해야하고 Master가 죽으면 클러스터를 관리할 수 없기 때문에 보통 3대를 구성한다고 합니다. AWS EKS 같은 경우 마스터를 AWS에서 자체 관리하여 안정성을 높였고(마스터에 접속 불가) 개발 환경이나 소규모 환경에선 마스터와 노드를 분리하지 않고 같은 서버에 구성하기도 합니다.

  • Kubectl

    • API 서버는 보통 json 또는 protobuf 형식을 이용한 http 통신을 지원합니다. 이 방식을 그대로 쓰면 불편하므로 보통 kubectl이라는 명령행 도구를 사용합니다
  • Kubernetes API Server

    • API 서버는 Kubernetes API를 노출하는 Control Plane Component 입니다.

      • Control Plane이란 컨테이너의 라이프 사이클을 정의하고 관리하는 컨테이너 오케스트레이션 레이어를 말합니다.
    • API 서버는 Kubernetes Control Plane의 프론트 엔드라고 생각하시면 됩니다.

  • pod

    • pod는 클러스터에서 실행중인 컨테이너 집합을 말합니다. 하나 이상의 컨테이너 그룹을 말합니다.

    • pod는 kubernetes에서 생성하고 관리할 수 있는 가장 작은 단위의 컴퓨팅 단위입니다.

    • 이 그룹은 스토로지/네트워크를 공유하고 해당 컨테이너를 구동하는 명세서를 갖고 있습니다.

  • Kubelet

    • 클러스터의 각 노드(Worker Machine)에서 실행되는 에이전트를 말합니다.

    • Kublet은 pod에서 컨테이너가 확실하게 동작하도록 해줍니다.

    • Kublete은 Kuberenetes를 통해 생성되지 않는 컨테이너는 관리하지 않습니다.

  • Kubernetes Object

    • Kubernetes Object는 클러스터의 상태를 나타내기 위해서 사용되고 Kubernetes 시스템에서 영속성을 가지는 객체입니다.

    • 주로 다음과 같은 역할을 합니다.

      • 어떤 컨테이너화 된 애플리케이션이 동작 중인지

      • 그 애플리케이션이 사용할 수 있는 리소스

      • 그 어플리케이션이 어떻게 재구동되는지의 정책

      • 쿠버네티스 API를 통해서 동작 시킬 수 있습니다.

    • 쿠버네티스 오브젝트에는 두개의 오브젝트 필드를 필요로 합니다. Spec, Status

      • Spec
        • Spec은 오브젝트를 생성할 때 원하는 상태를 기술하는 것입니다.
      • Status
        • Status는 쿠버네티스 시스템에 관리되고 있는 오브젝트 상태를 말합니다.
  • Kubernetes Cluster

    • 컨테이너를 실행 중이라면 클러스터를 실행 중인겁니다. 클러스터는 컨테이너화된 애플리케이션을 실행하기 위한 일종의 노드 머신입니다.

    • 기본적으로 클러스터에는 작업자 노드(Worker Node)와 마스터 노드(Master Node)를 포함합니다.

  • etcd

    • 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 키-값 저장소입니다.

    • 클러스터의 모든 설정, 상태 데이터는 여기 저장되고 나머지 모듈은 stateless하게 동작하기 때문에 etcd만 잘 백업해두면 언제든지 클러스터를 복구할 수 있습니다

    • etcd는 오직 API 서버와 통신하고 다른 모듈은 API 서버를 거쳐 etcd 데이터에 접근합니다


2. What are containers?

Container란 애플리케이션 코드가 데스크톱, 기존 IT 또는 클라우드의 어디에서나 실행될 수 있도록 라이브러리 및 종속성과 함께 공통적으로 패키징되는 소프트웨어의 실행 가능한 단위입니다.

Container는 프로세스를 분리하고 해당 프로세스가 액세스할 수 있는 CPU, 메모리, 디스크등의 리소스를 제어하여 여러 애플리케이션이 OS를 공유할 수 있도록 하는 운영 체제(OS) 가상화의 형태를 이용합니다.

Containers vs. virtual machines vs. traditional infrastructure

기존 인프라에서는 애플리케이션이 물리적 서버에서 실행되며 모든 리소스를 확보해서 사용됩니다. 이를 통해 단일 서버에서 여러 애플리케이션을 실행할 수 있으며 애플리케이션당 하나의 서버를 전용하지 않을 수 있으므로 리소스를 낭비하고 확장하지 않을 수 있습니다.

가상 머신(VM)은 실제 컴퓨터 하드웨어에서 추출된 서버로서, 하나의 물리적 서버 또는 둘 이상의 물리적 서버에 걸쳐 있는 단일 VM에서 여러 VM을 실행할 수 있습니다. 각 VM은 자체 OS 인스턴스를 실행하며, 각 애플리케이션을 자체 VM에서 격리할 수 있으므로 동일한 기본 물리적 하드웨어에서 실행되는 애플리케이션이 서로 영향을 줄 가능성을 줄일 수 있다는 장점이 있습니다.

VM은 리소스를 더 잘 활용하고 기존 인프라보다 확장이 훨씬 쉽고 비용 효율적입니다. 그리고 더 이상 애플리케이션을 실행할 필요가 없을 때 VM을 해체할 수 있는 일회용으로 사용이 가능합니다.

컨테이너는 이것보다 추상화가 더 높은 수준입니다. 특히, 기본 가상화 하드웨어를 공유할 뿐만 아니라 기본 가상화된 OS 커널도 공유하고 컨테이너는 VM에 대해 동일한 the same isolation, scalability, and disposability 등을 제공하지만, 컨테이너가 자체 OS 인스턴스의 페이로드를 운반하지 않기 때문에 VM에 비해 무게가볍다는 특징이 있습니다.

리소스 효율성이 향상되어 더 적은 수의 시스템(가상 및 물리적)에서 더 많은 애플리케이션을 실행할 수 있으며 OS 인스턴스는 데스크톱, 데이터 센터 및 클라우드 환경에서 더 쉽게 portable 할 수 있습니다.

What is Docker?

Docker는 Linux® 컨테이너를 만들고 실행하는 데 가장 유명한 Tool입니다.

Docker는 Linux 커널 프로세스의 보다 세분화된 가상화를 가능하게 하고 기능을 추가하여 개발자가 컨테이너를 쉽게 구축, 배포, 관리 및 보호할 수 있도록 하였다는 특징이 있습니다.


3. Container orchestration with Kubernetes

컨테이너가 급증함에 따라 오늘날에는 컨테이너 배치, 네트워킹, 확장성 및 가용성을 스케줄링하고 자동화하는 데 운영팀이 필요했고 그래서 컨테이너 오케스트레이션이 탄생했습니다.

자세한 내용은 다음 영상을 통해 확인할 수 있습니다.

https://www.youtube.com/watch?v=kBF6Bvth0zw&t=333s

What does Kubernetes do?

Kubernetes는 컨테이너 관련 작업을 스케줄링하고 자동화합니다.

  • Deployment

    • 지정된 수의 컨테이너를 호스트에 배포하고 desired state로 유지할 수 있습니다.
  • Rollouts

    • Rollouts은 배포에 대한 변경입니다. Kubernetes를 사용해 배포에 대한 변경을 시작, 일시 중지, 재개 또는 롤백할 수 있습니다.
  • Service discovery

    • Kubernetes는 DNS 이름이나 IP 주소를 사용하여 인터넷이나 다른 Containers에 Conatiner를 자동으로 노출시킬 수 있습니다.
  • Storage provisioning

    • 필요에 따라 컨테이너를 영구적으로 로컬 또는 클라우드 스토리지에 마운트하도록 Kubernetes를 설정할 수 있습니다.
  • Load balancing and scaling

    • 컨테이너에 대한 트래픽이 급증할 때, Kubernetes는 안정성을 유지하기 위해 네트워크를 통해 부하를 분산시킬 수 있습니다.
  • Self-healing for high availability

    • 컨테이너가 고장 나면, Kubernetes는 그것을 자동으로 다시 시작하거나 교체할 수 있습니다.

4. Kubernetes architecture

Kubernetes 아키텍처의 주요 구성요소는 다음과 같습니다.

Clusters and nodes (compute) & Pods and deployments (software)

  • 각각의 구성요소는 위에 설명되어 있습니다.

5. Istio service mesh

Kubernetes pod를 배치하고 확장할 수 있지만, pod 간의 라우팅을 관리하거나 자동화할 수 없으며, 이러한 연결을 모니터링, 보안 또는 디버그할 수 있는 도구를 제공하지 않습니다.

클러스터에 있는 컨테이너의 수가 증가함에 따라, 이들 사이의 가능한 연결 경로의 수는 기하급수적으로 증가합니다(예를 들어, 두 컨테이너는 두 개의 연결을 가지고 있지만 10개의 포드는 90개를 가지고 있어 구성 및 관리가 힘든 문제가 발생할 수 있습니다).

Istio는 각 Kubernetes 클러스터에 기본적으로 프로그래머와 관리자에게는 보이지 않는 sidecar Container를 추가하여 다른 컨테이너 간의 상호작용을 구성, 모니터링 및 관리할 수 있습니다.

Istio를 사용하면 각 연결을 개별적으로 구성할 필요가 없도록 컨테이너 간의 연결을 구성하는 정책을 설정할 수 있습니다. 이렇게 하면 컨테이너 간의 연결을 더 쉽게 디버깅할 수 있습니다.


6. Knative and serverless computing

Knative는 Kubernetes의 Top에 위치한 오픈 소스 플랫폼으로 클라우드 네이티브 개발에 두 가지 중요한 이점을 제공합니다.

6-1. Knative provides an easy onramp to serverless computing

Serverless Computing은 클라우드 네이티브 애플리케이션을 보다 효율적이고 비용 효율적으로 만드는 비교적 새로운 코드 구현 방식입니다.

요청을 기다리는 동안 유효한 상태로 있는 코드를 지속적인 인스턴스로 배치하는 대신, Serverless는 필요에 따라 코드를 불러올 수 있다(scaling it up or down as demand fluctuates). 그리고 사용하지 않을 때는 비용을 내지 않습니다. Serverless는 컴퓨팅 용량과 전력 낭비를 방지하고 코드의 실제 실행 시에만 비용을 지불하기 때문에 비용을 절감합니다.

6-2. Knative simplifies container development and orchestration

개발자는 containerizing code 하려면 많은 반복 단계가 필요하며 컨테이너를 조정하려면 많은 구성과 scripting(such as generating configuration files, installing dependencies, managing logging and tracing, and writing continuous integration/continuous deployment (CI/CD) scripts)이 필요합니다.

Knative는 다음과 같은 세 가지 구성 요소를 통해 작업을 자동화함으로써 이러한 작업을 보다 쉽게 수행할 수 있도록 도와줍니다.

  • Build

    • Knative’s Build component는 자동적으로 소스 코드를 Cloud native container나 function으로 자동 변환합니다.

    • 구체적으로 리포지토리에서 코드를 뽑아 필요한 종속성을 설치하고 컨테이너 이미지를 구축해 다른 개발자가 사용할 수 있도록 컨테이너 레지스트리에 넣습니다. 개발자들은 Knative가 찾을 수 있도록 이들 구성요소의 위치를 지정해야 하지만, 일단 그렇게 되면 Knative는 빌드를 자동화합니다.

  • Serve

    • The Serve component는 컨테이너를 확장 가능한 서비스로 실행하며, 컨테이너 인스턴스를 최대 수천 개까지 확장하거나 0개로 축소할 수 있고 또한 Serve에는 두 가지 매우 유용한 기능이 있습니다.

      • Configuration: 컨테이너를 프로덕션에 푸시할 때마다 컨테이너 버전(스냅샷이라고 함)을 저장하고 이러한 버전을 동시에 실행할 수 있습니다.

      • Service routing: which lets you direct different amounts of traffic to these versions. You can use these features together to gradually phase a container rollout or to stage a canary test of a containerized application before putting it into global production.

  • Event

    • Event는 지정된 Event가 컨테이너 기반 서비스 또는 기능을 트리거할 수 있도록 해줍니다. 이것은 특히 Knative’s serverless에 필수적입니다.

7. Kubernetes tutorials


8. Kubernetes and IBM Cloud

IBM Cloud® Kubernetes Service는 컴퓨팅 호스트 클러스터에서 컨테이너형 애플리케이션의 배포, 운영, 확장 및 모니터링을 자동화하는 동시에 IBM 고유의 기능을 추가합니다. 애플리케이션의 신속한 전달이 가능해지며 블록체인과 IBM 왓슨® 같은 고급 서비스에 바인딩할 수 있다는 특징이 있습니다.

a managed Kubernetes service가 클라우드 전환을 지원하는 방법을 보려면 Advantages of Managed Kubernetes 이 영상을 추천드립니다.

https://www.youtube.com/watch?v=1Br4m0_8YDQ

IBM Cloud의 Red Hat® OpenShift®는 IBM Cloud 플랫폼에서 완벽하게 관리되는 OpenShift 클러스터를 제공하는 종합 서비스입니다. (OpenShift는 Red Hat Enterprise Linux에서 실행되는 엔터프라이즈 Kubernetes 플랫폼).

OpenShift에 대해서 자세히 알고 싶으시면 이 영상을 추천해드립니다.

https://www.youtube.com/watch?v=hdwDMsDF9J8

profile
좋은 습관을 가지고 싶은 평범한 개발자입니다.

0개의 댓글