Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Hi. I'm Brendan, and I'm here to talk to you about how Kubernetes works.

Fundamentally, at its base, Kubernetes is about taking a bunch of virtual machines or physical machines for that matter, although these days in the Cloud, I mostly think about virtual machines and transforming them into a unified API surface that a developer can interact with, with containers and orchestrate their application without really thinking about the machines that lie below.

So, this is the Kubernetes API surface area.

We abbreviate Kubernetes as k8s sometimes, it's shorter and easier to write.

The eighth stands for the eight letters in between the K at the beginning and the S at the end.

The Kubernetes API presents a bunch of different pieces.

The core ones are a pod which is a collection of containers that are co-located on a single machine.

Service, which is a load balancer that can bring traffic down to a collection of pods.

Then, deployment, which under the hood uses a replica set which, as the name suggests, is used for replicating a container multiple times for availability or scale.

So, this API that is presented is a JSON based API.

So, if you have a user here who's interacting with Kubernetes, they use the kube control command line tool generally, and other tools have been written to interact with the API.

That makes an HTTP call to the JSON to the Kubernetes API server.

So, let's take a look at how we put this together to actually build a real application.

Well, let's suppose I have a simple web app, it's going to be a container image, so I have my image over here.

I want to create pods to actually run that image and to run my application on the Kubernetes API.

To do that, I'm going to create a deployment, and so I'm going to say, "Hey, I want to create a deployment," it's represented generally as a YAML file.

I'm going to create that, deploy.yaml.

I'm going to say, "Kube control apply," and I'm going to give it that file, and that's going to send it through to the API server and the end result is that it will create let's say if I said, "Three replicas in here," it's going to create three pods in the Kubernetes API which will result in the scheduler placing one, two, three containers on the virtual machines that actually act as the host machines for the service.

But obviously, this is only the beginning and there is this deployment object over here.

It is managing and ensuring that there are three of these replicas.

This is really only the beginning.

I have my application up and running but I need to actually expose it to someone to be able to consume it.

To do that, I create a service.

The service is a load balancer that knows how to take traffic either from the outside world or from another service inside the cluster, and load balance that traffic down to those containers.

Now, if I want, I can actually say that this service is attached to an external load balancer.

If it's attached to an external load balancer, then Kubernetes is actually responsible for going and talking to the Cloud and requesting that load balancer come into existence so that I get some IP address.

That IP address is mapped to the Cloud load balancer.

It is then mapped to the service and all of the traffic.

So, that way, if I have an end-user accessing it, they can talk to that external IP address, traffic will flow through the Cloud load balancer to my service, the load balanced out to all my containers.

In this way, if I go to the deployment and I actually change this from say three to four, the declarative nature of Kubernetes, the self-healing nature Kubernetes will say, "You only have three replicas here, I need a fourth." Traffic flows from the load balancer out to this fourth replica.

My end-user doesn't even notice that I've scaled up the application.

So, that gives you a really good illustration of why Kubernetes is great for deploying reliable applications, scalable applications without affecting end-users.

In fact, you can actually do a rolling deployment where you move from version one of your container to a version two of your container in place without your end-user noticing at all.

We'll talk more about how that works in the next episode.


Info

안녕하세요. 저는 Brendan이고 Kubernetes의 작동 방식에 대해 이야기하기 위해 왔습니다.

기본적으로 Kubernetes는 그 문제를 해결하기 위해 여러 가상 머신 또는 물리적 머신을 사용하는 것입니다. 요즘은 클라우드에서 주로 가상 머신을 생각하고 개발자가 상호 작용할 수있는 통합 API 표면으로 변환합니다. 아래에있는 기계에 대해 실제로 생각하지 않고 컨테이너로 애플리케이션을 조정합니다.

이것이 바로 Kubernetes API 노출 영역입니다.

때때로 Kubernetes를 k8s로 줄여서 작성하는 것이 더 짧고 쉽습니다.

여덟 번째는 시작의 K와 끝의 S 사이에있는 8 개의 문자를 나타냅니다.

Kubernetes API는 다양한 부분을 제공합니다.

핵심 요소는 단일 시스템에 함께 배치 된 컨테이너 모음 인 포드입니다.

