Slide 1

Slide 1 text

© SIOS Technology, Inc. All rights Reserved. 世界⼀わかりみの深い コンテナ&Docker⼊⾨ 2020年6⽉29⽇ 武井 宜⾏

Slide 2

Slide 2 text

© SIOS Technology, Inc. All rights Reserved. ハッシュタグ 2 Internal Only #wakabamark

Slide 3

Slide 3 text

© SIOS Technology, Inc. All rights Reserved. About me 3 Internal Only BCPVUNF Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • クラウドネイティブアプリケーション • 千葉県在住 Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Azure Kubernetes Service Docker

Slide 4

Slide 4 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 4

Slide 5

Slide 5 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 5 Internal Only ίϯςφͱ͸ʁ コンテナとは、 平たく⾔ってしまえば、 単なるプロセスです。

Slide 6

Slide 6 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 6 Internal Only Կ͕Ͱ͖Δͷʁ OSの中にOSが⽴てられます。 $FOU04 ϗετ04 8FCαʔόʔ༻$FOU04 σʔλϕʔε༻$FOU04 ϑΝΠϧαʔόʔ༻$FOU04 似たようなのに 仮想化ってあっ たような・・・。

Slide 7

Slide 7 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 7 Internal Only Ծ૝Խͱͷҧ͍ ホストOS HyperVisor OS OS プロセス プロセス プロセス プロセス Docker Engine プロセス プロセス プロセス プロセス Ծ૝Խ ίϯςφ プロセス プロセス プロセス プロセス コンテナはOSが 不要な分だけ ⾼速︕︕

Slide 8

Slide 8 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 8 Internal Only Ծ૝Խͱͷҧ͍ ホストOS HyperVisor OS OS プロセス プロセス プロセス プロセス Docker Engine プロセス プロセス プロセス プロセス プロセス プロセス プロセス プロセス カーネル Docker上のプロセスとホストOS上のプロセスはカーネルを共有します。

Slide 9

Slide 9 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 9 Internal Only 以下のような2つのアプリケーションを⼀つの ホストOS上に構築することを考えてみます。 var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php

Slide 10

Slide 10 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 10 Internal Only ホストOS HyperVisor OS var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php OS var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php 仮想化だったら簡単︕︕

Slide 11

Slide 11 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 11 Internal Only ホストOS Docker Engine var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php コンテナではどうやるの︖ ユーザー名 かぶってるし ファイル名 かぶってるし

Slide 12

Slide 12 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 12 Internal Only そこで コンテナでは超重要な概念である の出番です。 namespace

Slide 13

Slide 13 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 13 Internal Only OBNFTQBDFͱ͸ʁ プロセス、ファイル構造、ユーザーID、グループIDなどを⼀つのOSの中で分離す る技術である。 プログラム⾔語の中ではよく登場する概念である。Javaのパッケージと⾔う概念と にているものがあり、同⼀の名称を使いたい場合(例えばUser.java)、namespace を分けると実現可能となる。 package jp.sios.funcA User.java package jp.sios.funcB User.java コンテナのコアテクノロジーであるnamespaceという技術は2006年あたりにLinux カーネルに実装された技術であり、最新の技術ではない。

Slide 14

Slide 14 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 14 Internal Only ホストOS apache(親) apache(⼦) apache(⼦) pid 1 / www html ファイル システム initプロセス pid 2 プロセス namespace A apache(親) apache(⼦) apache(⼦) / www html プロセス ファイル システム pid 1 pid 3 namespace B pid 2 pid 3 pid 2 pid 3 namespaceが異なれば同 じファイル名やディレクト リが⼀つのOS上に作れる。 pid 1

Slide 15

Slide 15 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 15 Internal Only ホストOS apache(親) apache(⼦) apache(⼦) pid 1 / www html ファイル システム initプロセス pid 2 プロセス namespace A apache(親) apache(⼦) apache(⼦) / www html プロセス ファイル システム pid 1 pid 1 pid 3 namespace B pid 2 pid 3 pid 2 pid 3 このnamespace で区切られた部分 がコンテナ

Slide 16

Slide 16 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 16 Internal Only では namespace(コンテナ) を 作ってみよう

Slide 17

