SlideShare a Scribd company logo
1 of 44
Download to read offline
Interact 2018【T63】
Kubernetes、Flannel、CNIでWindows
Container Clusterオーケストレーション
2018年6月30日
System Center User Group Japan
金井 崇
自己紹介
• 名前:金井 崇
• 所属:株式会社フロンティア
• 仕事:IaaSのインフラ設計・構築・運用・提案を担当
• 興味:最近はKubernetes、コンテナなどコンピューティングの
最適な利用方法に興味があります。
• MVP:Cloud and Data Center Management (2017/03~)
• SNSなど:
• Facebook https://www.facebook.com/anikundesu
• Blog http://www.takanyan.net/
• Twitter @anikundesu
• LinkedIn https://jp.linkedin.com/in/takashikanai/ja
• SlideShare https://www.slideshare.net/anikundesu/presentations
2Copyright © 2018 System Center User Group Japan. All Rights Reserved.
注意事項
本セッションは、Windows Server Version 1803 英語版とKubernetes 1.10.3での検証結果をもと
に記述をしています。バージョンによっては挙動が異なる場合がありますので、ご留意ください。
本セッション資料は、個人で準備した環境において、個人的に実施した検証・結果を基に記載して
います。あくまで個人の意見・見解であり、所属する会社・組織及びマイクロソフト社とは関係が
ございません。所属する会社・組織・マイクロソフト社の正式な回答・見解ではない事に留意して
ください。
本資料を閲覧した事により問題が生じた場合、または問題が発生しかけた場合、または生じた一切
の不利益について、発表者は一切の責任を負う事はできませんのでご了承ください。
3Copyright © 2018 System Center User Group Japan. All Rights Reserved.
本日のアジェンダ
WindowsコンテナClusterのアーキテクチャ実装2
WindowsコンテナClusterの構築とデモ3
まとめ:今後の開発4
MicroserviceアーキテクチャとKubernetes、Flannel1
4Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Microserviceアーキテクチャと
Kubernetes、Flannel
Section 1
5Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Microserviceアーキテクチャの特徴
6
出典:Microservices - a definition of this new architectural term
https://martinfowler.com/articles/microservices.html
Copyright © 2018 System Center User Group Japan. All Rights Reserved.
<従来のアーキテクチャの特徴>
• 1つのプロセス(実行ファイル)内に必要な
機能すべてを実装(Monolithic)
• スケールアウトは機能全体を複製して実現
<Microserviceアーキテクチャの特徴>
• 必要な機能を1つずつ小さなサービスとし
て分離(Microservice)
• スケールアウトはMicroserviceを機能単位
に複製して実現
従来のアーキテクチャ
(Monolithic)
Microcervice
アーキテクチャ
Microserviceアーキテクチャの内部
機能ごとにServerとNWとLBができる
7Copyright © 2018 System Center User Group Japan. All Rights Reserved.
LB
App Server
機能A
機能B
機能C
App Server
機能A
機能B
機能C
App Server
機能A
機能B
機能C
DB DB
LB LB
Aコンテナ
DB DB
LB
Aコンテナ Aコンテナ
Bコンテナ Bコンテナ Bコンテナ
Cコンテナ Cコンテナ Cコンテナ
コンテナ間NW・LB
コンテナ間NW・LB
スケール
アウト
スケール
アウト
スケール
アウト
スケール
アウト
コンテナ管理ソフト:Kubernetes
8Copyright © 2018 System Center User Group Japan. All Rights Reserved.
出典:Kubernetes https://kubernetes.io/
• Googleが2014年から公開したコンテナ管理用の
オープンソースソフトウェア
• コンテナ間NWやStorageの管理などを行う
Management Planeソフトウェア
• コンテナのデファクトになったDockerでは
Docker SwarmだけではなくKubernetesも同梱す
るようになった
コンテナ管理のほぼデファクト
KubernetesでのSDNと各OSSの役割
コンテナ間、Node間のRoutingを自動設定するOSS
がWindowsにも対応開始
9Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Windows
(Merge待ち)
Linux
各NodeにRoutingや
Overlay NWを設定
各コンテナ間に必要
な通信情報を伝達
コンテナ間通信要件
からNode用設定生成
or
コンテナ間ネットワークのトポロジー設計
10Copyright © 2018 System Center User Group Japan. All Rights Reserved.
トポロジー 実装状況 特徴
上位L3ルーティング L3スイッチでStatic Routing 手動でStatic Routingを設定
Host-Gateway 各コンテナホストでStatic
Routing
各ホストで他ホスト向け
Static Routeを手動設定
Open vSwitch(OVS)& OVN
with Overlay
STTなどのOverlayプロトコ
ルをOVS上で実装
Hyper-V vSwitchがあるのに
OVSを入れるとか・・・
FlannelとCNIプラグインに
よるHost Local or Overlay
各コンテナホストでStatic
Routing or VXLANカプセル化
Host Gatewayモードは大体
動く
Calicoによるルーティング BGPでL3ルーティング設定 開発途中
今回は開発が進んだFlannel構成を選択
参照:Using Windows Server Containers in Kubernetes ( https://kubernetes.io/docs/getting-started-guides/windows/ )
WindowsコンテナClusterの
アーキテクチャ実装
Section 2
11Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Kubernetes Node
Windowsコンテナ
Kubernetes Master
コンテナ
Kubernetes管理プロセス
12Copyright © 2018 System Center User Group Japan. All Rights Reserved.
etcd
kube-apiserver
kube-controller-
manager
kube-scheduler
kube-proxy
kubeletflannel
flanneld.exe
kube-dns
iptables
HNS
CNI
CNIKube-proxy
Pod, Daemon Set
• Pod:Kubernetesで管理されるApplicationの最小単位
以下の構成要素をまとめたもの
– コンテナ:一つもしくは密に連携した複数のコンテナのセット
– ストレージ:Pod内のコンテナでストレージは共有
– ネットワーク:Podに1つのIP。Pod内部はlocalhostで通信
– 設定・属性:作成方法、Labelなど
• DaemonSet:全Nodeで1つずつ実行されるPod
– たとえばNode監視Agentなど。
– Windowsには非対応。AgentなどはホストOS上で実行
13Copyright © 2018 System Center User Group Japan. All Rights Reserved.
実際のPod一覧を見てみる
14Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl get pods -o wide --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
default win-webserver-6d56b868b5-7pfqd 1/1 Running 1 20d 10.244.5.37 winworker11
kube-system etcd-kube-flannel-master 1/1 Running 4 33d 192.168.1.40 kube-flannel-master
kube-system kube-apiserver-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master
kube-system kube-controller-manager-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master
kube-system kube-dns-86f4d74b45-z8jx2 3/3 Running 14 33d 10.244.0.6 kube-flannel-master
kube-system kube-flannel-ds-zxpzz 1/1 Running 2 26d 192.168.1.41 linuxworker11
kube-system kube-flannel-ds-zxtpm 1/1 Running 4 33d 192.168.1.40 kube-flannel-master
kube-system kube-proxy-2h982 1/1 Running 2 26d 192.168.1.41 linuxworker11
kube-system kube-proxy-9dq5p 1/1 Running 2 26d 192.168.1.40 kube-flannel-master
kube-system kube-scheduler-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master
DaemonSet(Linux Nodeでのみ稼働)
Windowsコンテナーネットワーク
• コンテナNWはHyper-V vSwitchにつな
がる。
• Windows Serverコンテナの場合はホス
トOSのvNIC、Hyper-Vコンテナの場合は
仮想マシンNICを利用
• HNS(Host Network Service)がvSwitch
の設定・NAT、VFPなどを設定する。
15Copyright © 2018 System Center User Group Japan. All Rights Reserved.
出典:Windowsのコンテナーネットワーク(コンテナーネットワークの概要)
https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/container-networking/architecture
WindowsコンテナでのPod実装
• Workerは利用者が作っ
たアプリ実行コンテナ
• Infrastructureは
Kubernetesで自動的に
作られるコンテナ(ただ
Pingしてるだけ・・・)
16Copyright © 2018 System Center User Group Japan. All Rights Reserved.
出典:Windowsのコンテナーネットワーク(ネットワークとセ
キュリティの分離)
https://docs.microsoft.com/ja-
jp/virtualization/windowscontainers/container-networking/network-
isolation-security
コンテナ間通信
はlocalhost経由vNICはInfra側
のみ所有
WindowsコンテナClusterの構築
とデモ
Section 3
17Copyright © 2018 System Center User Group Japan. All Rights Reserved.
本日構築するデモ環境
18Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Kubernetes Master
(Ubuntu 16.04.4)
Worker Node1
(Windows 1803)
Worker Node2
(Windows 1803)
外部NW
192.168.1.0/24
vSwitch
NAT
コンテナNW
10.244.6.0/24
10.244.6.2
192.168.1.52
vSwitch
NAT
コンテナNW
10.244.5.0/24
10.244.5.2
192.168.1.51
iptables
NAT
コンテナNW
10.244.0.0/24
10.244.0.1
192.168.1.40
Flannel
kube-dns
Flanneld Flanneld
構築の全体的なステップ
1. Kubeadmコマンドを使ったKubernetes
Master Nodeのインストール
2. Master NodeでのFlannelのインストール
3. Windows Worker Nodeの構築
19Copyright © 2018 System Center User Group Japan. All Rights Reserved.
環境のバージョン
20Copyright © 2018 System Center User Group Japan. All Rights Reserved.
ソフトウェア バージョン
Ubuntu(Master Node用) 16.04.4
Ubuntu(Worker Node用) 18.04
Windows Server 英語版(日本語版NG) 1803 (KB未適用)
Kubernetes v1.10.3
Flannel v0.10.0
Worker Node1
(Windows 1803)
Worker Node2
(Windows 1803)
vSwitch
NAT
コンテナNW
10.244.6.0/24
10.244.6.2
192.168.1.52
vSwitch
NAT
コンテナNW
10.244.5.0/24
10.244.5.2
192.168.1.51 Flanneld Flanneld
ここで設定する部分
21Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Kubernetes Master
(Ubuntu 16.04.4)
外部NW
192.168.1.0/24
iptables
NAT
コンテナNW
10.244.0.0/24
10.244.0.1
192.168.1.40
Flannel
kube-dns
1-1. Kubernetes Masterのインストール①
• Ubuntu Server 16.04のOSをインストール
• OSに最新パッチ適用とDockerインストール
• Swapの無効化(必須)
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install -y docker.io
$ sudo vi /etc/fstab
(swapに関するマウント行をコメントアウト)
$ sudo swapoff -a
22Copyright © 2018 System Center User Group Japan. All Rights Reserved.
1-2. Kubernetes Masterのインストール②
• Kubernetesインストールリポジトリ設定
• Kubernetes、kubeadmのインストール
23Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ sudo -I
# apt-get update && apt-get install -y apt-transport-https curl
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y kubelet kubeadm kubectl
1-3. Kubernetes初期設定①
• Kubeadmコマンドによる初期設定
※pod-network-cidrはFlannel側で決め打ち
• 下記のようなNode参加用Token情報を控える
24Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ sudo -i
# kubeadm init --pod-network-cidr=10.244.0.0/16
kubeadm join 192.168.1.40:6443 --token <token> --discovery-token-ca-cert-hash
sha256:<hash>
1-4. Kubernetes初期設定②
• Kubectl実行用認証情報の作成
• kubectl動作確認
25Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.40:6443
KubeDNS is running at https://192.168.1.40:6443/api/v1/namespaces/kube-
system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
1-5. Kubernetes初期設定③
• DaemonSetのUpdateStrategy設定確認
• Kube-proxyがLinux NodeのDaemonSetでの
み稼働するよう設定変更
26Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl get ds/kube-proxy -o go-template='{{.spec.updateStrategy.type}}{{"¥n"}}' --
namespace=kube-system
RollingUpdate ←結果がRolling Updateであることを確認
$ wget
https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridg
e/manifests/node-selector-patch.yml
$ kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
2‐1. Flannelのインストール準備①
• iptablesでのBridge許可(デフォルトのはず)
• Flannelインストール用YAMLダウンロード
27Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ sudo sysctl net.bridge.bridge-nf-call-iptables=1
$ wget
https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-
flannel.yml
2‐2. Flannelのインストール準備②
• Kube-flannel.ymlの変更
28Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ vi kube-flannel.yml
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": “host-gw"
}
(中略)
nodeSelector:
beta.kubernetes.io/arch: amd64
beta.kubernetes.io/os: linux
追記
Cluster-CIDRと同じであることを確認
デフォルトの”vxlan”から
”host-gw”に修正
2‐3. Flannelのインストール
• Kube-flannel.ymlのapply
• (数分後)Flannel用Podが起動したことを確認
29Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl apply -f kube-flannel.yml
$ kubectl get pods -o wide --all-namespaces | egrep "NAMESPACE|kube-flannel-ds"
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-flannel-ds-zxtpm 1/1 Running 4 33d
Worker Node2
(Windows 1803)
vSwitch
NAT
コンテナNW
10.244.6.0/24
10.244.6.2
192.168.1.52 Flanneld
Kubernetes Master
(Ubuntu 16.04.4)
iptables
NAT
コンテナNW
10.244.0.0/24
10.244.0.1
192.168.1.40
Flannel
kube-dns
Worker Node1
(Windows 1803)
vSwitch
NAT
コンテナNW
10.244.5.0/24
10.244.5.2
192.168.1.51 Flanneld
ここで設定する部分
30Copyright © 2018 System Center User Group Japan. All Rights Reserved.
外部NW
192.168.1.0/24
3-1. Windows Worker設定情報取得
• Master NodeでService CIDR情報取得
• Master Nodeでkube-dnsのService IP取得
31Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl cluster-info dump | grep -i service-cluster-ip-range
"--service-cluster-ip-range=10.96.0.0/12"
$ kubectl describe svc/kube-dns -n kube-system
Name: kube-dns
(中略)
IP: 10.96.0.10
(以下略)
※仮想環境上で動かすための準備
1. Hyper-V NestedVM有効化Scriptをダウンロード
https://github.com/MicrosoftDocs/Virtualization-
Documentation/blob/master/hyperv-tools/Nested/Enable-NestedVm.ps1
2. Scriptを1.の仮想マシン名を引数に指定して実行し、
Nested Hyper-VとMACアドレスSpoofingを有効化。
32Copyright © 2017 System Center User Group Japan. All Rights Reserved.
PS D:¥> .¥Enable-NestedVm.ps1 【VM名】
This script will set the following for 【VM名】 in order to enable nesting:
Virtualization extensions will be enabled
Optionally enable mac address spoofing
Input Y to accept or N to cancel:Y
Mac Address Spoofing isn't enabled (nested guests won't have network).
Would you like to enable MAC address spoofing? (Y/N)Y
MACアドレスSpoofing
も有効にする
3-2. DockerのインストールとOS再起動
• PowerShellでDockerのインストール
• Dockerのサービス起動がうまくいかない
ので、OSを「2回」再起動させる
33Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
PS C:¥> Install-Package -Name Docker -ProviderName DockerMsftProvider
(Yes/Noを聞かれたら「Y」と明示的に入力する)
PS C:¥> Restart-Computer -Force
【2回OS再起動する】
3-3. Windowsコンテナイメージの準備
• WindowsコンテナImageの取得
• Dockerイメージへのタグ付け
34Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> docker pull microsoft/windowsservercore:1803
PS C:¥> docker pull microsoft/nanoserver:1803
PS C:¥> docker tag microsoft/windowsservercore: 1803
microsoft/windowsservercore:latest
PS C:¥> docker tag microsoft/nanoserver: 1803 microsoft/nanoserver:latest
3-4. Kubernetesのインストール①
• 「C:¥k¥」フォルダ以下にKubernetes設
定用Scriptをダウンロード
※ 設定Scriptは保存フォルダがC:¥k¥である前提のため、他の名称は使わない
35Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> wget https://github.com/Microsoft/SDN/archive/master.zip -o master.zip
PS C:¥> Expand-Archive master.zip -DestinationPath master
PS C:¥> mkdir C:¥k¥
PS C:¥> mv master¥SDN-master¥Kubernetes¥flannel¥l2bridge¥* C:¥k¥
PS C:¥> rm -recurse -force master,master.zip
PS C:¥> Unblock-File C:¥k¥* ←ダウンロードしたScriptの実行を許可する
3-5. Kubernetesのインストール②
• KubernetesのWindowsバイナリのダウン
ロードと展開
URL: https://storage.googleapis.com/kubernetes-
release/release/v1.10.3/kubernetes-node-windows-amd64.tar.gz
※tar.gz形式なので、Linuxで展開するかツールを別途取得。
• 共有フォルダに展開後、Nodeに保存
36Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> cd C:¥k¥
PS C:¥k¥> cp ¥¥(共有ファイルサーバーのIP)¥(フォルダのパス)¥kube*.exe .¥
3-6. Kubernetesのインストール③
• Kubernetes Masterにある
~/.kube/configファイルを保存
37Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> cd C:¥k¥
PS C:¥k¥> notepad
• メモ帳で上記の出力結果をすべて貼り付ける
• 保存する際、拡張子を「すべてのファイル」にしたうえで「config」というファ
イル名で保存する
$ cat ~/.kube/config
(出力結果をすべてコピー)
3-7. Kubernetesの実行
• Start.ps1スクリプトの引数
• 実際の実行例(Windows Node 1)
38Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> cd C:¥k¥
PS C:¥k¥> .¥start.ps1 -ManagementIP 192.168.1.51 -ClusterCIDR 10.244.0.0/24 -
ServiceCIDR 10.0.96.0/12 -KubeDnsServiceIP 10.96.0.10
start.ps1 -ManagementIP <Windows Node IP> -ClusterCIDR <Cluster CIDR> -ServiceCIDR
<Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP>
DEMO:KubernetesでWindowsコンテナ管理
• Windows用サンプルServiceのデプロイ
39Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl apply -f
https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/
manifests/simpleweb.yml
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
win-webserver-6d56b868b5-7pfqd 1/1 Running 2 21d 10.244.5.47 winworker11
$ kubectl get service win-webserver
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
win-webserver NodePort 10.107.198.123 <none> 80:32283/TCP 26d
$ curl "http://10.107.198.123/"
<html><body><H1>Windows Container Web Server</H1><p>IP 192.168.1.40 callerCount 1
</body></html>
実際のデモ
• Service IPへの疎通確認
• コンテナ内部から外部への疎通確認
• コンテナ内部からの名前解決
40Copyright © 2018 System Center User Group Japan. All Rights Reserved.
補足:MasterがUbuntu 18.04の場合
• コンテナ内部からの名前解決が失敗します。
• KubernetesのコンフィグにDNSリゾルバを明示
的に指定することで解決可能。
41Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ vi kube-dns.yml (以下の内容で作成)
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
upstreamNameservers: |
[“8.8.8.8", “1.1.1.1"]
$ kubectl apply -f kube-dns.yml
まとめ
Section 4
42Copyright © 2018 System Center User Group Japan. All Rights Reserved.
手動インストールとの手間の比較
手動設定(wincni.exe) Flannel
Masterでの実行コマンド数 44 28
Windowsでの実行コマンド数 35 19
Node間ルーティング設定 手動 全自動
Kubernetes Masterの起動 手動 自動
Windows Worker Nodeの起動 手動 手動
43Copyright © 2018 System Center User Group Japan. All Rights Reserved.
今後の動き
• Kubernetes、Flannel、CNIといったOpen Sourceエコシステムに
Windows Serverコンテナも対応してきた。
• 今後は機能拡充のために以下のような計画がある。
– Network Policy制御に対応するCalicoへの対応
– KubernetesのHyper-Vコンテナ対応(Kubernetes v1.10で実験的サポート開始)
– LCOW(Linux Container on Windows)対応
• 今回の手順もまだまだ面倒
⇒海外MVPの人がAnsibleで全自動構築できるように活動中
https://github.com/ptylenda/kubernetes-for-windows
44Copyright © 2018 System Center User Group Japan. All Rights Reserved.

