• 検索結果がありません。

講義資料 クラウド基盤構築サポートページ No04 and Container

N/A
N/A
Protected

Academic year: 2018

シェア "講義資料 クラウド基盤構築サポートページ No04 and Container"

Copied!
49
0
0

読み込み中.... (全文を見る)

全文

(1)

ウ 基盤構築演習

Cloud Infrastructure Design and Deployment

4. ー 仮想化技術とコン 概要

2017.v1

(2)

Table of contents

 ー ー仮想化

o 仮想化 ー 分類

o Xen/KVM ーキ

o Linux 仮想ネ ワー 機能

o cgroups ー 制御

o KVM 他 機能

 ン 技術

o 概要

o LXC Docker 比較

o

(3)

ー ー仮想化

仮想化 ー 分類

(4)

仮想化 ー 分類

 基本的 物理 ン 同等 仮想 ン 複数作 出 技術

物理 ン

OS

物理 ン

非仮想化環境

物理 ン

ー ー

OS

物理 ン

Linux KVM

Xen

ー 仮想化

物理 ン ー 内蔵

OS 仮想ン

OS 仮想ン

OS 仮想ン

OS 仮想ン

物理 ン上 ー 仮想化 導入

OS 仮想ン

OS 仮想ン

OS 仮想ン

OS 仮想ン

仮想化

OS 機能 追加

OS 仮想ン

OS 仮想ン

OS 仮想ン

ーネ ー ー

(5)

x86 ー 仮想化技術 歴史

 仮想化支援機能 持 CPU 仮想 ン OS 実行 特権 ー

提供 セン 命令 制御 HW 行い

 初期 ー 仮想化支援機能 前提 い 技術 必要

o VMware Dynamic Binary Translation 採用 セン 命令 上 動 的 書 換え 技術

o Xen 準仮想化 (Static Binary Translation) 提唱 セン 命令 事前

ー ー 書 換え 準仮想化 ーネ 使用

 現在 CPU 仮想化支援機能 利用可能

1995 2000 2005 2010

(Virtual PC for Macintosh)

VMware ESX Xen KVM

Intel-VT

2007

2005

2003

2000

1996

ー 仮想化 準仮想化技術 提唱 仮想化機能 統合 Linux ーネ

ン ー ーPC

初 仮想化(?) HW 仮想化機能

(6)

CPU 特権 ー と ン ョン

 x86 CPU ン 0〜 ン 3 4 種類 特権 ー 提

o Linux Windows OS ン 0 ン 3 2種類

使用

o ン 0 CPU 命令 実行 Linux ーネ

ー 動作

o ン 3 物理 ー 操作 い ー

ー ー 動作 ー セ ー

セ 際 ー ーネ ー 呼 出

ン 0: ーネ ー

ン 3: ー セ

物理 ー セ

ン ン

(7)

Intel VT-x よる特権 ー 拡張

 仮想化支援機能 Intel VT-x 持 Intel CPU VMX root

VMX non-root 区別 追加

0 〜 ン 3

o 仮想化 使用 い環境 VMX root 動作

 Xen 場合 ー VMX root / ン 0 動作

OS VMX non-root / ン 0 ン 3 動作

o VMX non-root / ン 0 物理 ー 発生 VM

Exit 発行 CPU 強制的 VMX root / ン 0

理 移行

VMX root / ン 0 VMX root / ン 3

物理 ー /仮想 ー セ

VMX non-root / ン 0 VMX non-root / ン 3

VM Exit VM Entry

OS

(8)

ー ー仮想化

Xen/KVM ーキ

(9)

Xen ーキ チ 概要

 Xen ー 介 複数 仮想 ン 作成

独立 OS 稼動

o ン0 特権 OS

ー 制御 ー 物理 稼動

o 制御 ー 一般 ンU

作成 OS 起動 行い

o ンU 仮想 Xen

ン0 経由 物理 セ

Xen

物理 ン

ン0 / OS ンU / OS

仮想

仮想化管理 ー

ンU / OS 仮想

仮想化管理 ー 物理

ー 制御 ー

(10)

KVM おける特権 ー 利用方法

 KVM 仮想 ン

Linux 上 1 実行

o OS VMX non-root

動作 セ

セン 命令 発行

