1장: 설치 및 구성¶
이 장에서는 root 사용자이거나 root로 _sudo_할 수 있는 권한이 필요합니다.
EPEL 및 OpenZFS 리포지토리 설치¶
LXD는 EPEL (Enterprise Linux용 추가 패키지) 저장소를 필요로 합니다. 다음 명령을 사용하여 쉽게 설치할 수 있습니다:
dnf install epel-release
설치 후 패키지의 업데이트가 없는지 확인합니다:
dnf upgrade
업그레이드 과정 중에 커널 업데이트가 있었다면 서버를 재부팅합니다.
8 및 9용 OpenZFS 리포지토리¶
다음을 사용하여 OpenZFS 리포지토리를 설치합니다.
dnf install https://zfsonlinux.org/epel/zfs-release-2-2$(rpm --eval "%{dist}").noarch.rpm
snapd, dkms, vim 및 kernel-devel 설치¶
LXD 설치에는 Rocky Linux에서 snap 패키지가 필요합니다. 이러한 이유로 다음 명령을 사용하여 snapd
(및 몇 가지 유용한 프로그램)를 설치합니다:
dnf install snapd dkms vim kernel-devel
snapd를 활성화하고 시작합니다:
systemctl enable snapd
다음을 실행합니다.
systemctl start snapd
계속하기 전에 서버를 재부팅합니다.
LXD 설치¶
LXD를 설치하기 위해 snap 명령을 사용합니다. 이 시점에서 설정하는 것이 아니라 단순히 설치하는 것입니다:
snap install lxd
OpenZFS 설치¶
dnf install zfs
환경 설정¶
대부분의 서버 커널 설정은 대량의 컨테이너를 실행하는 데 적합하지 않습니다. 프로덕션에서 서버를 사용할 것으로 가정한다면, "파일 수가 너무 많음"과 같은 오류가 발생하지 않도록 처음부터 이러한 변경 사항을 적용해야 합니다.
다행히도 LXD의 설정을 수정하는 것은 파일 수정 몇 가지와 재부팅으로 간단합니다.
limits.conf 수정¶
첫 번째로 수정해야 할 파일은 limits.conf 파일입니다. 이 파일은 자체적으로 문서화되어 있습니다. 파일 안의 주석을 살펴보고 이 파일이 수행하는 작업을 이해하기 위해 설명을 확인하십시오. 수정 사항을 적용하기 위해 다음 명령을 입력합니다:
vi /etc/security/limits.conf
이 파일은 주석으로만 이루어져 있으며, 맨 아래에는 현재의 기본 설정이 표시됩니다. 파일의 끝 표시자 (#End of file) 위의 공백 공간에 사용자 정의 설정을 추가해야 합니다. 파일의 끝은 다음과 같아야 합니다:
# Modifications made for LXD
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
* soft memlock unlimited
* hard memlock unlimited
변경 사항을 저장하고 편집기를 종료합니다. (SHIFT:wq!
for vi)
90-lxd.override.conf로 sysctl.conf 수정¶
_systemd_를 사용하면 기본 구성 파일을 수정하지 않고도 시스템의 전체 구성 및 커널 옵션을 변경할 수 있습니다. 대신 필요한 특정 설정을 무시하는 별도의 파일에 설정을 넣습니다.
이러한 커널 변경을 위해 /etc/sysctl.d 디렉토리에 90-lxd-override.conf라는 파일을 생성합니다. 다음 명령을 입력하여 파일을 생성합니다:
vi /etc/sysctl.d/90-lxd-override.conf
RL 9 및 A의 MAX net.core.bpf_jit_limit
최근 커널 보안 업데이트로 인해 net.core.bpf_jit_lrecentimit
의 최대값이 1000000000으로 나타납니다. Rocky Linux 9.x를 실행 중인 경우 아래 자체 문서화 파일에서 이 값을 조정해야 합니다. 이 한도 이상으로 설정하거나 또는 전혀 설정하지 않으면 시스템 기본값인 264241152로 기본 설정되며, 대량의 컨테이너를 실행하는 경우 충분하지 않을 수 있습니다.
다음 내용을 파일에 추가합니다. 여기서 무엇을 하는지 궁금하다면, 파일 내용이 자체 문서화되어 있음을 알아두세요:
## LXD를 위해 다음 변경 사항이 적용되었습니다 ##
# fs.inotify.max_queued_events는 해당 inotify 인스턴스에 대기 중인 이벤트 수의 상한을 지정합니다. - (기본 값은 16384)
fs.inotify.max_queued_events = 1048576
# fs.inotify.max_user_instances는 실제 사용자 ID 당 생성할 수 있는 inotify 인스턴스 수의 상한을 지정합니다 - (기본값은 128입니다)
fs.inotify.max_user_instances = 1048576
# fs.inotify.max_user_watches는 실제 사용자 ID 당 생성할 수 있는 감시 수의 상한을 지정합니다 - (기본값은 8192입니다)
fs.inotify.max_user_watches = 1048576
# vm.max_map_count는 프로세스가 가질 수 있는 메모리 맵 영역의 최대 개수를 나타냅니다. 메모리 맵 영역은 malloc을 호출할 때, mmap과 mprotect를 통해 직접 사용되며, 공유 라이브러리를 로드할 때도 사용됩니다 - (기본값은 65530입니다)
vm.max_map_count = 262144
# kernel.dmesg_restrict는 컨테이너가 커널 링 버퍼의 메시지에 액세스할 수 없도록 합니다. 이는 호스트 시스템의 비루트 사용자에게도 액세스를 거부할 것입니다 - (기본값은 0입니다)
kernel.dmesg_restrict = 1
# 이것은 ARP 테이블 (IPv4)의 최대 항목 수입니다. 1024개 이상의 컨테이너를 생성하는 경우 이 값을 증가시키십시오.
net.ipv4.neigh.default.gc_thresh3 = 8192
# 이것은 ARP 테이블 (IPv6)의 최대 항목 수입니다. 1024개 이상의 컨테이너를 생성하는 경우 이 값을 증가시키십시오. IPv6을 사용하지 않는 경우 필요하지 않지만...
net.ipv6.neigh.default.gc_thresh3 = 8192
# 이것은 eBPF JIT 할당의 크기 제한입니다. 일반적으로 PAGE_SIZE * 40000으로 설정됩니다. Rocky Linux 9.x를 실행 중인 경우 1000000000으로 설정하십시오. net.core.bpf_jit_limit = 3000000000
# 이것은 root 아닌 사용자가 사용할 수 있는 키의 최대 개수입니다. 컨테이너 수보다 높아야 합니다. kernel.keys.maxkeys = 2000
# root가 아닌 사용자가 사용할 수 있는 키링의 최대 크기입니다. kernel.keys.maxbytes = 2000000
# 이것은 동시 비동기 I/O 작업의 최대 수입니다. AIO 하위 시스템을 사용하는 작업 부하가 많은 작업을 수행하는 경우 이 값을 더 높게 설정해야 할 수 있습니다 (예: MySQL)
fs.aio-max-nr = 524288
변경 사항을 저장하고 편집기를 종료합니다.
이제 서버를 재부팅합니다.
sysctl.conf 값 확인¶
재부팅 후 root 사용자로 서버에 다시 로그인합니다. 우리의 오버라이드 파일이 실제로 작업을 완료했는지 확인해야 합니다.
이 작업은 어렵지 않습니다. 원하지 않는 한 모든 설정을 확인할 필요는 없지만 몇 가지를 확인하면 설정이 변경되었는지 확인할 수 있습니다. 이것은 sysctl 명령으로 수행됩니다.
sysctl net.core.bpf_jit_limit
결과는 다음과 같이 표시됩니다:
net.core.bpf_jit_limit = 3000000000
오버라이드 파일에 있는 다른 설정도 확인하여 변경 사항을 확인합니다.
Author: Steven Spencer
Contributors: Ezequiel Bruni