Slide 17 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 17 Internal Only # ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:03 /sbin/init 2 ? S 0:00 [kthreadd] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0] 8 ? I 0:01 [rcu_sched] ………… # unshare --mount-proc -p --fork /bin/bash # ps ax PID TTY TIME CMD 1 pts/0 00:00:00 bash 11 pts/0 00:00:00 ps namespaceを作成する前は、 プロセスがたくさんあります。 namespace作成にはunshareコマンドを使います。 namespaceを作成したあと は、プロセス空間が別になる ので、bashのプロセスしか ないです。

Slide 18

Slide 18 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 18 Internal Only 参考︓コンテナ技術⼊⾨ https://employment.en-japan.com/engineerhub/entry/2019/02/05/103000 $ ROOTFS=$(mktemp -d) $ CID=$(sudo docker container create centos:centos7) $ sudo docker container export $CID | tar -x -C $ROOTFS $ ln -s /usr/local/bin/bash $ROOTFS/bin/bash $ sudo docker container rm $CID $ UUID=$(uuidgen) $ sudo cgcreate -t $(id -un):$(id -gn) -a $(id -un):$(id -gn) -g cpu,memory:$UUID $ cgset -r memory.limit_in_bytes=10000000 $UUID $ cgset -r cpu.cfs_period_us=1000000 $UUID $ cgset -r cpu.cfs_quota_us=300000 $UUID $ CMD="/bin/sh" $ cgexec -g cpu,memory:$UUID \ unshare -muinpfr /bin/sh -c " mount -t proc proc $ROOTFS/proc && touch $ROOTFS$(tty); mount --bind $(tty) $ROOTFS$(tty) && touch $ROOTFS/dev/pts/ptmx; mount --bind /dev/pts/ptmx $ROOTFS/dev/pts/ptmx && ln -sf /dev/pts/ptmx $ROOTFS/dev/ptmx && touch $ROOTFS/dev/null && mount --bind /dev/null $ROOTFS/dev/null && /bin/hostname $UUID && exec capsh --chroot=$ROOTFS --drop=cap_sys_chroot -- -c 'exec $CMD' " ファイルシステムやユーザー空間まで分けた実⽤的なCentOS7のnamespace(コ ンテナ)を作ります。

Slide 19

Slide 19 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 19 Internal Only ホストOS namespace / 先のコマンドは、以下の2つのことを 実施しています。 bin etc var log spool ・・・ / bin etc var log spool ・・・ CentOS7の動作 に必要なファイ ルを取得 namespaceの作 成

Slide 20

Slide 20 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 20 Internal Only こんなにたくさんの コマンド打つの めんどくさい・・・

Slide 21

Slide 21 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 21 Internal Only Dockerを使えば解決 たった1⾏のコマンドで、 先程のダラダラ⻑いコマンドと同じことが 実現出来ます。 $ docker run -it centos:centos7 /bin/bash

Slide 22

Slide 22 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 22 Internal Only namespaceの作成その他コンテナ作成に必要な もろもろのコマンドの簡略化 コンテナを作成するの必要なOSのイメージを Docker Hubからダウンロード つまり Dockerで実現できることは 主に以下の2つ

Slide 23

Slide 23 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 23 Internal Only ところで Docker Hubって なに︖

Slide 24

Slide 24 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 24 Internal Only %PDLFS)VCͱ͸ʁ %PDLFS)VC CentOS 6 / bin etc ・・・ 7 / bin etc ・・・ 8 / bin etc ・・・ Ubuntu 16.0 / bin etc ・・・ 18.0 / bin etc ・・・ 19.0 / bin etc ・・・ etc ・・・ bin etc ・・・ 8 / bin etc ・・・ CentOS ホストOS namespace $ docker run -it centos:centos8 /bin/bash ダウンロードしてくるイメー ジを指定 イメージをダウ ンロード 1$

Slide 25

Slide 25 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 25 Internal Only Dockefileを 使うと コンテナをカスタマイズ できます︕︕

Slide 26

Slide 26 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 26 Internal Only Dockerfile FROM centos:centos7 RUN yum –y install httpd CentOS7のイメージにApacheをインストールしてみます。そのた めのDockerfileは以下のとおりです。 CentOS7のイメージをダウンロード Apacheをインストール

Slide 27

Slide 27 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 27 Internal Only %PDLFS)VC CentOS 6 / bin etc ・・・ 7 / bin etc ・・・ 8 / bin etc ・・・ etc ・・・bin etc ・・・ 7 / bin etc ・・・ CentOS ホストOS namespace $ docker build -t web. イメージをダウ ンロード Dockerfileを作成し、以下のコマンドを実⾏すると、CentOS7のイ メージ上にApacheがインストールされたコンテナが作成されます。 1$ var httpd Apacheの インストール