KVM 処理 移行

o KVM 指示

VMXroot 動作 qemu

ー 物理

qemu-kvm

物理CPU

仮想 ー

ーネ

KVM

VMX root

VMX non-root

Linux

ーネ

セ ー

qemu

一般

一般

(11)

EPT よる 高速化

 非仮想化環境 ー セ 認識 仮想 物理 変換

CPU 搭載 MMU(Memory Management Unit) ー 処理

 一方 仮想 ン環境 2 段階 変換 必要

o 仮想 OS 仮想 物理 がにPなひき ⇒ 物理

(MPFN)

o EPT (Extended Page Tables) 利用 2段階 変換

 Xeon 5500番台(Nehalem)以降 CPU EPT 対応 EPT未対応 CPU 処理 必要

PFN

MMU 変換

搭載物理

qemu-kvm

搭載物理

PFN GPFN

非仮想化環境 Xen/KVM 仮想化環境

論理 セ A空間 論理 セ B空間 EPT対応

MMU 変換

論理 セ A空間

(12)

ウペー 利用

 EPT未対応 CPU Xen/KVM 使用 場合 ー 管理

ー ー 利用 変換 行い

o OS 論理 GPFN 対応表 更新

検知 ー 論理 PFN 直接変換

ー ー 更新

o MMU セ A く 対応

ー ー 参照 変換 行う う 操作

 ー 余分 処理 発生 EPT対応CPU 比

セ ー 大 く

論理 GPFN

XXX YYY

・・・ ・・・

OS セ A

論理 PFN

XXX ZZZ

・・・ ・・・

ー 管理 ー ー

搭載物理

PFN GPFN

XXX YYY

ZZZ

EPT 未対応CPU Xen/KVM 仮想化環境

論理 セ A空間

MMU

ー 参照 変換

(13)

virtio よるI/O 高速化

 virtio KVM 仮想化環境 最適化 /NIC

ン形式

o QEMU 用意 I/O 領域 virtio 直接 仮想化

ー 削減

o Xen 準仮想化 同等 仕組

Linux Linux

QEMU

物理I/O

QEMU

物理I/O

virtio 使用 場合

一般 使用 場合

入出力 ー

入出力 ー

入出力 ー 入出力 ー

OS空間 OS空間

I/O処理 QEMU経由 IO 実施

IO IO

virtio 共有

使用 OS QEMU間 ー

ー 発生 い

(14)

仮想化API libvirt

 libvirt 複数 ー 統一的 操作 API

o C言語 Python 使用 標準 提供 現在 Xen/KVM/LXC Linux 対応

o OS 起動・停止 操作以外 仮想ネ ワー 構成 ー 管理 API 提供

o Python 使用 KVM 仮想 起動/停止

 RHEL6 次 う ー libvirt 利用 い

o virsh ン管理 ー o virt-manager GUI管理 ー

o virt-install OS

 OpenStack 基盤 内部的 libvirt経由 仮想化 ー 操作

場合 あ

#!/usr/bin/python import libvirt, time

Conn = libvirt.open( "qemu:///system" ) for name in Conn.listDefinedDomains():

vm = Conn.lookupByName( name ) print "Starting " + vm.name() vm.create()

time.sleep( 1 )

仮想 ン 起動

#!/usr/bin/python import libvirt, time

Conn = libvirt.open( "qemu:///system" ) for id in Conn.listDomainsID():

vm = Conn.lookupByID( id ) print "Stopping " + vm.name() vm.shutdown()

time.sleep( 1 )

仮想 ン 停止

(15)

virt-manager よる仮想化環境 管理

 virt-manager RHEL 標準 提供 仮想化環境 管理 ー

次 う 操作 GUI 行う

o 仮想 ン 構成 OS

o 仮想 ン ー 表示 起動 停止

o 仮想ネ ワー 構成 仮想 管理

 ネ ワー 経由 複数 仮想化 管理

(16)

ー ョン 仕組み

 ー ン 稼動中

OS 稼動状態 保 物理

ー 上 移動 技術

o 共有 装置 利用

ー 間 共有

o 稼動中 OS ワー

経由 転送 ー 転送後

仮想CPU 状態 転送 ー

ン 完了

o 外部 厳密

10~100msec 程度 停止 発生

