Contenu connexe
Similaire à Kubernetes1.9でWindowsコンテナーをクラスタ化 (20)
Kubernetes1.9でWindowsコンテナーをクラスタ化
- 2. 自己紹介
• 名前:金井 崇
• 所属:株式会社IDCフロンティア
• 仕事:IaaSの基盤設計・構築・運用・提案を担当
• 興味:仮想化 コンテナ オールフラッシュ GPU FPGA
Chef Docker PowerShell VSCode Hadoop
• 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 1709とKubernetes 1.9.2での検証結果をもとに記述を
しています。バージョンによっては挙動が異なる場合がありますので、ご留意ください。
本セッション資料は、個人で準備した環境において、個人的に実施した検証・結果を基に記載して
います。あくまで個人の意見・見解であり、所属する会社・組織及びマイクロソフト社とは関係が
ございません。所属する会社・組織・マイクロソフト社の正式な回答・見解ではない事に留意して
ください。
本資料を閲覧した事により問題が生じた場合、または問題が発生しかけた場合、または生じた一切
の不利益について、発表者は一切の責任を負う事はできませんのでご了承ください。
3Copyright © 2018 System Center User Group Japan. All Rights Reserved.
- 6. 第3のプラットフォーム
(※2016/12/17 “NAWA Tech” & “SCUGJ” 年末勉強会 発表資料から再掲)
• IDCが最初に提唱
メインフレーム、クライアント・サーバーに続く次のPlatform
• 第3のPlatformが求められる4つのシーン
Cloud、BigData、Mobile、Social
• 実現にはMicroserviceが必要
ここでコンテナが使われる
Copyright © 2018 System Center User Group Japan. All Rights Reserved. 6
- 7. Microserviceアーキテクチャの特徴
7
出典: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
アーキテクチャ
- 8. Microserviceアーキテクチャの内部
機能ごとにServerとNWとLBができる
8Copyright © 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
スケール
アウト
スケール
アウト
スケール
アウト
スケール
アウト
- 11. コンテナ管理ソフト:Kubernetes
11Copyright © 2018 System Center User Group Japan. All Rights Reserved.
出典:Kubernetes https://kubernetes.io/
• Googleが2014年から公開したコンテナ管理用の
オープンソースソフトウェア
• 今ではAzure AKS、Amazon EKS、Google GKEなど
Kubernetesのマネージドサービスを各社提供
• コンテナのデファクトになったDockerでは
Docker SwarmだけではなくKubernetesも同梱す
るようになった
コンテナ管理の標準になりつつある
- 13. 本日構築するデモ環境
13Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Kubernetes Master
(Ubuntu 17.10)
Worker Node1
(Windows 1709)
Worker Node2
(Windows 1709)
Worker Node3
(Windows 1709)
外部NW
192.168.1.0/24
vSwitch
NAT
コンテナNW
172.16.3.0/24
172.16.3.2
192.168.1.33
vSwitch
NAT
コンテナNW
172.16.2.0/24
172.16.2.2
192.168.1.32
vSwitch
NAT
コンテナNW
172.16.1.0/24
172.16.1.2
192.168.1.31
iptables
NAT
コンテナNW
172.16.0.0/24
172.16.0.1
192.168.1.20
- 15. このセクションで構築する部分
15Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Worker Node1
(Windows 1709)
Worker Node2
(Windows 1709)
Worker Node3
(Windows 1709)
外部NW
192.168.1.0/24
vSwitch
NAT
コンテナNW
172.16.3.0/24
172.16.3.2
192.168.1.33
vSwitch
NAT
コンテナNW
172.16.2.0/24
172.16.2.2
192.168.1.32
vSwitch
NAT
コンテナNW
172.16.1.0/24
172.16.1.2
192.168.1.31
Kubernetes Master
(Ubuntu 17.10)
iptables
NAT
コンテナNW
172.16.0.0/24
172.16.0.1
192.168.1.20
- 16. コンテナ間ネットワークのトポロジー設計
16Copyright © 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プラグインに
よるOverlay
VXLAN or IP-in-IPカプセル化 開発途中
Calicoによるルーティング BGPでL3ルーティング設定 開発途中
今回は必要機器が少ないHost-Gateway構成を選択
参照:Using Windows Server Containers in Kubernetes ( https://kubernetes.io/docs/getting-started-guides/windows/ )
- 17. Kubernetes Masterの構築
Kubernetes Master構築のステップ
1. Ubuntu上にKubernetesのインストール
2. CNI Pluginのインストール
3. Kubernetes初期設定
4. Kubernetesの起動
参考:Kubernetes Master From Scratch
https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/creating-a-linux-master
17Copyright © 2018 System Center User Group Japan. All Rights Reserved.
- 18. Ubuntu上にKubernetesのインストール①
• Ubuntu Server 17.10のOSをインストール
(Swapは使わない設定が理想)
• 固定IPアドレスの設定
• OSに最新パッチ適用
• 必要なパッケージのインストール
18Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install curl git build-essential docker.io conntrack python2.7
- 20. Ubuntu上にKubernetesのインストール③
• Kubernetes 1.9.2のバイナリのダウン
ロードとインストール
20Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ wget -O kubernetes.tar.gz
https://github.com/kubernetes/kubernetes/releases/download/v1.9.2/kubernetes.tar.gz
$ tar -xzf kubernetes.tar.gz
$ cd kubernetes/cluster
$ ./get-kube-binaries.sh
$ cd ../server
$ tar -xzf kubernetes-server-linux-amd64.tar.gz
$ cd kubernetes/server/bin
$ cp hyperkube kubectl ~/kube/bin/
- 22. CNI Pluginのインストール
• CNI Pluginをダウンロードして展開
22Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ DOWNLOAD_DIR="${HOME}/kube/cni-plugins"
$ CNI_BIN="/opt/cni/bin/"
$ mkdir ${DOWNLOAD_DIR}
$ cd $DOWNLOAD_DIR
$ curl -L $(curl -s
https://api.github.com/repos/containernetworking/plugins/releases/latest | grep
browser_download_url | grep 'amd64.*tgz' | head -n 1 | cut -d '"' -f 4) -o cni-plugins-
amd64.tgz
$ tar -xzf cni-plugins-amd64.tgz
$ sudo mkdir -p ${CNI_BIN}
$ sudo cp -r !(*.tgz) ${CNI_BIN}
- 23. Kubernetes初期設定①
設定をする際の各種パラメータ
23Copyright © 2018 System Center User Group Japan. All Rights Reserved.
パラメータ名 値 意味
MASTER_IP 192.168.1.20 Kubernetes Master(Ubuntu)のIPアドレス
CLUSTER_CIDR 172.16.0.0/16
コンテナクラスタ用Networkで使うCIDR
ここから各Node用に/24ずつアサインされる
API Version 1.9.2 インストールするKubernetesのバージョン
- 27. Kubernetesの起動②
• 各種コマンドで起動を確認
27Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ sudo docker ps
23個ぐらいのKubernetes関連コンテナが起動している
$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.20
(以下略)
$ ifconfig
cbr0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 172.16.0.1 netmask 255.255.255.0 broadcast 0.0.0.0
※“cbr0”というインターフェースが生成されCluster CIDRのIPがアサインされている
- 29. このセクションで構築する部分
29Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Worker Node2
(Windows 1709)
Worker Node3
(Windows 1709)
外部NW
192.168.1.0/24
vSwitch
NAT
コンテナNW
172.16.3.0/24
172.16.3.2
192.168.1.33
vSwitch
NAT
コンテナNW
172.16.2.0/24
172.16.2.2
192.168.1.32
Kubernetes Master
(Ubuntu 17.10)
iptables
NAT
コンテナNW
172.16.0.0/24
172.16.0.1
192.168.1.20
Worker Node1
(Windows 1709)
vSwitch
NAT
コンテナNW
172.16.1.0/24
172.16.1.2
192.168.1.31
- 30. WindowsコンテナNodeの構築
WindowsコンテナNode構築のStep
1. Windows ServerのNIC設定
2. DockerのインストールとOS再起動
3. Kubernetesのインストールと設定
4. Kubernetesクラスタへの参加
参考:Kubernetes on Windows
https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/getting-
started-kubernetes-windows
30Copyright © 2018 System Center User Group Japan. All Rights Reserved.
- 31. Windows ServerのNIC設定
• Node間通信に使うNICの名称を変更
※ Kubernetes設定に使うScriptはNIC名が「Ethernet」である前提のため
31Copyright © 2018 System Center User Group Japan. All Rights Reserved.
C:¥> powershell
PS C:¥> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
イーサネット Microsoft Hyper-V Network Adapter 2 Up 00-15-5D-01-0B-0E 1 Gbps
PS C:¥> Rename-NetAdapter -Name “イーサネット” -NewName “Ethernet”
PS C:¥> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet Microsoft Hyper-V Network Adapter 2 Up 00-15-5D-01-0B-0E 1 Gbps
- 34. Kubernetesのインストールと設定②
• Kubernetes実行用コンテナImageの取得
• Kubernetes用Paused Image作成
34Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥> docker pull microsoft/windowsservercore:1709
PS C:¥> docker tag microsoft/windowsservercore:1709
microsoft/windowsservercore:latest
PS C:¥> cd C:¥k¥
PS C:¥k¥> docker build -t kubeletwin/pause . ←最後のピリオドを忘れない
- 37. Kubernetesのインストールと設定⑤
• Kubernetes実行に必要な環境変数の設定
• 恒久的なシステム設定にする際は以下を
実行
37Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥k¥> $env:Path += ";C:¥k"
PS C:¥k¥> $env:KUBECONFIG="C:¥k¥config"
PS C:¥k¥> [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:¥k",
[EnvironmentVariableTarget]::Machine)
PS C:¥k¥> [Environment]::SetEnvironmentVariable("KUBECONFIG", "C:¥k¥config",
[EnvironmentVariableTarget]::Machine)
- 38. Kubernetesクラスタへの参加①
• 別Windowでのkubeletの開始
38Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥k¥> Start-Process powershell
(別ウィンドウで以下を実行)
PS C:¥k¥> $env:Path += ";C:¥k"
PS C:¥k¥> $env:KUBECONFIG="C:¥k¥config"
PS C:¥k¥> ./start-kubelet.ps1 -ClusterCidr 172.16.0.0/16
- 40. Windowsコンテナのクラスタ化①
40Copyright © 2018 System Center User Group Japan. All Rights Reserved.
Worker Node2
(Windows 1709)
Worker Node3
(Windows 1709)
外部NW
192.168.1.0/24
コンテナNW
172.16.3.0/24
172.16.3.2
192.168.1.33
コンテナNW
172.16.2.0/24
172.16.2.2
192.168.1.32
Kubernetes Master
(Ubuntu 17.10)
コンテナNW
172.16.0.0/24
172.16.0.1
192.168.1.20
Worker Node1
(Windows 1709)
コンテナNW
172.16.1.0/24
172.16.1.2
192.168.1.31
vSwitch
NAT
vSwitch
NAT
iptables
NAT
vSwitch
NAT
各Node内のコンテナNWへのStatic Route設定を追加
- 41. Windowsコンテナのクラスタ化②
• 3台のWindows Nodeで構築を実行
• Node状態が正常であることを確認
41Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready <none> 15d v1.9.2
winworker01 Ready <none> 15d v1.9.2
winworker02 Ready <none> 14d v1.9.2
winworker03 Ready <none> 14d v1.9.2
- 42. Windowsコンテナのクラスタ化③
• Windows NodeでStatic Routeの設定
※この設定は永続的。Nodeが増えたら再度実行が必要。
42Copyright © 2018 System Center User Group Japan. All Rights Reserved.
PS C:¥k¥> .¥AddRoutes.ps1 -MasterIp 192.168.1.20 -Gateway 192.168.1.1
(各NodeのコンテナNW情報をKubernetes Masterから取得し、必要なStatic Routeを自
動設定)
- 43. Windowsコンテナのクラスタ化④
• Kubernetes Master NodeでStatic Route
の設定
※この設定は非永続的。OS再起動後は都度実行が必要。
43Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ CLUSTER_PREFIX="172.16"
$ sudo route add -net $CLUSTER_PREFIX.0.0 netmask 255.255.0.0 dev eth0
$ sudo route add -net $CLUSTER_PREFIX.1.0 netmask 255.255.255.0 gw
$CLUSTER_PREFIX.1.2 dev eth0
$ sudo route add -net $CLUSTER_PREFIX.2.0 netmask 255.255.255.0 gw
$CLUSTER_PREFIX.2.2 dev eth0
$ sudo route add -net $CLUSTER_PREFIX.3.0 netmask 255.255.255.0 gw
$CLUSTER_PREFIX.3.2 dev eth0
- 45. • Windows用サンプルServiceのデプロイ
45Copyright © 2018 System Center User Group Japan. All Rights Reserved.
$ kubectl apply -f
https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/WebServer.yaml -
O win-webserver.yaml
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
win-webserver-bc9d6d478-5rwqv 1/1 Running 0 3m 172.16.2.187 winworker02
win-webserver-bc9d6d478-j7k9x 1/1 Running 0 3m 172.16.3.218 winworker03
$ kubectl get service win-webserver
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
win-webserver LoadBalancer 11.0.7.87 <pending> 80:31932/TCP 1m