Slide 28

Slide 28 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 28 Internal Only etc ・・・bin etc ・・・ 7 / bin etc ・・・ CentOS ホストOS namespace $ docker push XXX.azurecr.io/web:1.0 さらに作成したコンテナをもとにプライベートリポジトリにオリジナ ルイメージとしてプッシュ出来ます。 1$ var httpd ϓϥΠϕʔτ ϦϙδτϦ web etc ・・・bin etc ・・・ 1.0 / bin etc ・・・ var httpd

Slide 29

Slide 29 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 29 Internal Only さらにプライベートリポジトリにプッシュしたイメージを他の開発者 に配ることも出来ます。 ϓϥΠϕʔτ ϦϙδτϦ web etc ・・・bin etc ・・・ 1.0 / bin etc ・・・ var httpd ։ൃऀ" ։ൃऀ# ։ൃऀ$

Slide 30

Slide 30 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 30 Internal Only Dockerfile FROM centos:centos7 ENV idp_version=3.4.6 # Inatall the libraries neccesary for building Shibboleth IdP RUN yum -y update && \ yum -y install wget java-1.8.0-openjdk # Download Shibboleth IdP RUN wget -q https://shibboleth.net/downloads/identity-provider/$idp_version/shibboleth-identity- provider-$idp_version.tar.gz && \ tar -zxvf shibboleth-identity-provider-$idp_version.tar.gz -C /opt && \ ln -s /opt/shibboleth-identity-provider-$idp_version/ /opt/shibboleth-idp COPY bin/ /usr/local/bin/ RUN chmod 750 /usr/local/bin/init-idp.sh もっと複雑な環境を構築するためにDockerfileです。

Slide 31

Slide 31 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 31

Slide 32

Slide 32 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 32 Internal Only 開発環境の構築を例に 仮想化との違いを 考えてみます。

Slide 33

Slide 33 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 33 Internal Only Ծ૝Խͷ৔߹ package jp.sios.funcB User.java 開発環境 システム管理者 システム構成が変更になったので、開発 エンジニアの⽅は、この⼿順書に従って、 環境を変更して下さーい。

Slide 34

Slide 34 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 34 Internal Only Ծ૝Խͷ৔߹ 開発環境 あれ、開発環境がうまく動かない・・・。 あっ、⼿順書通りに実施していなかっ た・・・。 システム管理者

Slide 35

Slide 35 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 35 Internal Only ίϯςφͷ৔߹ 開発環境 Dockerイメージダウ ンロード ϓϥΠϕʔτ ϦϙδτϦ Dockerイメージから コンテナを⽣成 システム管理者 システム構成が変更になっ たDockerイメージをレポジ トリからにプッシュ

Slide 36

Slide 36 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 36 Internal Only コンテナを⽤いると開発環境の構築において以下のようなメリットが あります。 開発者のPCにDockerさえインストールされていれ ば、イメージをダウンロードするだけで環境ができ あがるので、ミスがない コンテナはカーネルを含まず軽量なのでダウンロー ドが速い。よって可搬性がよい。

Slide 37

Slide 37 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 37 Internal Only 開発環境だけでなく 本番環境にも コンテナを持っていたら 便利だと思いませんか︖

Slide 38

Slide 38 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 38 Internal Only 開発環境 Dockerイメージダウ ンロード ϓϥΠϕʔτ ϦϙδτϦ 修正したDockerイ メージをプッシュ システム管理者 システム構成が変更になっ たDockerイメージをレポジ トリからにプッシュ 本番環境 Dockerイメージから 本番環境のコンテナ を⽣成 ᶃ ᶄ ᶅ ᶆ

Slide 39

Slide 39 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 39 Internal Only 開発環境 ϓϥΠϕʔτ ϦϙδτϦ ①〜④はOSまで含む環境 なので、開発環境でも本番 環境でも、その動作に違い はない。 システム管理者 本番環境 ᶃ ᶄ ᶅ ᶆ

Slide 40