TCP/IP 再送機能 通常 ネ ワー

切断 問題 発生 せ

 共有 使用 い ー ・

ー ン 可能

o 稼働中 OS

え 仮想 ー 内容 ネ ワー

経由 転送

ー ン

ー ・ ー ン

OS

ワー 転送

OS

ワー 転送

OS

ワー 転送

OS 共有

(17)

ー ー仮想化

Linux 仮想ネッ ワー 機能

(18)

KVM 仮想ネッ ワー

 KVM Linux TAP 経由 仮想 ン 仮想NIC 交換

TAP 仮想 接続 仮想 ン間 ー ネ ワー

o TAP 仮想的 ネ ワー 通信 行うLinux 機能

o 仮想 Linux上 仮想的 ネ ワー 構成 機能

 外部ネ ワー 接続 方法 2種類あ

o Linux 物理NIC 仮想 接続

o iptables NAT/ 仮想 外部ネ ワー 転送

Linux ン0 読 替え Xen 同 仕組

Linux

仮想 仮想NIC

vnet0 eth0

仮想 ン

TAP

仮想NIC

vnet1 eth0

仮想 ン

TAP

virbr0 / br0

eth0 接続

NAT/

外部ネ ワー

(19)

仮想ネッ ワー 構成 ターン

 複数 仮想 使用 複数 仮想ネ ワー 構成 仮想

ネ ワー 構成 ーン 次 う あ

o 物理NIC 接続 外部ネ ワー 同一 接続

o NAT/ 利用 外部ネ ワー 独立 接続

利用場合 外部ネ ワー 仮想ネ ワー 向け 接続

 外部ネ ワー 相互通信 場合 外部 IP 内部 IP DNAT/SNAT 1対1 付け 必要 あ

