웹사이트 검색

Ubuntu 22.04에 CRI-O 컨테이너 런타임을 설치하는 방법


CRI-O는 Kubernetes용 Docker를 대체하는 경량 컨테이너 런타임입니다. Kubernetes CRI(컨테이너 런타임 인터페이스) 구현 및 OCI 런타임(개방형 컨테이너 이니셔티브) 준수. CRI-O를 사용하면 Kubernetes가 추가 도구나 코드 조정 없이 직접 컨테이너를 실행할 수 있습니다.

CRI-O는 Docker 이미지 형식을 포함한 여러 이미지 형식을 지원합니다. 또한 이미지 계층 관리, 오버레이 파일 시스템, 컨테이너 프로세스 수명 주기 관리, 컨테이너 모니터링 및 로깅과 같은 컨테이너 이미지 관리 기능을 제공하고 리소스 격리도 제공합니다.

이 튜토리얼은 Ubuntu 22.04 서버에 CRI-O Container Runtime을 설치하는 과정을 안내합니다. 여기에는 CRI-O로 CNI 플러그인을 설정하는 방법과 포드 및 컨테이너 관리를 위한 \cri-tools\의 기본 사용법도 포함됩니다.

전제 조건

시작하기 전에 다음 요구 사항이 있어야 합니다.

  • Ubuntu 22.04 서버 - 이 가이드에서는 호스트 이름이 \server-ubuntu\이고 서버 IP 주소가 \192.168.5.10\인 Ubuntu 서버를 사용합니다.
  • 루트/관리자 권한이 있는 루트가 아닌 사용자.

CRI-O 컨테이너 런타임 설치

CRI-O는 APT 명령을 통해 설치하거나 소스에서 CRI-O를 빌드하고 설치하는 등 다양한 방법으로 설치할 수 있습니다. 이 예에서는 타사 리포지토리를 통해 CRI-O Container Runtime을 설치합니다.

설치를 시작하기 전에 다음 명령을 실행하여 \$OS\ 및 \$CRIO_VERSION\ 환경 변수를 설정하십시오. 이 예에서는 Ubuntu 22.04용 CRI-O v1.24.0을 설치합니다.

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

이제 다음 명령을 실행하여 Ubuntu 22.04 서버용 CRI-O 리포지토리를 추가합니다.

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

아래 명령을 사용하여 CRI-O 리포지토리에 대한 GPG 키를 추가합니다.

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

이제 Ubuntu 리포지토리를 업데이트하고 패키지 인덱스를 새로 고칩니다. CRI-O 리포지토리가 패키지 색인 목록에 추가된 것을 볼 수 있습니다.

sudo apt update

그런 다음 아래 명령을 사용하여 CRI-O 패키지 버전을 확인하십시오. 보시다시피 최신 버전의 CRI-O 패키지 v1.24를 설치합니다.

sudo apt info cri-o

이제 아래의 apt 명령을 사용하여 CRI-O 컨테이너 런타임을 설치합니다. Y를 입력하여 설치를 확인하고 ENTER를 눌러 계속하면 설치가 시작됩니다.

sudo apt install cri-o cri-o-runc

설치가 완료되면 CRI-O 서비스를 시작하고 아래의 \systemctl\ 명령을 사용하여 활성화합니다.

sudo systemctl start crio
sudo systemctl enable crio

마지막으로 아래 명령을 사용하여 CRI-O 서비스를 확인하고 확인합니다. CRI-O 서비스가 활성화되고 시스템 부팅 시 자동으로 실행되는 것을 볼 수 있습니다. 그리고 CRI-O 서비스의 현재 상태가 실행 중입니다.

sudo systemctl status crio

CNI(컨테이너 네트워크 인터페이스) 플러그인 설치