Slide 40 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 40 Internal Only つまり、本番環境にコンテナを⽤いると、以下のようなメリットがあ ります。 本番環境も検証環境も、OSまで含めた同じイメー ジを使うので、全く同じように動作する。仮想化で ありがちな、本番環境と検証環境の動作の差異がな い。 コンテナはホストOSのカーネルを共有し、OSのイ メージのみのため、サイズが⼩さく、可搬性がよい。 リポジトリからのダウンロードもすぐに終わる。

Slide 41

Slide 41 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 41 Internal Only でも、本番環境では いろんなことを 考慮しなければ なりません。

Slide 42

Slide 42 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 42 Internal Only 例えば、、、 負荷分散 無停⽌更新 監視 ネットワーク管理(ルーティングなど) 他にもたくさん、、、、

Slide 43

Slide 43 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 43 Internal Only それ、全部 Kubernetes が解決します︕︕

Slide 44

Slide 44 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 44 Internal Only 開発環境 ϓϥΠϕʔτ ϦϙδτϦ ここをKubernetesにします。 システム管理者 Kubernetes ᶃ ᶄ ᶅ ᶆ

Slide 45

Slide 45 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 45

Slide 46

Slide 46 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 46 Internal Only Kubernetesの基本原則は以下のとおりです。 Immutable Infrastructure 宣⾔的設定 変更を積み重ねず全て作り直す。例えば何か⼀箇所で も変更があった場合は、その箇所だけ修正するのでは なく、全て作り直す。 設定ファイルによって⼀旦構築したら、何が起こって もその状態を維持する ⾃⼰修復 障害が発⽣しても⾃分で勝⼿に修復する。

Slide 47

Slide 47 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 47 Internal Only Kubernetesとは、本番環境でコンテナを動かすための様々な機能を 提供するOSSです。 オートスケール スケジューリング セルフヒーリング ロードバランシング ローリングアップデート Infrastructure as Code

Slide 48

Slide 48 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 48 Internal Only Kubernetesの基本的な構成は以下のとおりです。 Pod コンテナ コンテナ Pod コンテナ コンテナ Master Node Node ・・・ ・・・

Slide 49

Slide 49 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 49 Internal Only Master Node 各Nodeの状態を管理するサーバー。例えば、各Node やPodの状態を常に監視し、どこにPodを配置したら よいかなどを管理する。 Podが配置されるサーバー。 Pod コンテナを論理的にまとめた単位。基本的には1Pod1 コンテナであることが多い。

Slide 50

Slide 50 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 50 Internal Only *OGSBTUSVDUVSFBT$PEF Kubernetesでは、すべての構成をyaml形式のファイルで⽣成します。 apiVersion: apps/v1beta1 kind: Deployment metadata: name: techlab-admin spec: replicas: 2 selector: matchLabels: app: techlab-admin strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 template: metadata: labels: app: techlab-admin spec: containers: - name: wordpress image: XXXXXX.azurecr.io/techblog/wordpress:php7.4 ・・・

Slide 51

Slide 51 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 51 Internal Only ϩʔυόϥϯγϯά httpd httpd httpd httpd httpd httpd httpd httpd httpd Node1 Node2 Node3 httpd …コンテナ ロードバランサー

Slide 52

Slide 52 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 52 Internal Only Φʔτεέʔϧ httpd httpd httpd httpd httpd httpd httpd httpd httpd Node1 Node2 Node3 httpd …コンテナ httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd httpd リクエスト数や負荷に応じ てコンテナを増減

Slide 53

Slide 53 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 53 Internal Only εέδϡʔϦϯά httpd httpd httpd httpd httpd httpd httpd httpd httpd Node1(HDD) httpd …コンテナ DB DB DB DBなどディスクIOが多いコン テナを⾼速なディスク(SSD)の あるノードに配置する。 Node2(HDD) Node1(SSD)

Slide 54

Slide 54 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 54 Internal Only ηϧϑώʔϦϯά httpd httpd httpd httpd httpd httpd Node1(HDD) httpd …コンテナ Nodeに障害などが発⽣してコ ンテナ(プロセス)が停⽌した場 合、コンテナを再起動したり別 のNodeに移したりして、処理 を継続する。 Node2(HDD) Node1(SSD) java java java java java java

Slide 55

Slide 55 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 55 Internal Only ϩʔϦϯάΞοϓσʔτ httpd httpd httpd httpd httpd httpd Node1(HDD) httpd …コンテナ Node2(HDD) Node1(SSD) httpd httpd httpd httpd httpd httpd 旧 新 旧 旧 新 新 旧コンテナへのユーザーか らのアクセスを遮断 ᶃ 旧コンテナを停⽌ ᶄ 新コンテナを起動 ᶅ 新コンテナへのユーザー からのアクセスを開始 ᶆ