o 外部ネ ワー 接続 ン内部 ー ネ ワー 構成

 仮想 IP 設定 Linux(Xen 場合 ン0 仮想 ン 通信

可能

vnet0 eth0

仮想

vnet1 eth0

仮想

仮想 vnet0

eth0

仮想

仮想 eth0

仮想 ン 外部 通信

vnet0 eth0

仮想

仮想 eth0

転送

Linux Linux Linux

仮想 ン 外部

ワー

仮想 ン 外部

ワー

仮想 IP 設定

Linux 仮想 ン 通信可能

(20)

dnsmasq よるDHCP/DNS機能 提供

 物理NIC 接続 い 仮想ネ ワー libvirt API virsh/virt-

manager 構成

o 物理NIC 接続 行う場合 手動 設定 構成 必要 あ

o 仮想 任意 名称 設定 通常 br0 使用

 libvirt 構成 仮想ネ ワー 簡易的 DHCP/DNS機能 提供

o 機能 Linux dnsmasq ー ン 提供 不要 場合 無効化

DNS Linux /etc /hosts 内容 /etc /resolv.conf 指定 外部DNS 参照

o libvirt 構成 仮想 名称 virbrX

vnet0 eth0

仮想

vnet1 eth0

仮想

eth0

転送

仮想 (virbr0)

Linux

DHCP DNS

(21)

VLAN 組み合わせ

Linux VLAN 構成 仮想 ン 透過的 VLAN 接続

o VLAN 処理 Linux上 行わ OS VLAN 意識 設定 必要あ

仮想NIC

仮想 ン

仮想NIC

仮想 ン

Linux

仮想 TAP

eth0

VLAN101 VLAN102 VLAN vnet0

TAP

br101 br102

eth0.101 eth0.102

eth0 eth0

vnet1

VLAN 無

(22)

Linux Bridge とOpen vSwitch 比較 (1)

 OpenStack ン 選択 仮想ネ ワー 実

装方式 入 替え

 LinuxBridge ン 仮想 使用 Open

vSwitch ン Open vSwitch 使用 下図 仮想

作成 際 実装 違い 示

vm01 vm02 vm03 vm04

外部ネ ワー

仮想 ー A

仮想

projectA

仮想 ー B

仮想

projectB

(23)

Linux Bridge とOpen vSwitch 比較 (2)

 下図 LinuxBridge 構成例

o 仮想 仮想 VLAN 割 当

brqxxxx

eth1.101 eth1.102

brqyyy

eth1

vm01

eth0

IP

VLAN101

VLAN102

vm04

eth0

IP

vm02

eth0

IP

vm03

eth0

IP

projectA projectB

仮想

VLAN 分割

ー ネ ワー 用

L2

(24)

Linux Bridge とOpen vSwitch 比較 (3)

 下図 LinuxBridge 構成例

o 仮想 Open vSwitch 内部 内部VLAN 外部VLAN 割 当

o 内部VLAN ン 自動的 連番 ID ン 外部VLAN 仮

想ネ ワー 定義 際 管理者 指定 ID 使用

br-priv

vm01

eth0

br-int

eth1 IP

phy-br-priv int-br-priv

qvoXXX

vm02

eth0 IP

qvoYYY ー VLAN tag:1

qvoZZZ qvoWWW ー VLAN tag:2

vm04

eth0 IP

VLAN101

VLAN102

Open vSwitch

vm03

eth0 IP

仮想 異

内部VLAN 割 当

内部VLAN 外部VLAN 相互変換

・内部VばAひさ⇔外部VLAN101

・内部VばAひざ⇔外部VLAN102

(25)

ー ー仮想化

cgroups よる ソー 制御

(26)

Control Groups (cgroups)

 Linux セ 単位 ー 制御機能 持 い

cgroups 機能 セ ー 単位

適用 ン ー ー

o cgroups 自体 ー 制御機能 提供 わけ

cgroups ン ー 利用 ー 制御機能

説明

cpuset ー 内 使用 CPU 指定

cpu ー 内 使用 CPU時間割合 上限 設定

・複数 ー セ 同一 CPU 実行 場合 優先順位

CPU時間配分 割合 設定

memory ・使用可能 上限 実 + 指定

blkio ・物理I/O 優先順位 帯域 制御

devices ・/dev以下 セ 制御

RHEL6.4 利用 主要 機能

(27)

cgroups ー 管理

 /cgroup ン 特殊 形式 ー 管理

ー構造 ー ー構造 対応

o cgconfig 起動 /cgroup 特殊

o 対応 mkdir 作成 新 い

ー 定義

ー構造 ー 管理 対応 場合 上図 subgroupXX 以下

作成

o 対応 下 あ 擬似 設定 行い

o tasks PID echo出力 該当

以降 作成

o cgroup.procs cat 表示 PID 表示

o 設定 対応 擬似 数値 echo出力

/cgroup/<サブシステム名>/group01/subgroup01/subsubgroup01

| |

| /subgroup02 /group02

ー 親

ー ー

(28)

主要 ータ(1)

 cpuset : ー 内 セ 実行 CPU 指定

 cpu : CPU 実行時間配分 指定

ー 説明

cpuset.cpu 実行 CPU 指定 0-2,7 0,1,2,7 いう意味

cpuseet.cpu_exclusiv e

1 指定 CPU 指定

0

cpuset.mems NUMA 利用 位置 指定 (

セ い 新 い ー 作成 最初 ー ー 同 値

セ く

ー 説明

cpu.shares CPU 占有率 2〜262144 数値 指定

複数 ー セ 同一 CPU 使用 場合 値 比例 CPU

使用時間 割 当 値 1024

cpu.cfs_period_us cpu.cfs_quota_us

CPU使用時間割合 上限 設定 cpu.cfs_period_us (μイ)中 cpu.cfs_quota_us (μイ) CPU 使用

環境 cpu.cfs_quota_us cpu.cfs_period_us 越え 設定可4 環境 cpu.cfs_period_us=250000, cpu.cfs_quota_us=500000

場合 ー 最大2 分 CPU性能 得

(29)

主要 ータ(2)

 memory : 使用量 上限 指定

 blkio : I/O 優先順位 指定

ー 説明

memory.limit_in_bytes 該当 利用可能 物理 上限 単位 指定

memory.memsw.limit_in_bytes 該当 利用可能 物理 + 領域 上限 単位 指定

memory.use_hierarchy 1 使用量

使用量 加え 0

ー 説明

blkio.weight 共通 優先順位 100〜1000 値 指定

値 比例 I/O処理時間 割 当

blkio.weight_device 特定 優先順位 Major:Minor 指定値 形式 指定

例 8:0 500 ※ ー ン単位 指定 い

blkio.throttle.read_bps_device blkio.throttle.write_bps_device

特定 対 セ 速度 上限 Bytes/Sec単位 指定 0

指定 制限 解除

例 8:0 1048576 ※ ー ン単位 指定 い

blkio.throttle.read_iops_device blkio.throttle.write_iops_device

特定 対 セ 速度 上限 IOPS単位 指定 0 指定

制限 解除

例 8:0 2048 ※ ー ン単位 指定 い

(30)

仮想マ ン 対するcgroups 操作

 libvirt API virt-manager/virsh ン 仮想

ン 起動 該当 仮想 ン 対 cgroups

定 行う 自動的 作成

o 具体的 /cgroup/< >/libvirt/qemu/<VM

>

o 値 設定 該当

仮想 ン 対 設定 可能

# ls -lF /cgroup/cpu/libvirt/qemu 合計 0

drwxr-xr-x 5 root root 0 9 25 15:57 2015 VM1-1/ drwxr-xr-x 5 root root 0 9 25 15:57 2015 VM2-1/

--w--w--w- 1 root root 0 9 24 15:55 2015 cgroup.event_control -rw-r--r-- 1 root root 0 9 24 15:55 2015 cgroup.procs

-rw-r--r-- 1 root root 0 9 24 15:55 2015 cpu.cfs_period_us -rw-r--r-- 1 root root 0 9 24 15:55 2015 cpu.cfs_quota_us -rw-r--r-- 1 root root 0 9 24 15:55 2015 cpu.rt_period_us -rw-r--r-- 1 root root 0 9 24 15:55 2015 cpu.rt_runtime_us -rw-r--r-- 1 root root 0 9 24 15:55 2015 cpu.shares

-r--r--r-- 1 root root 0 9 24 15:55 2015 cpu.stat

-rw-r--r-- 1 root root 0 9 24 15:55 2015 notify_on_release -rw-r--r-- 1 root root 0 9 24 15:55 2015 tasks

(31)

cgroups よる ソー 制御 例

 2個 仮想 ン I/O 帯域 10MB/Sec 50MB/Sec 制限 各仮想

ン I/O負荷 け 例

 2個 仮想 ン CPU使用時間 0.5 2.0 制限 各仮想 ン CPU

負荷 け 例

# echo "8:0 50000000" > /cgroup/blkio/libvirt/qemu/RHEL61vm01/blkio.throttle.write_bps_device

# echo "8:0 10000000" > /cgroup/blkio/libvirt/qemu/RHEL61vm02/blkio.throttle.write_bps_device

# virt-top -3 -d 1

virt-top 16:18:06 - x86_64 4/4CPU 3101MHz 7751MB

22 domains, 3 active, 3 running, 0 sleeping, 0 paused, 19 inactive D:0 O:0 X:0 CPU: 2.4% Mem: 4096 MB (ゲストによる 4096 MB)

14 R 0 48M 0 96 RHEL61vm01 vda 15 R 0 10M 0 22 RHEL61vm02 vda ID S RDBY WRBY RDRQ WRRQ DOMAIN DEVICE

# echo "500000" > /cgroup/cpu/libvirt/qemu/RHEL61vm01/cpu.cfs_period_us

# echo "250000" > /cgroup/cpu/libvirt/qemu/RHEL61vm01/cpu.cfs_quota_us

# echo "500000" > /cgroup/cpu/libvirt/qemu/RHEL61vm02/cpu.cfs_period_us

# echo "1000000" > /cgroup/cpu/libvirt/qemu/RHEL61vm02/cpu.cfs_quota_us

# top

top - 16:30:36 up 19 days, 4:35, 5 users, load average: 3.45, 3.57, 5.48 Tasks: 297 total, 6 running, 291 sleeping, 0 stopped, 0 zombie

Cpu(s): 65.5%us, 1.9%sy, 0.0%ni, 32.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 7937076k total, 6186888k used, 1750188k free, 381924k buffers Swap: 2097144k total, 3260k used, 2093884k free, 2410048k cached

780 qemu 20 0 1377m 1.0g 3696 R 192.7 13.2 9:51.11 qemu-kvm 741 qemu 20 0 1376m 1.0g 3692 R 50.8 13.4 10:36.94 qemu-kvm PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

(32)

libcgroup よるcgroups 管理

 libcgroup ー 提供 ン 群 cgroups 管理

o cg* 管理 例

o cgred 利用 起動 ー / 自動

的 ー 割 当 /etc/cgroups.conf 設定 記載

# cgcreate -g cpuset:group00

# cgset -r cpuset.cpus=0 group00

# cgset -r cpuset.mems=0 group00

# cgcreate -g cpuset:group01

# cgset -r cpuset.cpus=1 group01

# cgset -r cpuset.mems=0 group01

# cgget -r cpuset.cpus -r cpuset.mems group00 group01 group00:

cpuset.cpus: 0 cpuset.mems: 0 group01: cpuset.cpus: 1 cpuset.mems: 0

# cgexec -g cpuset:group00 ./loop.sh & [1] 2930

# cgclassify -g cpuset:group01 2930

cpuset ー group00 作成

設定 cpuset.mems 必須

cpuset ー group01 作成

設定 cpuset.mems 必須 設定値 確認

指定 実行

実行中 変更

(33)

ー ー仮想化

KVM そ 他 機能

(34)

仮想CPU 選択

 物理CPU 持 命令セ

古い世代 互換CPU OS 見せ 機能

o 物理CPU 持 い い 見え

あ せ

o 設定 少 古い世代 CPU 相当

 Copy host CPU configuration 物理

CPU 選択

o 暗号化や画像処理 CPU固有 機能 利用

ー ン 物理CPU 同 方

ー ン 向上 場合 あ

物理CPU 第2世代Core i5

# cat /proc/cpuinfo | grep flags | head -1

flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc

aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx lahf_lm ida arat epb xsaveopt pln pts tpr_shadow vnmi flexpriority ept vpid

# cat /proc/cpuinfo | grep flags | head -1

flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good unfair_spinlock pni cx16 hypervisor lahf_lm

OS 設定

(35)

sVirt よるセキュ 保護

 RHEL6 SELinux targeted ー 適用 sVirt 仮想 ン

間 セ 保護 行わ

o RHEL6 targeted ー 適用 特別 設定 不要

 QEMU/KVM 実装 未知 セキ 脆弱性 あ 場合 あ OS

OS セ や他 OS 操作 行わ 可能性 あ

sVirt 仮想 権限(MCS

設定 う 問題 防止

仮想 仮想

QEMU/KVM QEMU/KVM

OS OS

上 同 ー 権限

SELinux 攻撃 予防

(36)

ー ョン 必要 構成

 ー ン 行う場合 共有 装置 使用

o NFS 共有 方法 簡単 I/O 性能 必要 場合 FC

ー ネ 接続やiSCSI接続 共有 装置 使用

o 共有 装置上 仮想 配置 場合 GFS2

共有 必要

o 共有LUN上 LVM論理 ー 使用 場合 CLVM LVM

 ー ン時 ネ ワー 転送 ー 通信 影響 与え

い ー ネ ワー 別 ー ン用ネ

ワー 用意 勧

 ー ン 同一 物理CPU 使用

o 世代 物理CPU 使用 場合 仮想CPU 機能 一致 う

仮想CPU 調整

o Intel CPU AMD CPU 失敗 可能性 あ

(37)

ー ョン 構成例

eth2

eth1

eth0

iSCSI

br0

仮想 ン

仮想 ン

eth2

eth1

eth0

br0

仮想 ン

仮想 ン

Linux Linux

ー 用ネ ワー

ー ン用

/ 管理用ネ ワー

ネ ー 用 ワー

(38)

コン 技術

(39)

Linux コン 概要

 OS 内部 物理 ー 管理 ーネ 空間 ー セ

ー ン 実行 ー 空間 分 ン 型

仮想化 ーネ 機能 複数 ー 空間 作 出

ー セ 見え ー 分割

o ネー OS ワー

ン ー

 ⇒ ン 異 内容 見え

o CPU /dev/*

 ⇒ 物理 ン全体 情報 見え cgroups ン 利用範囲 制限

ーセ

・・・

物理 物理

OS

ン 型仮想化

非仮想化環境

ーセ ーセ ー 空間

ーネ 空間

ーセ ーセ

ー 空間

ーセ ーセ

ー 空間

・・・

ーネ 空間

(40)

Namespace よる ソー 分離

 ン 様々 ー 分離 ネー ー

組合せ 実現 い

o 分離 → Mount namespace

o ネー 分離 → UTS namespace

o IPC 分離 → IPC namespace

o UID/GID 分離 → User namespace

o 分離 → PID namespace

o ワー 分離 → Network namespace

o ー 配分 分離 → Control groups

o 参考資料

 Namespaces in operation, part 1: namespaces overview

http://lwn.net/Articles/531114/

 Using Kubernetes on Google Container Engine

https://www.slideshare.net/enakai/using-kubernetes-on-google-container-engine

o 技術 一定 組合せ利用 技術

呼 い

o 単独 いう技術 あ わけ

(41)

コン 関連する技術 歴史

 1979年 chroot(2) ー Version 7 Unix 導入

 1983年 chroot(2) ー 4.2BSD 導入

 2000年 FreeBSD jail FreeBSD 4.0 導入

o セ 空間 分離

 2005年 Solaris Containers 登場

o 分離 資源配分 ー 可能 Solaris用語 ーン 管理

備え

 2006年 Linux Kernel 2.6.19 UTC, IPC namespace

 2007年 Linux Kernel 2.6.23 User namespace

 2008年 Linux Kernel 2.6.24 Network namespace

 2008年 LXC ー

 2010年 Docker 1.0 ー

o 管理 Docker Hub 提供

 参考資料

o http://docs.oracle.com/cd/E19253-01/819-0385/zones.intro-1/index.html o https://kernelnewbies.org/LinuxVersions

o http://gihyo.jp/admin/serial/01/linux_containers o http://d.hatena.ne.jp/defiant/20141218/1418860851

(42)

Docker 概要

 ン 管理 必要

各種機能 備え ン ネ ン

o 作成 起動 破棄

o 公開

o 永続 ー 管理

o ー 管理

Docker Image

言語処理系 言語依存

Operation System

依存 RPM/DEB

Docker Hub

開発者 ン

V1.0 V1.1

V1.2

(43)

コン

 docker 操作 docker ン ン run や start け 実

 参考

o Docker

o http://d.hatena.ne.jp/enakai00/20140628/1403933390

保存 ー

保存 ー

run start

stop

commit

rm

rmi

run

ン 起動時

作成 停止 ー 残 停止

Dockerfile

build

ー 作成 手順

記載 Dockerfile

ー 作成

ー 複製

保存 ー 登録

Source Image

pull

(44)

コン と ネッ ワー 通信

 外部ネ ワー 通信 Linux NAT 行わ

o 外部 IP 行わ

o 外部 起動時 ワー

設定 行い

ン eth0

vethXXX

docker0

eth0

172.17.42.1 Linux

TCP80

TCP8000

ワー

# docker run -p 8000:80 xxxx

ン 起動時 ー ワー ン 設定

外部ネ ワー

Linux

ー 8000 接続

(45)

Docker 基本操作

 Docker 公開 ー Docker hub httpd ー 取得 ー

8888 公開

# docker search httpd

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

httpd The Apache HTTP Server Project 944 [OK]

centos/httpd 12 [OK]

lolhens/httpd Apache httpd 2 Server 2 [OK]

nfqsolutions/httpd Image of Apache HTTPD 2.4 1 [OK]

ー 検索

# docker pull httpd

ー ン ー

# docker run -d --name webserver -p 8080:80 httpd:latest

f2140317ae3567596fada9898b41a93f0cdd52b4475dd642f217012af2021309

ー ワー 設定 ン 起動

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f2140317ae35 httpd:latest "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp webserver

起動 ン 確認

# echo '<h1>Hello, World!</h1>' > /tmp/index.html

# docker cp /tmp/index.html webserver:/usr/local/apache2/htdocs/index.html

# curl localhost:8080

<h1>Hello, World!</h1>

ン 転送

(46)

Docker 基本操作

 ン 内 bash 起動 内部 状態 確認 例

# docker exec -it webserver /bin/bash

root@f2140317ae35:/usr/local/apache2# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 01:03 ? 00:00:00 httpd -DFOREGROUND daemon 6 1 0 01:03 ? 00:00:00 httpd -DFOREGROUND daemon 7 1 0 01:03 ? 00:00:00 httpd -DFOREGROUND daemon 8 1 0 01:03 ? 00:00:00 httpd -DFOREGROUND root 90 0 0 01:27 ? 00:00:00 /bin/bash

root 94 90 0 01:27 ? 00:00:00 ps -ef root@f2140317ae35:/usr/local/apache2# ip a

~省略~

15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.2/16 scope global eth0

valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link

valid_lft forever preferred_lft forever root@f2140317ae35:/usr/local/apache2# df -h Filesystem Size Used Avail Use% Mounted on none 60G 4.1G 52G 8% /

tmpfs 1000M 0 1000M 0% /dev

tmpfs 1000M 0 1000M 0% /sys/fs/cgroup /dev/sda2 60G 4.1G 52G 8% /etc/hosts shm 64M 0 64M 0% /dev/shm tmpfs 1000M 0 1000M 0% /sys/firmware

(47)

コン 入手方法

 公開 い 入手

o 検索 docker.io 検索

 # docker search centos

o 検索先 指定 ー ー/キーワー 指定

 # docker search docker.io/centos

 # docker search registry.access.redhat.com/rhel

 自分 ー 作成

o 手動 作成

o Dockerfile 作成

# docker search jenkins

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

jenkins Official Jenkins Docker image 2763 [OK]

stephenreed/jenkins-java8-maven-git Automated build that provides a continuous... 56 [OK] killercentury/jenkins-dind Generic Jenkins CI with Docker Engine and ... 25 [OK] aespinosa/jenkins Sets up a container with jenkins installed... 22 [OK] cloudbees/jenkins-enterprise CloudBees Jenkins Enterprise (Rolling rele... 22 [OK] blacklabelops/jenkins Docker Jenkins Swarm-Ready with HTTPS and ... 9 [OK] appcontainers/jenkins Centos/Debian/Ubuntu Based Customizable Je... 8 [OK] killercentury/jenkins-slave-dind Generic Jenkins Slave with Docker Engine a... 8 [OK] tianon/jenkins-slave SSHd, Java, and Docker-in-Docker specifica... 6 [OK]

bitnami/jenkins Bitnami Docker Image for Jenkins 5 [OK]

publicisworldwide/jenkins-slave Jenkins Slave based on Oracle Linux 4 [OK] blacklabelops/jenkins-swarm Jenkins Swarm Slave Dockerized and Paramet... 4 [OK]

(48)

Dockerfile

 ー 作 手順 キ Dockerfile 記述

元 ー 作成 可能

 毎回確実 同 手順 ー 作成 人為的

排除

FROM centos:7

RUN yum clean all && yum update -y && \ yum install -y epel-release && \

yum install -y gcc git vim jq openssh-server openssh-clients python-devel && \ yum install -y supervisor && \

yum install -y python-pip

RUN pip install --upgrade pip setuptools && \ pip install jupyter

RUN mkdir -p /jupyter && \

cd /root && jupyter notebook --generate-config && \

echo "c.NotebookApp.notebook_dir = u'/jupyter'" >> /root/.jupyter/jupyter_notebook_config.py

ADD supervisord.d/jupyter.ini /etc/supervisord.d ADD supervisord.d/sshd.ini /etc/supervisord.d EXPOSE 22 8888

CMD supervisord -n

(49)

参照

関連したドキュメント

11) 青木利晃 , 片山卓也 : オブジェクト指向方法論 のための形式的モデル , 日本ソフトウェア科学会 学会誌 コンピュータソフトウェア

講義の目標.

The classical Ehresmann-Bruhat order describes the possible degenerations of a pair of flags in a linear space V under linear transformations of V ; or equivalently, it describes

ガイダンス: 5G 技術サプライヤと 5G サービスプロバイダは、 5G NR

CASBEE不動産評価検討小委員会幹事 スマートウェルネスオフィス研究委員会委員 三井住友信託銀行不動産コンサルティング部 審議役

本資料は Linux サーバー OS 向けプログラム「 ESET Server Security for Linux V8.1 」の機能を紹介した資料です。.. ・ESET File Security

定可能性は大前提とした上で、どの程度の時間で、どの程度のメモリを用いれば計

[r]