More Related Content

What's hot

Interact2019 - Windows Admin Center 2019年6月のお話
Interact2019 - Windows Admin Center 2019年6月のお話Interact2019 - Windows Admin Center 2019年6月のお話
Interact2019 - Windows Admin Center 2019年6月のお話Norio Sashizaki
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 
Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Norio Sashizaki
 
Project Honolulu 見てみましょう
Project Honolulu 見てみましょうProject Honolulu 見てみましょう
Project Honolulu 見てみましょうNorio Sashizaki
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順Kotaro Noyama
 
Interact2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" NetworkingInteract2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" Networkingwind06106
 
Interact2019 ws2019 s2d_IN05
Interact2019 ws2019 s2d_IN05Interact2019 ws2019 s2d_IN05
Interact2019 ws2019 s2d_IN05Hiroshi Matsumoto
 
Ubuntu Maas1.9 クイックセットアップガイド
Ubuntu Maas1.9 クイックセットアップガイドUbuntu Maas1.9 クイックセットアップガイド
Ubuntu Maas1.9 クイックセットアップガイドVirtualTech Japan Inc.
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプTech Summit 2016
 
NSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングNSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングTomoyuki Tanigaki
 
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~Masahiko Ebisuda
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことh-otter
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxKazushi Kamegawa
 
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門Satoshi Imai
 