Slide 56

Slide 56 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 56 Internal Only ϩʔϦϯάΞοϓσʔτͷ಺෦తͳॲཧ terminationGracePeriodSeconds (40秒) preStop sleep 3 apachectl –k graceful-stop sleep 30 SIGTERM SIGKILL サービス 除外 ユーザーの接続 ユーザーの接続

Slide 57

Slide 57 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 57 Internal Only Kubernetesのアーキテク チャは以下のとおりです。 Pod コンテナ コンテナ kube-proxy kubelet API Server Scheduler Pod コンテナ コンテナ kube-proxy kubelet Master Node Node ・・・ ・・・ etcd コマンド群 kubectl apply kubectl delete kubectl …

Slide 58

Slide 58 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 58 Internal Only API Server Restのインタフェースを持つプロセスで、Kubernetes のリソース情報(Podに関する情報やCluster IPなど)を 管理します。kube-proxyやkubeletなどの全てのプロ セスは、このAPI Serverを介して、お互いの情報をや り取りします。 etcd kubernetesの情報を保存する⾼信頼分散KVSです。 API Serverは、Kubernetes稼働に必要な情報全てを etcdに情報を保存します。他にもflannel(Pod間の通信 を実現するVXLAN管理サービス)も利⽤します。 kubelet Podの⽣成や停⽌を⾏います。定期的にAPI Serverに問 い合わせて、⽣成や停⽌の数やタイミングを決めていま す。

Slide 59

Slide 59 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 59 Internal Only scheduler 各Nodeの空き状況や状態を監視して、その結果をAPI Serverを通じて、kubeletに伝える役割を持っています。 この情報を参考にして、kubeletはコンテナを⽣成しま す。例えば、後述しますが、ReplicaSetで複数台ス ケールするクラスタを作成したときは、このScheduler が開いているNodeにコンテナを作成するようkubelet に指⽰します。そして、コンテナは複数のNodeに配置 されます。 kube-proxy Cluster IPの管理を⾏います。Cluster IPとは、サービ スにアクセスするための代表的なIPアドレスになります。 Load BalancerなどのVIPに近いイメージです。このIP アドレスにアクセスすると、そのリクエストは複数の Podに分散されます。kube-proxyのお仕事は、定期的 にAPI Server経由でKubernetesのリソース情報にアク セスし、必要に応じてiptableseのルールを作成し、 iptablesの機能によって負荷分散を⾏います。

Slide 60

Slide 60 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 60 Internal Only kubectl kubectlなどのコマンド群です。ユーザーのインター フェースになります。このコマンドを使って、クラスタ を作成したり削除したりとか、Kubernetesにおける全 ての管理をします。実際はAPI Serverにリクエストを 投げています。

Slide 61

Slide 61 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 61 Internal Only API Server kubelet kube-proxy scheduler kubectl etcd 何か変更ないです か︖変更あればコン テナ構成を更新しま すよ。 何か変更ないです か︖変更あればネッ トワーク構成を更新 しますよ。 何か変更ないです か︖変更あればコン テナの配置変更しま すよ。 構成変更したいので、 宜しくお願いしま す︕︕ etcdさん、変更情報 記録してくださ い︕︕

Slide 62

Slide 62 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 62 Internal Only ネットワーク構成って どうなってますか︖

Slide 63

Slide 63 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 63 Internal Only Kubernetesのネットワーク構成は以下のとおりです︕︕ eth0 eth0 10.4.4.5 172.30.31.2 docker0 172.30.31.1 flannel.1 Cluster IP 10.254.236.167/32 eth0 eth0 172.30.91.1 docker0 172.30.91.1 flannel.1 172.30.31.0 10.4.4.7 172.30.91.0 node01 node02 Pod Pod httpd httpd Cluster IP 10.254.236.167/32

Slide 64

Slide 64 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 64 Internal Only 先にご紹介したKubernetesのネットワーク図の解説です。 Pod間のネットワークはflannelというVXLANを管理するソフトウェアに より、172.30.0.0/16というネットワーク空間を持ち、さらにそのネッ トワークをPodごとに24ビットのネットワーク空間に区切っている。 flannel.1というデバイスがVXLANデバイスである。 別ノード宛のパケットは、VXLANデバイスflannel.1によりVXLANヘッ ダが付与された形でカプセル化され、nodeのeth0を通り、別ノードに 届く。

