Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナの実現とその実装

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for 0n1shi 0n1shi
March 27, 2019
190

 コンテナの実現とその実装

Avatar for 0n1shi

0n1shi

March 27, 2019
Tweet

Transcript

  1. 自己紹介 大西 和貴 (@_k_onishi_) https://k-onishi.github.io/ SAKURA Internet Inc. アプリケーショングループ レンタルサーバーチーム

    Typescript / Go / PHP / ... Linux / Kernel / CPU / Container / Virtualization / Pwn / C / Assembly / Python Linux Kernel 勉強会
  2. cgroupでは以下の項目(コントローラ)に制限を設けることが可能である。 • cpu: CPUへのアクセス • cpuacct: CPUについての自動レポートを生成 • cpuset: マルチコアCPUのコア単位およびメモリノードを割り当て

    • memory: メモリに対する制限設定と自動レポートの生成 • blkio: ブロックデバイスの入出力アクセス • devices: デバイスへのアクセス • net_cls: ネットワークパケットへのタグ付け • net_prio: ネットワークトラフィックの優先度を動的に設定 • freezer: タスクを一時停止または再開 コンテナの実現(cgroups)
  3. コンテナの実現(cgroups) # cgroupの作成 $ cgcreate -g blkio,memory,cpu,pids:test # 指定のプロセスをcgroupに参加させる。 $

    echo $$ 2006 $ cgclassify -g blkio,memory,cpu,pids:test 2006 # 1秒間に0.5秒CPUリソースに対するアクセスを許可する $ cgset -r cpu.cfs_period_us=1000000 test $ cgset -r cpu.cfs_quota_us=500000 test # # cgroupを削除する。 $ cgdelete -g blkio,memory,cpu,pids:test
  4. • CAP_SYS_BOOT reboot(2) と kexec_load(2) を呼び出す • CAP_SYS_CHROOT chroot(2). を呼び出す

    • CAP_SYS_MODULE カーネルモジュールのロード、アンロードを行う (init_module(2) と delete_module(2) を参照のこと) コンテナの実現(Linux Capabilities)
  5. • CAP_SYS_NICE 任意のプロセスの nice 値の変更を行う • CAP_SYS_PTRACE ptrace(2) を使って任意のプロセスをトレースする •

    CAP_SYS_TIME システムクロックを変更する (settimeofday(2), stime(2), adjtimex(2)) コンテナの実現(Linux Capabilities)
  6. ハンズオン # 新たなルートディレクトリを作成。 $ mkdir my_container; cd $_ # ライブラリとユーティリティの用意

    $ sudo cp -r /bin ./ $ sudo cp -r /lib ./ $ sudo cp -r /lib64 ./ # 名前空間の分離とルートディレクトリの変更 $ sudo unshare --pid --fork chroot . /bin/bash # ~ ここからコンテナ内部 ~
  7. ハンズオン # proc fsの作成 # mkdir -p /proc # mount

    -t proc proc /proc # psコマンドの実行 # ps PID TTY TIME CMD 1 ? 00:00:00 bash 4 ? 00:00:00 ps