Docker国内外本番環境サービス事例のご紹介
Docker国内外本番環境サービス事例のご紹介Docker国内外本番環境サービス事例のご紹介
Docker国内外本番環境サービス事例のご紹介ThinkIT_impress
 

What's hot (17)

Interact2019 - Windows Admin Center 2019年6月のお話
Interact2019 - Windows Admin Center 2019年6月のお話Interact2019 - Windows Admin Center 2019年6月のお話
Interact2019 - Windows Admin Center 2019年6月のお話
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}
 
CIデモ環境 構築手順書
CIデモ環境 構築手順書CIデモ環境 構築手順書
CIデモ環境 構築手順書
 
Project Honolulu 見てみましょう
Project Honolulu 見てみましょうProject Honolulu 見てみましょう
Project Honolulu 見てみましょう
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順
 
Interact2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" NetworkingInteract2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" Networking
 
Interact2019 ws2019 s2d_IN05
Interact2019 ws2019 s2d_IN05Interact2019 ws2019 s2d_IN05
Interact2019 ws2019 s2d_IN05
 
Ubuntu Maas1.9 クイックセットアップガイド
Ubuntu Maas1.9 クイックセットアップガイドUbuntu Maas1.9 クイックセットアップガイド
Ubuntu Maas1.9 クイックセットアップガイド
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプ
 
NSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングNSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with Kubernetesのネットワーキング
 
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~
あなたも「違いが分かる人」になりましょう! ~ Azure, AzureStack, AzureStack HCI ~
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったこと
 
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & Linux
 
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
 
Docker国内外本番環境サービス事例のご紹介
Docker国内外本番環境サービス事例のご紹介Docker国内外本番環境サービス事例のご紹介
Docker国内外本番環境サービス事例のご紹介
 

Similar to Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション

Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Takashi Kanai
 
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたKubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたAkihito Inoh
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...Preferred Networks
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)Akihiro Suda
 
CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengewhywaita
 
Community_Update_JP
Community_Update_JPCommunity_Update_JP
Community_Update_JPGo Chiba
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理Yuki Yamashita
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版VirtualTech Japan Inc.
 
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話gree_tech
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側Yusuke Naka
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsshunki fujiwara
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門Toru Miyahara
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみましたShuntaro Saiba
 

Similar to Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション (20)

Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化
 
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたKubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)
 
CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallenge
 
Community_Update_JP
Community_Update_JPCommunity_Update_JP
Community_Update_JP
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
 
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
 
AlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetesAlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetes
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 

More from Takashi Kanai

Toward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackToward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackTakashi Kanai
 
Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Takashi Kanai
 
Rancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかRancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかTakashi Kanai
 
Windows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたWindows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたTakashi Kanai
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Takashi Kanai
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドTakashi Kanai
 
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドTakashi Kanai
 

More from Takashi Kanai (7)

Toward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackToward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStack
 
Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!
 
Rancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかRancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるか
 
Windows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたWindows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみた
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウド
 
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウド
 

Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション

  • 2. 自己紹介 • 名前:金井 崇 • 所属:株式会社フロンティア • 仕事:IaaSのインフラ設計・構築・運用・提案を担当 • 興味:最近はKubernetes、コンテナなどコンピューティングの 最適な利用方法に興味があります。 • MVP:Cloud and Data Center Management (2017/03~) • SNSなど: • Facebook https://www.facebook.com/anikundesu • Blog http://www.takanyan.net/ • Twitter @anikundesu • LinkedIn https://jp.linkedin.com/in/takashikanai/ja • SlideShare https://www.slideshare.net/anikundesu/presentations 2Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 3. 注意事項 本セッションは、Windows Server Version 1803 英語版とKubernetes 1.10.3での検証結果をもと に記述をしています。バージョンによっては挙動が異なる場合がありますので、ご留意ください。 本セッション資料は、個人で準備した環境において、個人的に実施した検証・結果を基に記載して います。あくまで個人の意見・見解であり、所属する会社・組織及びマイクロソフト社とは関係が ございません。所属する会社・組織・マイクロソフト社の正式な回答・見解ではない事に留意して ください。 本資料を閲覧した事により問題が生じた場合、または問題が発生しかけた場合、または生じた一切 の不利益について、発表者は一切の責任を負う事はできませんのでご了承ください。 3Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 5. Microserviceアーキテクチャと Kubernetes、Flannel Section 1 5Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 6. Microserviceアーキテクチャの特徴 6 出典:Microservices - a definition of this new architectural term https://martinfowler.com/articles/microservices.html Copyright © 2018 System Center User Group Japan. All Rights Reserved. <従来のアーキテクチャの特徴> • 1つのプロセス(実行ファイル)内に必要な 機能すべてを実装(Monolithic) • スケールアウトは機能全体を複製して実現 <Microserviceアーキテクチャの特徴> • 必要な機能を1つずつ小さなサービスとし て分離(Microservice) • スケールアウトはMicroserviceを機能単位 に複製して実現 従来のアーキテクチャ (Monolithic) Microcervice アーキテクチャ
  • 7. Microserviceアーキテクチャの内部 機能ごとにServerとNWとLBができる 7Copyright © 2018 System Center User Group Japan. All Rights Reserved. LB App Server 機能A 機能B 機能C App Server 機能A 機能B 機能C App Server 機能A 機能B 機能C DB DB LB LB Aコンテナ DB DB LB Aコンテナ Aコンテナ Bコンテナ Bコンテナ Bコンテナ Cコンテナ Cコンテナ Cコンテナ コンテナ間NW・LB コンテナ間NW・LB スケール アウト スケール アウト スケール アウト スケール アウト
  • 8. コンテナ管理ソフト:Kubernetes 8Copyright © 2018 System Center User Group Japan. All Rights Reserved. 出典:Kubernetes https://kubernetes.io/ • Googleが2014年から公開したコンテナ管理用の オープンソースソフトウェア • コンテナ間NWやStorageの管理などを行う Management Planeソフトウェア • コンテナのデファクトになったDockerでは Docker SwarmだけではなくKubernetesも同梱す るようになった コンテナ管理のほぼデファクト
  • 9. KubernetesでのSDNと各OSSの役割 コンテナ間、Node間のRoutingを自動設定するOSS がWindowsにも対応開始 9Copyright © 2018 System Center User Group Japan. All Rights Reserved. Windows (Merge待ち) Linux 各NodeにRoutingや Overlay NWを設定 各コンテナ間に必要 な通信情報を伝達 コンテナ間通信要件 からNode用設定生成 or
  • 10. コンテナ間ネットワークのトポロジー設計 10Copyright © 2018 System Center User Group Japan. All Rights Reserved. トポロジー 実装状況 特徴 上位L3ルーティング L3スイッチでStatic Routing 手動でStatic Routingを設定 Host-Gateway 各コンテナホストでStatic Routing 各ホストで他ホスト向け Static Routeを手動設定 Open vSwitch(OVS)& OVN with Overlay STTなどのOverlayプロトコ ルをOVS上で実装 Hyper-V vSwitchがあるのに OVSを入れるとか・・・ FlannelとCNIプラグインに よるHost Local or Overlay 各コンテナホストでStatic Routing or VXLANカプセル化 Host Gatewayモードは大体 動く Calicoによるルーティング BGPでL3ルーティング設定 開発途中 今回は開発が進んだFlannel構成を選択 参照:Using Windows Server Containers in Kubernetes ( https://kubernetes.io/docs/getting-started-guides/windows/ )
  • 11. WindowsコンテナClusterの アーキテクチャ実装 Section 2 11Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 12. Kubernetes Node Windowsコンテナ Kubernetes Master コンテナ Kubernetes管理プロセス 12Copyright © 2018 System Center User Group Japan. All Rights Reserved. etcd kube-apiserver kube-controller- manager kube-scheduler kube-proxy kubeletflannel flanneld.exe kube-dns iptables HNS CNI CNIKube-proxy
  • 13. Pod, Daemon Set • Pod:Kubernetesで管理されるApplicationの最小単位 以下の構成要素をまとめたもの – コンテナ:一つもしくは密に連携した複数のコンテナのセット – ストレージ:Pod内のコンテナでストレージは共有 – ネットワーク:Podに1つのIP。Pod内部はlocalhostで通信 – 設定・属性:作成方法、Labelなど • DaemonSet:全Nodeで1つずつ実行されるPod – たとえばNode監視Agentなど。 – Windowsには非対応。AgentなどはホストOS上で実行 13Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 14. 実際のPod一覧を見てみる 14Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ kubectl get pods -o wide --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE default win-webserver-6d56b868b5-7pfqd 1/1 Running 1 20d 10.244.5.37 winworker11 kube-system etcd-kube-flannel-master 1/1 Running 4 33d 192.168.1.40 kube-flannel-master kube-system kube-apiserver-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master kube-system kube-controller-manager-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master kube-system kube-dns-86f4d74b45-z8jx2 3/3 Running 14 33d 10.244.0.6 kube-flannel-master kube-system kube-flannel-ds-zxpzz 1/1 Running 2 26d 192.168.1.41 linuxworker11 kube-system kube-flannel-ds-zxtpm 1/1 Running 4 33d 192.168.1.40 kube-flannel-master kube-system kube-proxy-2h982 1/1 Running 2 26d 192.168.1.41 linuxworker11 kube-system kube-proxy-9dq5p 1/1 Running 2 26d 192.168.1.40 kube-flannel-master kube-system kube-scheduler-kube-flannel-master 1/1 Running 3 26d 192.168.1.40 kube-flannel-master DaemonSet(Linux Nodeでのみ稼働)
  • 15. Windowsコンテナーネットワーク • コンテナNWはHyper-V vSwitchにつな がる。 • Windows Serverコンテナの場合はホス トOSのvNIC、Hyper-Vコンテナの場合は 仮想マシンNICを利用 • HNS(Host Network Service)がvSwitch の設定・NAT、VFPなどを設定する。 15Copyright © 2018 System Center User Group Japan. All Rights Reserved. 出典:Windowsのコンテナーネットワーク(コンテナーネットワークの概要) https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/container-networking/architecture
  • 16. WindowsコンテナでのPod実装 • Workerは利用者が作っ たアプリ実行コンテナ • Infrastructureは Kubernetesで自動的に 作られるコンテナ(ただ Pingしてるだけ・・・) 16Copyright © 2018 System Center User Group Japan. All Rights Reserved. 出典:Windowsのコンテナーネットワーク(ネットワークとセ キュリティの分離) https://docs.microsoft.com/ja- jp/virtualization/windowscontainers/container-networking/network- isolation-security コンテナ間通信 はlocalhost経由vNICはInfra側 のみ所有
  • 17. WindowsコンテナClusterの構築 とデモ Section 3 17Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 18. 本日構築するデモ環境 18Copyright © 2018 System Center User Group Japan. All Rights Reserved. Kubernetes Master (Ubuntu 16.04.4) Worker Node1 (Windows 1803) Worker Node2 (Windows 1803) 外部NW 192.168.1.0/24 vSwitch NAT コンテナNW 10.244.6.0/24 10.244.6.2 192.168.1.52 vSwitch NAT コンテナNW 10.244.5.0/24 10.244.5.2 192.168.1.51 iptables NAT コンテナNW 10.244.0.0/24 10.244.0.1 192.168.1.40 Flannel kube-dns Flanneld Flanneld
  • 19. 構築の全体的なステップ 1. Kubeadmコマンドを使ったKubernetes Master Nodeのインストール 2. Master NodeでのFlannelのインストール 3. Windows Worker Nodeの構築 19Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 20. 環境のバージョン 20Copyright © 2018 System Center User Group Japan. All Rights Reserved. ソフトウェア バージョン Ubuntu(Master Node用) 16.04.4 Ubuntu(Worker Node用) 18.04 Windows Server 英語版(日本語版NG) 1803 (KB未適用) Kubernetes v1.10.3 Flannel v0.10.0
  • 21. Worker Node1 (Windows 1803) Worker Node2 (Windows 1803) vSwitch NAT コンテナNW 10.244.6.0/24 10.244.6.2 192.168.1.52 vSwitch NAT コンテナNW 10.244.5.0/24 10.244.5.2 192.168.1.51 Flanneld Flanneld ここで設定する部分 21Copyright © 2018 System Center User Group Japan. All Rights Reserved. Kubernetes Master (Ubuntu 16.04.4) 外部NW 192.168.1.0/24 iptables NAT コンテナNW 10.244.0.0/24 10.244.0.1 192.168.1.40 Flannel kube-dns
  • 22. 1-1. Kubernetes Masterのインストール① • Ubuntu Server 16.04のOSをインストール • OSに最新パッチ適用とDockerインストール • Swapの無効化(必須) $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install -y docker.io $ sudo vi /etc/fstab (swapに関するマウント行をコメントアウト) $ sudo swapoff -a 22Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 23. 1-2. Kubernetes Masterのインストール② • Kubernetesインストールリポジトリ設定 • Kubernetes、kubeadmのインストール 23Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ sudo -I # apt-get update && apt-get install -y apt-transport-https curl # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF # apt-get update # apt-get install -y kubelet kubeadm kubectl
  • 24. 1-3. Kubernetes初期設定① • Kubeadmコマンドによる初期設定 ※pod-network-cidrはFlannel側で決め打ち • 下記のようなNode参加用Token情報を控える 24Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ sudo -i # kubeadm init --pod-network-cidr=10.244.0.0/16 kubeadm join 192.168.1.40:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 25. 1-4. Kubernetes初期設定② • Kubectl実行用認証情報の作成 • kubectl動作確認 25Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config $ kubectl cluster-info Kubernetes master is running at https://192.168.1.40:6443 KubeDNS is running at https://192.168.1.40:6443/api/v1/namespaces/kube- system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  • 26. 1-5. Kubernetes初期設定③ • DaemonSetのUpdateStrategy設定確認 • Kube-proxyがLinux NodeのDaemonSetでの み稼働するよう設定変更 26Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ kubectl get ds/kube-proxy -o go-template='{{.spec.updateStrategy.type}}{{"¥n"}}' -- namespace=kube-system RollingUpdate ←結果がRolling Updateであることを確認 $ wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridg e/manifests/node-selector-patch.yml $ kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
  • 27. 2‐1. Flannelのインストール準備① • iptablesでのBridge許可(デフォルトのはず) • Flannelインストール用YAMLダウンロード 27Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ sudo sysctl net.bridge.bridge-nf-call-iptables=1 $ wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube- flannel.yml
  • 28. 2‐2. Flannelのインストール準備② • Kube-flannel.ymlの変更 28Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ vi kube-flannel.yml net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": “host-gw" } (中略) nodeSelector: beta.kubernetes.io/arch: amd64 beta.kubernetes.io/os: linux 追記 Cluster-CIDRと同じであることを確認 デフォルトの”vxlan”から ”host-gw”に修正
  • 29. 2‐3. Flannelのインストール • Kube-flannel.ymlのapply • (数分後)Flannel用Podが起動したことを確認 29Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ kubectl apply -f kube-flannel.yml $ kubectl get pods -o wide --all-namespaces | egrep "NAMESPACE|kube-flannel-ds" NAMESPACE NAME READY STATUS RESTARTS AGE kube-system kube-flannel-ds-zxtpm 1/1 Running 4 33d
  • 30. Worker Node2 (Windows 1803) vSwitch NAT コンテナNW 10.244.6.0/24 10.244.6.2 192.168.1.52 Flanneld Kubernetes Master (Ubuntu 16.04.4) iptables NAT コンテナNW 10.244.0.0/24 10.244.0.1 192.168.1.40 Flannel kube-dns Worker Node1 (Windows 1803) vSwitch NAT コンテナNW 10.244.5.0/24 10.244.5.2 192.168.1.51 Flanneld ここで設定する部分 30Copyright © 2018 System Center User Group Japan. All Rights Reserved. 外部NW 192.168.1.0/24
  • 31. 3-1. Windows Worker設定情報取得 • Master NodeでService CIDR情報取得 • Master Nodeでkube-dnsのService IP取得 31Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ kubectl cluster-info dump | grep -i service-cluster-ip-range "--service-cluster-ip-range=10.96.0.0/12" $ kubectl describe svc/kube-dns -n kube-system Name: kube-dns (中略) IP: 10.96.0.10 (以下略)
  • 32. ※仮想環境上で動かすための準備 1. Hyper-V NestedVM有効化Scriptをダウンロード https://github.com/MicrosoftDocs/Virtualization- Documentation/blob/master/hyperv-tools/Nested/Enable-NestedVm.ps1 2. Scriptを1.の仮想マシン名を引数に指定して実行し、 Nested Hyper-VとMACアドレスSpoofingを有効化。 32Copyright © 2017 System Center User Group Japan. All Rights Reserved. PS D:¥> .¥Enable-NestedVm.ps1 【VM名】 This script will set the following for 【VM名】 in order to enable nesting: Virtualization extensions will be enabled Optionally enable mac address spoofing Input Y to accept or N to cancel:Y Mac Address Spoofing isn't enabled (nested guests won't have network). Would you like to enable MAC address spoofing? (Y/N)Y MACアドレスSpoofing も有効にする
  • 33. 3-2. DockerのインストールとOS再起動 • PowerShellでDockerのインストール • Dockerのサービス起動がうまくいかない ので、OSを「2回」再起動させる 33Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force PS C:¥> Install-Package -Name Docker -ProviderName DockerMsftProvider (Yes/Noを聞かれたら「Y」と明示的に入力する) PS C:¥> Restart-Computer -Force 【2回OS再起動する】
  • 34. 3-3. Windowsコンテナイメージの準備 • WindowsコンテナImageの取得 • Dockerイメージへのタグ付け 34Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> docker pull microsoft/windowsservercore:1803 PS C:¥> docker pull microsoft/nanoserver:1803 PS C:¥> docker tag microsoft/windowsservercore: 1803 microsoft/windowsservercore:latest PS C:¥> docker tag microsoft/nanoserver: 1803 microsoft/nanoserver:latest
  • 35. 3-4. Kubernetesのインストール① • 「C:¥k¥」フォルダ以下にKubernetes設 定用Scriptをダウンロード ※ 設定Scriptは保存フォルダがC:¥k¥である前提のため、他の名称は使わない 35Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> wget https://github.com/Microsoft/SDN/archive/master.zip -o master.zip PS C:¥> Expand-Archive master.zip -DestinationPath master PS C:¥> mkdir C:¥k¥ PS C:¥> mv master¥SDN-master¥Kubernetes¥flannel¥l2bridge¥* C:¥k¥ PS C:¥> rm -recurse -force master,master.zip PS C:¥> Unblock-File C:¥k¥* ←ダウンロードしたScriptの実行を許可する
  • 36. 3-5. Kubernetesのインストール② • KubernetesのWindowsバイナリのダウン ロードと展開 URL: https://storage.googleapis.com/kubernetes- release/release/v1.10.3/kubernetes-node-windows-amd64.tar.gz ※tar.gz形式なので、Linuxで展開するかツールを別途取得。 • 共有フォルダに展開後、Nodeに保存 36Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> cd C:¥k¥ PS C:¥k¥> cp ¥¥(共有ファイルサーバーのIP)¥(フォルダのパス)¥kube*.exe .¥
  • 37. 3-6. Kubernetesのインストール③ • Kubernetes Masterにある ~/.kube/configファイルを保存 37Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> cd C:¥k¥ PS C:¥k¥> notepad • メモ帳で上記の出力結果をすべて貼り付ける • 保存する際、拡張子を「すべてのファイル」にしたうえで「config」というファ イル名で保存する $ cat ~/.kube/config (出力結果をすべてコピー)
  • 38. 3-7. Kubernetesの実行 • Start.ps1スクリプトの引数 • 実際の実行例(Windows Node 1) 38Copyright © 2018 System Center User Group Japan. All Rights Reserved. PS C:¥> cd C:¥k¥ PS C:¥k¥> .¥start.ps1 -ManagementIP 192.168.1.51 -ClusterCIDR 10.244.0.0/24 - ServiceCIDR 10.0.96.0/12 -KubeDnsServiceIP 10.96.0.10 start.ps1 -ManagementIP <Windows Node IP> -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP>
  • 39. DEMO:KubernetesでWindowsコンテナ管理 • Windows用サンプルServiceのデプロイ 39Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ kubectl apply -f https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/ manifests/simpleweb.yml $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE win-webserver-6d56b868b5-7pfqd 1/1 Running 2 21d 10.244.5.47 winworker11 $ kubectl get service win-webserver NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE win-webserver NodePort 10.107.198.123 <none> 80:32283/TCP 26d $ curl "http://10.107.198.123/" <html><body><H1>Windows Container Web Server</H1><p>IP 192.168.1.40 callerCount 1 </body></html>
  • 40. 実際のデモ • Service IPへの疎通確認 • コンテナ内部から外部への疎通確認 • コンテナ内部からの名前解決 40Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 41. 補足:MasterがUbuntu 18.04の場合 • コンテナ内部からの名前解決が失敗します。 • KubernetesのコンフィグにDNSリゾルバを明示 的に指定することで解決可能。 41Copyright © 2018 System Center User Group Japan. All Rights Reserved. $ vi kube-dns.yml (以下の内容で作成) apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: upstreamNameservers: | [“8.8.8.8", “1.1.1.1"] $ kubectl apply -f kube-dns.yml
  • 42. まとめ Section 4 42Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 43. 手動インストールとの手間の比較 手動設定(wincni.exe) Flannel Masterでの実行コマンド数 44 28 Windowsでの実行コマンド数 35 19 Node間ルーティング設定 手動 全自動 Kubernetes Masterの起動 手動 自動 Windows Worker Nodeの起動 手動 手動 43Copyright © 2018 System Center User Group Japan. All Rights Reserved.
  • 44. 今後の動き • Kubernetes、Flannel、CNIといったOpen Sourceエコシステムに Windows Serverコンテナも対応してきた。 • 今後は機能拡充のために以下のような計画がある。 – Network Policy制御に対応するCalicoへの対応 – KubernetesのHyper-Vコンテナ対応(Kubernetes v1.10で実験的サポート開始) – LCOW(Linux Container on Windows)対応 • 今回の手順もまだまだ面倒 ⇒海外MVPの人がAnsibleで全自動構築できるように活動中 https://github.com/ptylenda/kubernetes-for-windows 44Copyright © 2018 System Center User Group Japan. All Rights Reserved.