Hi.

I'm Brendan Burns from Microsoft Azure and I'm going to talk about how volumes and storage work in Kubernetes.

Obviously in Kubernetes, the base unit is a pod.

Within that pod can be one or more containers.

But if you want to start talking about storage, you're starting to talk about volumes.

A volume is a separate object defined within the context of the Kubernetes pod.

The volume is associated with the pod but then mounted into a container at a particular path.

It can actually be mounted into one of the other containers in that pod at a different path or you might choose not to mount it into that container at all.

In Kubernetes, there's a really wide variety of different volume implementations, from the simplest volume which is a temporary volume that's associated with the pod.

It's called empty Dir, where the lifespan of this volume is associated with the pod itself.

The directory itself is simply present on the machine where the pod is located.

So really just for caching and temporary information maybe coordination between different containers in the application.

All the way through cloud mounted directories that are persistent across the lifespan of multiple pods possibly even multiple clusters.

So how does all that fit together? Well, in Kubernetes beyond empty Dir and host path and other volume types that are associated with the cluster itself, there's this idea of a persistent volume.

A persistent volume is another resource type within Kubernetes, and a persistent volume can be mapped to something like Azure Disk or NFS, ISCSI or any number of other persistent volume types.

The important distinction here is that these disks live longer than the lifespan of the pod.

When the pod dies if it changes machines, these disks will follow it around.

So for example, if I have this is machine one, this is machine two, and I have a pod running on that machine.

It has a volume that is attached to that pod.

If this machine happens to fail and this pod moves onto machine two the volume will likewise move onto machine two.

But when you combine this persistent volume with replication, things get a little bit complicated because the replica spec in a replica set or in a deployment has to have information about the volume.

But obviously, each volume is different.

Each volume is independent, so you can't define all of the volumes in the context of a replica set.

So in order to do that Kubernetes introduces this idea of a persistent volume claim.

The idea behind a persistent volume claim is that it is responsible for saying, "Hey you know what? I want aspirationally something like 10 gigabytes of disk." It's not a literal disk that is backed.

It's more of an assertion of a need for a disk.

This way I can say I want three pods.

They all have a persistent volume claim that requests 10 gigabytes of disk and when Kubernetes sees that, it's going to create those pods obviously.

But it's also going to create three independent persistent volumes and mount those disks into the container.

Now the good thing about this is not only does this provide for this replication, but also the persistent volume claim and persistent volume become a abstraction between you and a cloud-based storage system or really between you and any storage system.

So this persistent volume claim on different clusters in one cluster could be satisfied perhaps by Azure Disk.

In another cluster, it might be satisfied by ISCSI.

In another cluster, it might even be satisfied by another public cloud provider's disk product.

So you can write a template that will operate across clouds even across public cloud and private cloud or even onto an on-prem environment where maybe this is being provided by network attached storage.

It's a real way that you can use the same template across a wide variety of hybrid environments.

Again, when you create a persistent volume claim much like the rest of Kubernetes, you're declaring what you need rather than the specifics of how you implement it and you're allowing the clusters automation to take responsibility for providing the disks to you.

Hopefully, that gives you a little bit of an illustration of how persistent volumes and storage work inside of Kubernetes.


안녕하세요.

저는 Microsoft Azure의 Brendan Burns이고 Kubernetes에서 볼륨과 스토리지가 작동하는 방식에 대해 이야기하려고합니다.

분명히 Kubernetes에서 기본 단위는 포드입니다.

해당 포드 내에 하나 이상의 컨테이너가있을 수 있습니다.

그러나 스토리지에 대해 이야기하고 싶다면 볼륨에 대해 이야기하기 시작합니다.

볼륨은 Kubernetes 포드의 컨텍스트 내에 정의 된 별도의 개체입니다.

볼륨은 포드와 연결되어 있지만 특정 경로의 컨테이너에 마운트됩니다.

실제로 다른 경로에있는 해당 포드의 다른 컨테이너 중 하나에 마운트하거나 해당 컨테이너에 마운트하지 않도록 선택할 수 있습니다.

Kubernetes에는 포드와 연결된 임시 볼륨 인 가장 단순한 볼륨부터 매우 다양한 볼륨 구현이 있습니다.

