컨테이너를 구성하는 3가지 주요 리눅스 기술

  • Control groups (cgroups)
  • Namespaces
  • Union mount filesystem

 

Namespace

  • 프로세스 별로 커널 자원을 분할(격리)하는 기능
  • 격리하는 자원 
    • Process ID (pid)
    • Network (net)
    • Filesystem/mount (mnt)
    • Inter-oric comms (ipc)
    • UTS (UTS)
    • User (user)

 

 

cgroups / namespaces 비교

cgroup

how much you can use를 제한 > 얼마나 많은 리소스를 사용할 수 있는지를 제한.

cpu, memory, network, storage I/O 에 대해서 프로세스가 쓸 수 있는 사용량을 제한합니다.

 

namespace

what you can see를 제한 > 해당 프로세스가 볼 수 있는 범위를 제한.

프로세스 자신이 파일 시스템이 볼 수 있는 범위를 제한할 수도 있고, 사용자 정보를 제한할 수도 있습니다. 

 

 

cgroup 과 namespace 두가지를 합쳐서 리눅스 컨테이너의 근간이 됩니다. 

각 자원이 격리된 환경에 있고, 그 격리된 환경에서 각각의 자원들을 얼마나 쓸지 제안을 받는것이 컨테이너 기술의 메인입니다. 

 

namespace 종류

  • PID 네임스페이스 - Process ID .정보를 격리합니다. 네임스페이스 외의 다른 프로세스에서 접근 불가능.
  • Network 네임스페이스 - 네트워크 리소스를 격리및 가상 네트워크 장치를 할당
  • User 네임스페이스 - 프로세스별로 UID, GID 정보를 격리
  • Mount 네임스페이스 -  프로세스별로 마운트 되는 파일 시스템을 격리.
  • IPC 네임스페이스 -  inter-process communication을 격리. 다른 프로세스의 접근이나 제어를 방지.
  • UTS  네임 스페이스 - 호스트명인 도메인명을 격리

 

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

'linux' 카테고리의 다른 글

[Linux] cgroup으로 CPU 사용 제한하기  (0) 2023.01.14
[Linux] cgroup  (0) 2023.01.12

상황 만들기

stress tool로 cpu로드 100프로 생성하기 

# CPU stress 테스트 툴 설치
sudo apt install -y stress

 

cgroup 속성 변경하기

cgroup과 같은 속성은 실제로 파일은 아니지만 디렉토리 형태로 해서 속성이 들어가있고 echo 로 값을 써가면서 설정들을 변경할 수 있습니다. 

 

test용 cgroup 생성

mkdir utils 로 만들고 해당 그룹에 들어가 보면 컨트롤 제어에 필요한 cpu와 관련된 각종 값들이 세팅 되어있습니다. 

 

cpu 사용량 10% 제한

해당 값을 10%로 제한하려면 cpu.cfs_quota_us 값과 cpu.cfs_period_us 값을 세팅하면 됩니다. 둘다 microsecond 단위.

자식 프로세스는 해당 컨트롤 그룹의 부모 컨트롤 그룹의 상속을 받기 때문에 다른 쉘로 이동하면 안됩니다. 

# cfs quota 설정
echo 10000 > cpu.cfs_quota_us

 

tasks 등록하기

echo $$ > tasks

 

stress 명령 실행하기

# stress test 실행
stress -c 1

cpu가 10%로 제한되었습니다.

 

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

'linux' 카테고리의 다른 글

[Linux] namespace  (0) 2023.01.17
[Linux] cgroup  (0) 2023.01.12

cgroup

컨테이너를 구성하는 3가지 주요 리눅스 기술

  • Control groups (cgroups)
  • Namespaces
  • Union mount filesystem

 

cgroups (Control Groups)

  • cgroup은 프로세스들이 사용하는 시스템 자원의 사용정보를 수집및 제한 합니다. 제한을 하기 위해서 프로세스들 별로 사용하고 있는 리소스들의 정보를 수집하고, 수집된 정보를 기반으로 설정된만큼 제한을 진행합니다.
  • 제한 가능한 자원 : CPU, Memory, Network, Device, Block I/O
  • 활용 사례 : runc, YARN (Hadoop), Android 등
    • 컨테이너에서 사용되는 OCI 런타임인 runc가 있습니다.
    • 하드웨어 리소스를 관리하는 Yarn에서도 하드 작업을 내릴 때 작업에서 사용할 CPU와 메모리의 양들을 설정하게 되고 cgroup을 통해서 구현이 됩니다.
    • 안드로이드는 크게 Foreground와 Background 컨트롤로 구성이 되어 있습니다.
      • Foreground, Visible : 사용자가 원활하고 최대한의 성능을 쓸 수 있도록 하기 위해 Foreground용 컨트롤 그룹을 만들고 해당 그룹에 있는 작업들은 자원의 사용에 제한을 거의 받지 않습니다.
      • Background : 백그라운드로 돌고있는 작업들의 경우 네트워크가 스토리지와 리소스 사용에 있어 제한을 걸게 됩니다.
  • cgroups은 두가지 버전이 있습니다.
    • cgroupsv1 : 컨트롤하는 대상이 되는 리소스를 기준으로 개별적으로 cgroups을 생성합니다. 현재 대부분 v1 기반으로 사용되고 있습니다.
    • cgroupsv2 : 사용자가 쓰기 편하게 하는 목적이 있습니다.

 

 

cgroups 서브시스템

  • CPU : 스케줄러를 이용해 해당 cgroup에 속한 프로세스 cpu 사용 시간을 제어합니다. 프로세스의 사용시간을 정하는게 스케줄러이기 때문에 CFS 스케줄러를 쓰고 있는데, CFS 스케줄러 코드에 맞게 cgroup과 관련된 설정들이 들어가 있습니다.
  • memory : 해당 컨트롤 그룹에 속한 메모리의 사용량에 대해 제어합니다.
  • freezer : cgroup의 작업을 일시 중지하거나 다시 시작합니다.
  • blkio : cgroup에 블록 장치에 대한 입출력 제한을 설정합니다.
  • net_cls : 이 서브시스템은 Linux 트래픽 컨트롤러 (tc)가 특정 cgroup 작업에서 발생하는 패킷을 식별하게 하는 클래식 식별자 (classid)를 사용하여 네트워크 패킷에 태그를 지정합니다

 

 

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html/resource_management_guide/ch01

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

 

'linux' 카테고리의 다른 글

[Linux] namespace  (0) 2023.01.17
[Linux] cgroup으로 CPU 사용 제한하기  (0) 2023.01.14

+ Recent posts