Slide 65

Slide 65 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 65 Internal Only 先にご紹介したKubernetesのネットワーク図の解説です。 doker0という仮想ブリッジ(IPアドレスをもっている)があり、Podはこ のブリッジにつながっている。 Cluster IPというIPアドレスがある。ネットワークインターフェースは 持たず、iptablesの中で定義された仮想的なIPアドレスである。このIP アドレス宛のパケットは各nodeにロードバランスされる。

Slide 66

Slide 66 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 66 Internal Only Kubernetes・・・構築するもの多すぎ・・・運⽤・管理も⼤ 変・・・ masterサーバー Nodeが必要な分 だけ API Server kubelet scheduler ストレージ Dockerレジストリ ネットワーク

Slide 67

Slide 67 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 67 Internal Only すべてマネージドにおまかせしましょう︕︕ masterサーバー Nodeが必要な分 だけ API Server kubelet scheduler ストレージ Dockerレジストリ ネットワーク

Slide 68

Slide 68 text

© SIOS Technology, Inc. All rights Reserved. Kubernetesとは︖ 68 Internal Only そこで Azure Kubernetes Service の出番です︕︕

Slide 69

Slide 69 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 69

Slide 70

Slide 70 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 70 Internal Only Azure Kubernetes Serviceの特徴は以下のとおりです。 Masterサーバー、Nodeサーバーを構築する必要な し。管理も全ておまかせ。 Kubernetes⾃⾝のバージョンアップもGUIで⼀発 あとからNodeの追加も可能

Slide 71

Slide 71 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 71 Internal Only GUIでらくらく環境構築︕︕

Slide 72

Slide 72 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 72 Internal Only Kubernetesで実は⼀番⼤変なロギングもすでにサービスが⽤意され ている。

Slide 73

Slide 73 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 73 Internal Only もし、負荷が増⼤しNodeの追加が必要になったときでも、簡単に増 減が可能。

Slide 74

Slide 74 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 74 Internal Only 進化が速いKubernetesのバージョンアップもGUIで⼀発︕︕

Slide 75

Slide 75 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 75 Internal Only Azure Kubernetes Serviceって 何で出来てるの︖

Slide 76

Slide 76 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 76 Internal Only AKSクラスター Masterの機能 API Server Scheduler etcd Nodeの機能 Azure Load Balancer ・・・ Virtual Macihne (Virtual Machine Scale Sets) Virtual Netowork Azure Container Registry Public IP Address Log Analytics Azure DNS

Slide 77

Slide 77 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 77

Slide 78

Slide 78 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 78 Internal Only Kubernetesは 銀の弾丸ではありません。

Slide 79

Slide 79 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 79 Internal Only Kubernetesは複雑なシステムで 設計が⼤変です。 Kubernetesが適さいないサービスに 導⼊をすると、 運⽤管理の⼿間ばかり増えて 不幸になります・・・。

Slide 80

Slide 80 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 80 Internal Only Kubernetes導⼊可否判断のポイントは、以下の3つです。 その1︓頻繁な機能変更・追加があるかどうか︖ その2︓⼤量のリソースを消費するかどうか︖ その3︓急激なスケールアウトが必要かどうか︖

Slide 81

Slide 81 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 81 Internal Only ͦͷɿසൟͳػೳมߋɾ௥Ճ͕͋Δ͔Ͳ͏͔ʁ 頻繁な機能変更・追加がある場合は、Kubernetes向きのシステムです。 Kubernetesにはローリングアップデート、ブルーグリーンデプロイ、 カナリーデプロイ等、ユーザー影響なくデプロイできる機能が揃って いる。 1機能1コンテナ単位で開発を⾏う「マイクロサービスアーキテク チャ」を⽤いると、Kubernetesはコンテナ単位で管理ができるので、 運⽤が楽になる。例えば冒頭にご紹介した「スケジューリング」を⽤ いてIOの必要な機能は、SSDがあるノードに配置するなど。

Slide 82