이 볼륨의 수명이 포드 자체와 연결되는 빈 디렉터리라고합니다.

디렉토리 자체는 포드가있는 시스템에 있습니다.

따라서 실제로 캐싱 및 임시 정보를 위해 응용 프로그램의 서로 다른 컨테이너 간의 조정이 가능합니다.

여러 팟 (Pod)의 수명 동안 지속되는 클라우드 마운트 디렉토리를 통해 가능합니다.

그렇다면이 모든 것이 어떻게 결합됩니까? 음, Kubernetes에는 비어있는 Dir 및 호스트 경로 및 클러스터 자체와 연관된 기타 볼륨 유형을 넘어서는 영구 볼륨에 대한 아이디어가 있습니다.

영구 볼륨은 Kubernetes 내의 또 다른 리소스 유형이며 영구 볼륨은 Azure 디스크 또는 NFS, ISCSI 또는 기타 영구 볼륨 유형과 같은 항목에 매핑 될 수 있습니다.

여기서 중요한 차이점은 이러한 디스크가 포드의 수명보다 오래 지속된다는 것입니다.

포드가 시스템을 변경하면 죽을 때 이러한 디스크가이를 따라갑니다.

예를 들어, 이것이 기계 1이고 기계 2이고 그 기계에서 실행중인 포드가 있습니다.

해당 포드에 연결된 볼륨이 있습니다.

이 머신이 실패하고이 포드가 머신 2로 이동하면 볼륨도 마찬가지로 머신 2로 이동합니다.

그러나이 영구 볼륨을 복제와 결합하면 복제 세트 또는 배포의 복제본 사양에 볼륨에 대한 정보가 있어야하기 때문에 상황이 약간 복잡해집니다.

그러나 분명히 각 볼륨은 다릅니다.

각 볼륨은 독립적이므로 복제 세트의 컨텍스트에서 모든 볼륨을 정의 할 수 없습니다.

이를 위해 Kubernetes는 영구 볼륨 클레임이라는 아이디어를 도입합니다.

영구 볼륨 클레임의이면에있는 아이디어는 "이봐 그거 알아? 10 기가 바이트 디스크와 같은 것을 원한다"고 말하는 책임이 있다는 것입니다. 지원되는 리터럴 디스크가 아닙니다.

디스크가 필요하다는 주장에 가깝습니다.

이렇게하면 3 개의 포드를 원한다고 말할 수 있습니다.

그들은 모두 10GB의 디스크를 요청하는 영구 볼륨 클레임을 가지고 있으며 Kubernetes가이를 인식하면 분명히 해당 포드를 생성 할 것입니다.

그러나 3 개의 독립적 인 영구 볼륨을 만들고 해당 디스크를 컨테이너에 마운트 할 것입니다.

이제 이것에 대한 좋은 점은 이것이이 복제를 제공 할뿐만 아니라 영구 볼륨 클레임과 영구 볼륨이 사용자와 클라우드 기반 스토리지 시스템 또는 실제로 사용자와 모든 스토리지 시스템 간의 추상화가된다는 것입니다.

따라서 한 클러스터의 여러 클러스터에 대한이 영구 볼륨 클레임은 아마도 Azure Disk로 충족 될 수 있습니다.

다른 클러스터에서는 ISCSI에 의해 충족 될 수 있습니다.

다른 클러스터에서는 다른 퍼블릭 클라우드 제공 업체의 디스크 제품으로도 만족할 수 있습니다.

따라서 퍼블릭 클라우드 및 프라이빗 클라우드 또는 네트워크 연결 스토리지에서 제공하는 온 프레미스 환경에서도 클라우드에서 작동하는 템플릿을 작성할 수 있습니다.

다양한 하이브리드 환경에서 동일한 템플릿을 사용할 수있는 진정한 방법입니다.

다시 말하지만, Kubernetes의 나머지 부분과 매우 유사한 영구 볼륨 클레임을 생성 할 때 구현 방법에 대한 세부 사항이 아니라 필요한 것을 선언하고 클러스터 자동화가 디스크 제공에 대한 책임을지게합니다.

바라건대, 이것이 Kubernetes 내에서 지속적 볼륨과 스토리지가 작동하는 방식에 대한 약간의 예시를 제공하기를 바랍니다.



  • No labels
Write a comment…