서비스-트래픽을 포드 모음으로 가져올 수있는로드 밸런서입니다.

그런 다음 이름에서 알 수 있듯이 가용성 또는 확장을 위해 컨테이너를 여러 번 복제하는 데 사용되는 복제 세트를 내부에서 사용하는 배포입니다.

따라서 제시된이 API는 JSON 기반 API입니다.

따라서 여기에 Kubernetes와 상호 작용하는 사용자가있는 경우 일반적으로 kube 제어 명령 줄 도구를 사용하고 다른 도구는 API와 상호 작용하도록 작성되었습니다.

그러면 Kubernetes API 서버에 대한 JSON에 대한 HTTP 호출이 생성됩니다.

자, 실제 애플리케이션을 구축하기 위해 이것을 어떻게 조합하는지 살펴 보겠습니다.

음, 간단한 웹 앱이 있다고 가정 해 보겠습니다. 컨테이너 이미지가 될 것이므로 여기에 제 이미지가 있습니다.

실제로 해당 이미지를 실행하고 Kubernetes API에서 내 애플리케이션을 실행하기 위해 포드를 만들고 싶습니다.

이를 위해 배포를 생성 할 것이므로 "Hey, I want to create a deployment"라고 말하고 일반적으로 YAML 파일로 표시됩니다.

deploy.yaml을 생성하겠습니다.

"Kube control apply"라고 말하고 그 파일을 제공 할 것입니다. 그러면 API 서버로 보낼 것입니다. 최종 결과는 이것이 생성된다는 것입니다. "여기에 복제본 3 개"는 Kubernetes API에 3 개의 포드를 생성하여 스케줄러가 실제로 서비스의 호스트 머신 역할을하는 가상 머신에 1 개, 2 개, 3 개의 컨테이너를 배치합니다.

하지만 분명히 이것은 시작일 뿐이며 여기에 배포 객체가 있습니다.

이러한 복제본 중 세 개가 있는지 관리하고 확인합니다.

이것은 실제로 시작에 불과합니다.

내 응용 프로그램을 실행하고 있지만 실제로 사용할 수 있도록 누군가에게 노출해야합니다.

이를 위해 서비스를 만듭니다.

이 서비스는 외부 세계 또는 클러스터 내부의 다른 서비스에서 트래픽을 가져오고 해당 트래픽을 해당 컨테이너로 부하 분산하는 방법을 알고있는로드 밸런서입니다.

이제 원하는 경우 실제로이 서비스가 외부로드 밸런서에 연결되어 있다고 말할 수 있습니다.

외부로드 밸런서에 연결되어있는 경우 Kubernetes는 실제로 클라우드와 통신하고 해당로드 밸런서가 존재하도록 요청하여 IP 주소를 얻을 수 있도록 요청합니다.

해당 IP 주소는 클라우드로드 밸런서에 매핑됩니다.

그런 다음 서비스 및 모든 트래픽에 매핑됩니다.

따라서 최종 사용자가 액세스하는 경우 외부 IP 주소와 통신 할 수 있으며 트래픽은 클라우드로드 밸런서를 통해 내 서비스로 흐르고로드는 내 모든 컨테이너로 분산됩니다.

이런 식으로 배포로 이동하여 실제로 이것을 3 개에서 4 개로 변경하면 Kubernetes의 선언적 특성,자가 치유 특성 Kubernetes는 "여기에는 3 개의 복제본 만 있고 4 번째가 필요합니다."라고 말합니다. 트래픽은로드 밸런서에서이 네 번째 복제본으로 흐릅니다.

내 최종 사용자는 내가 애플리케이션을 확장했다는 사실조차 알지 못합니다.

따라서 Kubernetes가 최종 사용자에게 영향을주지 않고 안정적인 애플리케이션, 확장 가능한 애플리케이션을 배포하는 데 왜 훌륭한 지 잘 보여줍니다.

실제로 최종 사용자가 전혀 알지 못하는 상태에서 컨테이너의 버전 1에서 컨테이너의 버전 2로 이동하는 롤링 배포를 실제로 수행 할 수 있습니다.

다음 에피소드에서 어떻게 작동하는지 더 자세히 이야기하겠습니다.