CNI(컨테이너 네트워크 인터페이스)는 CRI-O 컨테이너 런타임에 필요합니다. CNI 플러그인을 사용하면 컨테이너와 포드에서 네트워킹을 설정할 수 있습니다. 공식 우분투 리포지토리에서 CNI 플러그인을 설치하고 CRI-O 컨테이너 런타임으로 설정합니다.

\containernetworking-plugins\ 패키지는 대부분 Linux 배포판에서 사용할 수 있습니다. 설치하려면 아래의 apt 명령을 실행하면 설치가 시작됩니다.

sudo apt install containernetworking-plugins

설치가 완료되면 다음 명령을 사용하여 CRI-O 구성 파일 \/etc/crio/crio.conf\을 편집합니다.

sudo nano /etc/crio/crio.conf

\[crio.network]\ 섹션에서 \network_dir\ 및 \plugin_dirs\ 옵션의 주석 처리를 제거합니다. 또한 CNI 플러그인 디렉토리 \/usr/lib/cni/\를 \plugin_dirs\ 옵션에 추가해야 합니다.

# The crio.network table containers settings pertaining to the management of
# CNI plugins.
[crio.network]

# The default CNI network name to be selected. If not set or "", then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = ""

# Path to the directory where CNI configuration files are located.
network_dir = "/etc/cni/net.d/"

# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
        "/opt/cni/bin/",
        "/usr/lib/cni/",
]

완료되면 파일을 저장하고 닫습니다.

그런 다음 기본 브리지 CNI 구성 \/etc/cni/net.d/100-crio-bridge.conf\을 제거합니다. 그런 다음 새 브리지 CNI 구성을 \/etc/cni/net.d/11-crio-ipv4-bridge.conf\에 다운로드합니다.

새로운 브리지 CNI 구성은 포드 및 컨테이너에 대해 IPv4만 활성화합니다.

rm -f /etc/cni/net.d/100-crio-bridge.conf
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf

이제 CRI-O 서비스를 다시 시작하여 CNI 플러그인 설정에 새로운 변경 사항을 적용하십시오.

sudo systemctl restart crio

마지막으로 아래 명령어로 CRI-O 서비스를 다시 확인하고 검증합니다. CRI-O 서비스가 새 브리지 CNI 구성으로 실행 중임을 확인해야 합니다.

sudo systemctl status crio

CRI 도구 패키지 설치

CRI-O 컨테이너 런타임 설치를 완료했으며 이제 올바른 CNI 플러그인으로 실행 중입니다. 이제 CRI-O 컨테이너 런타임과 상호 작용하는 데 사용할 수 있는 명령줄 유틸리티 \crictl\이 포함된 \cri-tools\ 패키지를 설치합니다.

\cri-tools\는 containerd, dockershim, CRI-O 및 cri-dockerd와 같은 여러 컨테이너 런타임과 함께 사용할 수 있습니다.

아래의 apt 명령을 실행하여 \cri-tools\ 패키지를 설치하십시오. 설치가 자동으로 시작됩니다.

sudo apt install cri-tools

설치가 완료되면 아래의 \crictl\ 명령을 실행하여 현재 런타임 버전을 확인하세요. 현재 사용 중인 컨테이너 런타임이 CRI-O v1.24임을 알 수 있습니다.

crictl version

다음으로 아래의 \crictl\ 명령을 실행하여 현재 컨테이너 런타임 및 CNI 네트워크 플러그인의 상태를 확인합니다. CRI-O Container Runtime은 \RuntimeReady\이고 CNI 플러그인은 \NetworkReady\입니다.

crictl info

crictl 명령은 수동으로 생성할 수 있는 셸에 대한 자동 완성 기능을 제공합니다. 아래의 crictl 명령을 실행하여 \/etc/bash_completion.d/crictl\에 대한 Bash 셸의 명령 완성을 생성합니다. 그런 다음 ~/.bashrc 구성 파일을 소싱하여 현재 Bash 세션을 다시 로드합니다.

crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc

이제 \crictl\ 명령을 실행하고 TAB을 눌러 사용 가능한 모든 명령 완성을 확인하십시오.

