[japan tech summit 2017] dep 005
Post on 21-Jan-2018
829 Views
Preview:
TRANSCRIPT
Microsoft Tech Summit 2017本情報の内容(添付文書、リンク先などを含む)は、Microsoft Tech Summit 2017 開催日(2017 年 11 月 8日 - 9 日)時点のものであり、予告なく変更される場合があります。
{
“名前” : “真壁徹(まかべとおる)”,
“所属” : “日本マイクロソフト株式会社”,
“役割” : “クラウドソリューションアーキテクト”,
“経歴” : “大和総研 HP Enterprise”,
“特技” : “クラウド & オープンソース”
}
runC (OCI)
containerd (CNCF) CRI-O
CRI-containerd
DockerEngine
Kubernetes & Tools
Docker Image Format
Orchestrators/Tools(Docker Based)
Docker
PlatformSpecific
PlatformIndependent
Linux Control Groupscgroups
NamespacesPid, net, ipc, mnt, uts
Layer CapabilitiesUnion Filesystems: AUFS,
btrfs, vfs, zfs*,DeviceMapper
Other OS Functionality
Containerd + runC
Docker Engine
REST Interface
libcontainerd graphlibnetwork plugins
Windows Control GroupsJob objects
NamespacesObject Namespace, Process
Table, Networking
Layer CapabilitiesRegistry, Union like
filesystem extensions
Other OS Functionality
Compute Services
Docker Client Docker SwarmDocker Compose Docker Registry
https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/deploy-containers/system-requirements
10.0.14393.206
App
Host User Mode
Container Runtime
Hyper-V Isolation
Virtual MachineOptimized for Container
App
Hyper-V Isolation
Virtual MachineOptimized for Container
App
Layer metadata (json)
Layer payload (tar)
Layer metadata (json)
Layer payload (tar)
Layer metadata (json)
Layer payload (tar)
入れ替え、使い捨てやすいコンテナーにする
.dockerignoreファイルを使う
マルチステージビルドを活用する
余計なパッケージを入れない
• コンテナーにはひとつひとつ違う役割を持たせる(詰め込まない)
• イメージレイヤーを少なくする
• 引数は改行&ソートする
• キャッシュを活かす
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
“Resource Central: Understanding and Predicting Workloads for Improved
Resource Management in Large Cloud Platforms” Microsoft, SOSP 2017
Container Group Namespace
Container A Container B
(Exposed) Port: 80 Port: 6000
• 同じコンテナーグループのコンテナーは、同じ仮想マシンに配置
• コンテナーグループは代表で1つの公開パブリックIPとポートを持てる
• コンテナーグループ内ではlocalhostとしてコンテナー間通信が可能• “サイドカー”
• コンテナーはAzure File
Storageをマウントできる
Container Group Namespace
sidecar
• 2つのコンテナー• getenv: 各種環境情報を取得し表示するHTTPサーバー
• sidecar: getenvコンテナーの監視
• せっかくなので軽量に• コンテナーサイズは約
10MBytes
• Golang + Alpine Linux• マルチステージビルド
getenv(Exposed) Port: 8080
169.254.169.254
フロントエンド
Load balancer
Runtime
Database
API
Endpoint
永続ストレージ
Local Container
Cache
Monitoring Service
SCM
Container
App
Container
アプリへのリクエスト
SSH
Proxy
• Exposeしたポートは[アプリ設定] > [環境変数] のWEBSITES_PORTで明示的に指定できる
https://github.com/Azure/acs-engine/blob/366ebc8ddd44388d637a656e2269cd0b0034703d/parts/kubernetesmastercustomscript.sh
ContainerContainer
Container
ContainerContainer
Container
ContainerContainer
Container
ContainerContainer
ContainerPrefix Next Hop
10.244.2.0/24 10.240.0.4
10.244.3.0/24 10.240.0.5
UDR
Flannelなどでオーバーレイせずにすむ理由
モデル 特徴 懸念
NAT NATの裏にコンテナーネットワークを閉じ込める
K8sのコンテナー間通信では使えない
Transparent コンテナーをVMネットワークに露出させる
接続スイッチの学習MACアドレスが多くなる
Overlay ノード間でトンネルを掘り仮想的なプライベートネットワークを作る
Overlayの仕組みを構築維持する必要がある (FlannelやWeaveなど)
L2 Bridge Transparentの進化系(MAC変換で露出するMACアドレスを少なく)
DHCPが使えない
L2 Tunnel 変換、転送、トンネリングをホストのSDN機能(AzureではVFP)に任せる
ホストのSDN機能に依存
-A KUBE-SERVICES -d
10.0.134.197/32 -p tcp -m comment
--comment "default/azure-vote-
front: cluster IP" -m tcp --dport 80 -j
KUBE-SVC-GHSLGKVXVBRM4GZX
(中略)
-A KUBE-SEP-CYIUI5GK6PK6K23I -p
tcp -m comment --comment
"default/azure-vote-front:" -m tcp -j
DNAT --to-destination 10.244.2.5:80
Node
iptables(Netfilter)
Client
kube-proxy
Container(Pod)
Node
iptables(Netfilter)
kube-proxy
Container(Pod)
Master
10.0.134.197
10.244.2.5
Node
iptables(Netfilter)
Client
kube-proxy
Container(Pod)
Node
iptables(Netfilter)
kube-proxy
Container(Pod)
Master
10.244.0.4
10.244.2.5
-A KUBE-SERVICES -d
52.243.38.6/32 -p tcp -m comment -
-comment "default/azure-vote-front:
loadbalancer IP" -m tcp --dport 80 -j
KUBE-FW-GHSLGKVXVBRM4GZX
(中略)
-A KUBE-SEP-CYIUI5GK6PK6K23I -p
tcp -m comment --comment
"default/azure-vote-front:" -m tcp -j
DNAT --to-destination 10.244.2.5:80
Azure LB
52.243.38.6
DSR
サービスの公開IP
Windows Container Host VM
vEthernet(HNS Internal NIC)
172.20.224.1/20
vEthernet(HNS Transparent)
10.240.0.4/8
10.244.1.1/25
vEthernet(forwarder)
機能 Windows v1709以前 Windows v1709 Linux
ひとつのPodに複数のコンテナー
×(Podあたり1コンテナー)
〇 〇
Podのエンドポイント統合
×(2つのエンドポイント:
Transparent + NAT)
〇 〇
カーネルモードでの負荷分散
× 〇 〇
CNIのサポート × 〇 〇
https://www.cncf.io/blog/2017/09/08/windows-
networking-parity-linux-kubernetes/
VM
VFP
Southbound API
GFT Offload API (NDIS)
VMSwitch
GFT
Table
First Packet
GFT Offload Engine
40/
50G
QoSCrypto RDMAGFT
TranspositionEngine
REWRITE
SLB Decap SLB NAT VNET ACL Metering
ControllerControllerController
Encap
SmartNIC
(w/FPGA)
DNATDecap Allow Meter
Rule Action
* Meter
Rule Action
* Allow
Rule Action
* Rewrite
Rule Action
* DNAT
Rule Action
* Decap
Flow Action
1.2.3.1->1.3.4.1,
62362->80
Decap, DNAT,
Rewrite, Meter
Flow Action
1.2.3.1->1.3.4.1,
62362->80
Decap, DNAT,
Rewrite, Meter
Orchestrator
(K8s, DC/OS, Service Fabric)
3rd party
plugins
IPAM
Plugin
Operating System (Windows, Linux)
CNIContainer
Runtime Network
Plugin
Container1 Container2 Container3
top related