Slide 82 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 82 Internal Only ͦͷɿେྔͷϦιʔεΛফඅ͢Δ͔Ͳ͏͔ʁ ⼤量のリソースを消費するサービスの場合、Kubernetesには向きません。 Kubernetesは、kube-proxyやkubelet等、Node上で様々なサービス が稼働するためオーバーヘッドが⾼く、⼤量にメモリやCPUを消費す るサービスを載せられません。 このような場合は、VirtualMachineのほうが、Kubernetesのような オーバーヘッドもないのでパフォーマンスを発揮できます。

Slide 83

Slide 83 text

© SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service 導⼊のポイント 83 Internal Only ͦͷɿٸܹͳεέʔϧΞ΢τ͕ඞཁ͔Ͳ͏͔ʁ 急激なスケールアウトが必要なサービスの場合は、Kubernetes向きのシス テムです。 Kubernetesは、コンテナという単位で稼働するため、サービスの起 動が⾼速で、スケールアップが得意です。簡単にスケールアウトしや すいサービスの場合、Kubernetes向きであると⾔えます。 逆に、スケールアップすることでしかパフォーマンス向上を図れない 場合、VirtualMachineやAppServiceのほうが向いています。

Slide 84

Slide 84 text

© SIOS Technology, Inc. All rights Reserved. よく頂くご質問 84

Slide 85

Slide 85 text

© SIOS Technology, Inc. All rights Reserved. よく頂くご質問 85 Internal Only Kubernetesを本番で使う予定ないんだけ ど、、、 それでもKubernetesを学ぶ価値は⼗分にあ ります。Kubernetesには、今後のシステム 設計に必要なエッセンスがたくさん詰まって います。マイクロサービス、ブルーグリーン デプロイ、カナリーリリース、ステートレス な設計などです。Kubernetesを学ぶことに よって得た知識は、必ず他のシステムでも役 に⽴ちます︕︕

Slide 86

Slide 86 text

© SIOS Technology, Inc. All rights Reserved. よく頂くご質問 86 Internal Only Kubernetesってむずかしいですか︖ Kubernetesはたくさんのコンポーネントが 複雑に絡み合い、そしてアプリケーションと インフラの両⽅の知識が必要になるので、難 しいと思われがちですが、そうではありませ ん。コンピューター理論の基本(TCP/IPや HTTPのプロトコル)さえ抑えておけば⼤丈夫 です。Kubernetesは最新の技術ですが、 ベースとなっているのは実にレガシーな技術 の塊です。

Slide 87

Slide 87 text

© SIOS Technology, Inc. All rights Reserved. 最新事例 87

Slide 88

Slide 88 text

© SIOS Technology, Inc. All rights Reserved. 最新事例 88 Internal Only 弊社技術ブログを Azure Kubernetes Serviceに 移⾏しました。

Slide 89

Slide 89 text

© SIOS Technology, Inc. All rights Reserved. 最新事例 89 Internal Only

Slide 90

Slide 90 text

© SIOS Technology, Inc. All rights Reserved. 最新事例 90 Internal Only 詳細は、弊社技術ブログを ご参照ください。 https://tech-lab.sios.jp/archives/18794 Azure Kubernetes Serviceで実現する超低予算 &(ほぼ)フルマネージド&本格的なWordPress環境

Slide 91

Slide 91 text

© SIOS Technology, Inc. All rights Reserved. さいごに 91

Slide 92

Slide 92 text

© SIOS Technology, Inc. All rights Reserved. さいごに 92 Internal Only Internal Only https://tech-lab.sios.jp/ DockerやKubernetesについては、弊社技術ブログで も、より詳細な情報をお届けしております。

Slide 93

Slide 93 text

© SIOS Technology, Inc. All rights Reserved. さいごに 93 Internal Only Azure Kubernetes Serviceで実現する超低予算&(ほぼ)フルマネージド&本格的な WordPress環境 https://tech-lab.sios.jp/archives/18794 ؔ࿈ϒϩά Azure Kubernetes Serviceで最速k8s https://tech-lab.sios.jp/archives/18536 実際の開発フローにおけるKubernetesの使い⽅ https://tech-lab.sios.jp/archives/7745 Kubernetesのネットワーク構成 https://tech-lab.sios.jp/archives/7857 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ https://tech-lab.sios.jp/archives/18811

Slide 94

Slide 94 text

© SIOS Technology, Inc. All rights Reserved. さいごに 94 Internal Only 先々⽉発売のSoftware Designの VS Code + Docker関連の話題を執筆しました。

Slide 95

Slide 95 text

ご清聴ありがとうございました