crictl TAB

crictl을 사용하여 포드 및 컨테이너 생성

이제 cri-tools가 시스템에 설치되었으므로 \crictl\ 명령을 사용하여 포드 샌드박스 및 컨테이너를 생성할 시간입니다. 이 예시에서는 Nginx 컨테이너용 포드를 생성합니다.

아래 명령을 사용하여 새 디렉터리 \~/demo\를 만듭니다.

mkdir ~/demo/

이제 아래 명령을 실행하여 새 JSON 구성 파일을 만들고 컨테이너에 대한 Pod 샌드박스를 정의합니다.

cat <<EOF | tee ~/demo/sandbox_nginx.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "linux": {
    },
    "log_directory": "/tmp"
}
EOF

아래의 \crictl\ 명령을 사용하여 포드 샌드박스를 실행합니다. Pod의 임의 문자열이 표시되어야 합니다.

sudo crictl runp ~/demo/sandbox_nginx.json

아래 명령을 사용하여 실행 중인 Pod를 확인하고 확인합니다. \Ready\ 상태에서 포드 ID가 \7b0618800e251\인 포드 샌드박스 \nginx-sandbox\가 표시되어야 합니다. .

sudo crictl pods

Pod의 세부 정보를 확인하려면 아래의 \crictl\ 명령을 실행하고 Pod id를 변경해야 합니다. 이 예에서 \nginx_sandbox\ 포드에는 IP 주소 \10.85.0.3\가 있습니다.

sudo crictl inspectp --output table 7b0618800e251

Pod 샌드박스가 준비되었으므로 이제 Nginx 컨테이너를 만들 차례입니다. 그러나 먼저 Nginx 이미지를 다운로드합니다.

아래의 crictl 명령을 실행하여 Nginx 이미지를 다운로드합니다. 그런 다음 사용 가능한 이미지 목록을 확인하고 확인합니다.

sudo crictl pull nginx
sudo crictl images

이제 다음 명령을 실행하여 Nginx 컨테이너를 정의하기 위한 새 JSON 파일을 생성합니다.

cat <<EOF | tee ~/demo/container_nginx.json
{
  "metadata": {
      "name": "nginx"
    },
  "image":{
      "image": "nginx"
    },
  "log_path":"nginx.0.log",
  "linux": {
  }
}
EOF

아래 crictl 명령을 사용하여 포드 샌드박스 \7b0618800e251\에 새 컨테이너를 만듭니다. 새 Nginx 컨테이너 ID의 임의 문자열이 표시되어야 합니다.

sudo crictl create 7b0618800e251 ~/demo/container_nginx.json ~/demo/sandbox_nginx.json

아래 명령을 사용하여 Nginx 컨테이너를 시작하고 컨테이너 ID를 변경했는지 확인하십시오.

sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746

그런 다음 아래 명령을 사용하여 실행 중인 컨테이너를 확인하고 확인합니다. Pod \7b0618800e251\ 내에서 Nginx 컨테이너가 \Running\인 것을 볼 수 있습니다.

sudo crictl ps

마지막으로 포드 샌드박스 \nginx_sandbox\의 IP 주소를 통해 Nginx 컨테이너에 액세스할 수 있습니다. \nginx_sandbox\ IP 주소 \10.85.0.3\에 curl 명령을 실행하면 Nginx 컨테이너의 기본 index.html 페이지가 표시됩니다.

curl 10.85.0.3

결론

이제 Ubuntu 22.04 서버에서 CNI 플러그인을 사용하여 CRI-O 컨테이너 런타임의 설치 및 구성을 완료했습니다. 이제 이를 Kubernetes 클러스터의 컨테이너 런타임으로 사용할 수 있습니다. CRI-O Container Runtime을 사용하여 포드 및 컨테이너를 생성하기 위한 \crictl\ 명령의 기본 사용법도 배웠습니다.