컨테이너 런타임

컨테이너 런타임 (Container Runtimes)

노드에서 컨테이너를 실행하려면 컨테이너 런타임을 설치해야 해요. Kubernetes 1.24부터 Docker Engine은 쿠버네티스의 컨테이너 런타임으로 더 이상 지원되지 않습니다. 쿠버네티스는 컨테이너 런타임 인터페이스(CRI, Container Runtime Interface)를 구현하는 런타임을 필요로 합니다.

출처: 문서

본문

설치 및 구성 사전 요구사항

포워딩 IPv4 및 iptables

노드가 브리지 네트워크에서 IPv4 패킷을 정상적으로 전달(forward)하도록 구성해야 합니다. iptables가 브리지 트래픽을 볼 수 있게 해야 합니다.

먼저 sysctl 구성이 net.ipv4.ip_forward를 1로 설정했는지 확인합니다.

# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system

kubeadm과 소스에서 설치한 쿠버네티스에서 일반적인 구성은 Linux 배포판에서 커널의 br_netfilter 모듈을 활성화하도록 요구하는 것입니다. DNS 및 인증서 요청과 같은 일부 사용 사례에서 올바르게 통과하도록 보장하려면 다음을 설정합니다:

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.conf.all.rp_filter         = 0
EOF

sudo sysctl --system

이 옵션들은 자동으로 설정되는 경우가 많습니다. 자세한 내용은 네트워크 플러그인 요구 사항을 참조하세요.

cgroup 드라이버

Linux에서 컨트롤 플레인(kubelet, kubelet이 관리하는 kube-proxy와 컨테이너 런타임)은 control group(cgroup)를 사용해 리소스 관리를 합니다.

systemd cgroup 드라이버

systemd cgroup 드라이버를 사용하면 cgroup 메모리 압박에 제대로 응답하고, 단일 cgroup 관리자가 있음을 보장합니다. systemd는 많은 리눅스 배포판의 기본 init 시스템이고, 위에서 사용한 것처럼 시스템이 systemd로 실행된다면 사용 가능한 드라이버입니다. systemd가 cgroup 계층을 소유하므로, kubelet과 컨테이너 런타임은 cgroupfs와 systemd를 동시에 사용할 수 없습니다. 단일 cgroup 관리자의 보장이 중요합니다.

podspec에서 컨테이너를 시작하는 방법을 결정할 때, 컨테이너 런타임에 systemd cgroup 드라이버를 설정하는 것이 권장됩니다. 고유한 cgroup 드라이버를 사용하는 런타임은 상대적으로 적습니다. 대부분은 cgroupfs입니다.

쿠버네티스는 kubelet과 컨테이너 런타임의 cgroup 드라이버가 일치해야 합니다.

CRI v1 및 이미지 형식 활성화

Kubernetes 1.26부터 컨테이너 런타임은 CRI(Container Runtime Interface) v1(현재 v1alpha2가 아님)을 구현할 수 있어야 합니다. 런타임이 CRI v1만 지원한다면, v1 API를 활성화하는 데 필요한 구성이 없습니다. Kubernetes가 기본적으로 그렇게 설정하고 v1.26부터 v1alpha2를 활성화하도록 요구되는 런타임은 kubelet이 그 API를 계속 사용하게 하는 CRIContainerRuntimeV1alpha2 feature gate를 켜야 합니다.

또한 런타임은 이미지 레이어의 컨테이너 이미지 형식 버전 v1을 지원해야 합니다.

cgroup v2

cgroup v2는 Linux의 차세대 cgroup API입니다. Kubernetes 1.25+는 cgroup v2를 안정적으로 지원합니다. cgroup v2는 실험적 기능으로 Fedora 및 Ubuntu 22.04+와 같은 리눅스 배포판의 iptables(또는 유사한) 옵션을 사용해 시스템에서 사용할 수 있습니다.

컨테이너 런타임 (Container runtimes)

containerd

이 섹션에는 containerd를 컨테이너 런타임으로 사용하는 방법에 대한 필수 단계가 포함되어 있습니다.

containerd 설치하려면 자체 문서의 지침을 따르세요. 다음 두 섹션 중 하나를 참조하세요: Getting started with containerd 또는 containerd installation. 그런 다음 containerd의 시스템d 또는 cgroupfs와 관련된 구성 단계를 계속하기 위해 아래로 돌아가세요.

/etc/containerd/config.toml:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

containerd가 OCI 이미지를 사용하려면 CRI 어댑터가 필요하며, 기본값 cri 플러그인을 비활성화할 수 있습니다.

CRI-O

이 섹션에는 CRI-O를 컨테이너 런타임으로 사용하는 방법에 대한 필수 단계가 포함되어 있습니다.

CRI-O를 설치하려면 CRI-O Installation Instructions를 따르세요.

Docker Engine

쿠버네티스는 더 이상 Docker Engine을 컨테이너 런타임으로 지원하지 않습니다. 마이그레이션 지침은 dockershimdockershim 마이그레이션을 참조하세요.

컨테이너에 대한 자세한 정보는 컨테이너 개념 문서를 참조하세요.

더 알아보기 (Learn more)