Kubernetesの良さを活かして
開発‧運⽤! [公開版]
株式会社サイバーエージェント

技術本部 Private Cloud Group

Nakanishi Kento @whywaita



技術本部 サービスリライアビリティグループ

KIRII Yuki

オープンソースカンファレンス 2019 Tokyo/Fall @ 明星⼤学
1
Nakanishi Kento / whywaita
• 株式会社サイバーエージェント 技術本部

プライベートクラウドグループ 開発チーム
• 2019年新卒⼊社 (試⽤期間終わりました!)
• 仕事: OpenStack / Kubernetes / 採⽤, 広報
• OSC発表歴: Tokyo/Fall (LT) , Nagoya (東海道LT)
• d g 投稿者
みくったーとかその辺の界隈に居たりもします
• 執筆書籍: PR-based Preview Env in Kubernetes
てっき〜メディア(304)ブースで売ってるらしい!!いますぐ購⼊!!!
2
3
.はじめに
.Cloud Native ⼊⾨
.コンテナオーケストレーションにとどまらな
いKubernetesの魅⼒
4
はじめに

会社紹介
5
6
7
Vision
8
9
10
11
12
様々な勉強会にて登壇 (沢⼭)
単著の執筆 (新卒4年⽬) ⾃作システムがメディア掲載 (新卒2年⽬)
ベストエンジニア賞受賞
13
14
発表者について
15
三本柱
•メディア: 動画、ブログ、⾳楽など



•広告: Webやスマホ向けの広告配信
•ゲーム: 主にスマホ向けゲーム
16
三本柱
•メディア: 動画、ブログ、⾳楽など



•広告: Webやスマホ向けの広告配信
•ゲーム: 主にスマホ向けゲーム
17
それぞれのメイン領域
•どちらもメディア事業部所属
•プライベートクラウド
•VMを提供するところまで
•特にOpenStackを担当
•サービスリライアビリティ
•サービスインフラが動くまで
•最近はKubernetesを担当
18
はじめに

サークル紹介
19
てっき〜メディア
• 元翔泳社の編集者で技術書刊⾏に携わって

いた⽯川⽒が運営するプライベートメディア
• 同⼈サークル 兼 株式会社でもある
• IT業界向け技術情報をまとめてお届け
• 対象分野: コンピューティングインフラ、

クラウド、CI/CD、OS、ミドルウェア、etc
•技術書典8 も参加予定!!
20
CloudNative ⼊⾨
21
会場アンケート 🙋
•聞いたこともない
•聞いたことぐらいはある
•興味はあるがさわっていない
•さわったことがある
•趣味で使っている
•仕事で使っている
22
Cloud Native / Kubernetes を
全ての選択肢で

⽐率が同じぐらいでした
技術書典7では
•3冊頒布しました
•PR-based Preview Env in Kubernetes
• 中⻄建登 / 松⽥正也 著
•はじめるCluster API
• 桐井 祐樹 著
•⽇本語版GitLab CIリファレンス
• 明⽇から始めるGitLabCIはじめの⼀歩

@ F : 〜 講師: ⽮野 哲朗
23
PR-based Preview Env in Kubernetes
•「Pull Requestをベースに、開発
環境を⾃動で⽣成してみよう!」

という⼀冊
•Kubernetes / GCP 上に展開された
アプリケーションを良い感じに展開
する⽅法まとめ
• サンプルコード付きなので再現
しやすい!
•てっき〜メディアブースにて

絶賛販売中!!!!!!急げ!!!!!!!!!!!!
24
Cloud Nativeとは?
25
定義はさまざま








[ ]: https://pivotal.io/jp/cloud-native

[ ]: https://www.redhat.com/ja/topics/cloud-native-apps
Cloud Nativeとは?
•Cloud Native Computing Foundation (通称CNCF) によると
26
Cloud Nativeとは?
•Cloud Native Computing Foundation (通称CNCF) によると
•クラウドネイティブ技術は、パブリッククラウド、プライベートクラ
ウド、ハイブリッドクラウドなどの近代的でダイナミックな環境にお
いて、スケーラブルなアプリケーションを構築および実⾏するための
能⼒を組織にもたらします。
•このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロ
サービス、イミュータブルインフラストラクチャ、および宣⾔型APIが
あります。
•これらの⼿法により、回復性、管理⼒、および可観測性のある疎結合
システムが実現します。 これらを堅牢な⾃動化と組み合わせること
で、エンジニアはインパクトのある変更を最⼩限の労⼒で頻繁かつ予
測どおりに⾏うことができます。 27
Cloud Nativeとは?
28
❓🤔❓🤔❓
⻑くて少し

分かりづらいですね
Cloud Nativeとは?
「疎結合」「回復⼒」「管理性」「可観測性」
「⾃動化による堅牢 / 柔軟性」なシステム
29
あくまで私の解釈です
Cloud Nativeを実現する材料
•OSSなアプリケーション
•Docker / Kubernetes
•パブリッククラウドが提供するマネージドな

ミドルウェアサービス (DB, LB, Storage)
•実質無限スケール
•MicroServices というアーキテクチャ
•考え⽅は以前から存在していたが再注⽬
30
このあたりの材料を

組み合わせると

Cloud Nativeになりえる
31
今までのアプリケーション
•LB - App - DB の⻩⾦な三層構造
•クラウド以前なら全てオンプレ(当たり前)
•Varnish / Apache / MySQL など鉄板
•DBレプリケーションなど
•Xen登場も影響した現場もあったでしょう
•Read / Write⽤のIPアドレスを変えたり
•3〜5台冗⻑ぐらいにはなっていたのでは
32
今までのアプリケーション
•前提がいくつか存在
•DBをスケールさせるのには限界がある…
•サーバの設定は都度確認が必要
• ansible / itamae / Chef とか

serverspecとかはあるけど…
•アプリケーションのデプロイは⽉1ぐらい
• 開発サーバは⼈間より少ないから⼿元で
33
そこでクラウド
34
クラウド時代の到来
•マネージドサービスによりほぼ無限スケール
するミドルウェアの登場
•短時間のみ借りる運⽤により、アプリも

分, 秒単位のスケールイン / アウトが可能に
•開発者が開発する時だけインスタンスを

借りる運⽤なども
35
インスタンス⼀台の⽣存時間が⾮常に短くなった
クラウド時代の到来
. インスタンス短命化→構築の省⼒化が急務
. アプリケーション起動の短縮化必須
. あえて不変的にすることにより、

アプリケーションの起動を担保する技術で
あるコンテナの価値上昇
. より⼿軽にコンテナを展開出来る環境

Kubernetesなどの出現
36
Kubernetesとは?
•Google社製OSS(現在はコミュニティ)
•複数台のサーバでクラスタを組み、その上で
コンテナを配置 / 適切に起動するシステム
•外部からコンテナにL 接続するService、

クラスタ全台に1つずつコンテナを配置する
DaemonSetsなど様々な概念が存在
•エコシステム / サブプロジェクトが豊富に存在
37
Kubernetesの特徴
. Declarative (宣⾔的) API
. Reconciliation Loop
. Custom Resource / Eco system
38
特徴1: 宣⾔的API
「この状態であってほしい」という状態を
ユーザが宣⾔し、システムが追従する
39
not宣⾔的APIな例
•Nginx インストール / 起動シェルスクリプト
40
宣⾔的の対⽐として

「命令的」などと呼びます
宣⾔的APIな例
41
宣⾔的APIな例
42
• Nginx 台を起動するYAML
• ユーザはこれ以上追加操作
が不要
• システムが⾃律して
「Nginx 台起動」

という状況に⾃動遷移する
宣⾔的APIな例
43
Deployment
ReplicaSet
Pod
Container
⾃動⽣成
⾃動⽣成
⾃動⽣成
宣⾔的API
•なにが嬉しいのか?
•YAMLファイルにより状態をクラスタ内に

定義することが可能となる
•何らかの障害が起きた場合も同様に⾃律

して回復が⾏われる (Reconciliation Loop)
• クラスタが状態を持ち、

クラスタが状態に合わせる
44
Reconciliation Loop
45
Deployment
ReplicaSet
Pod
Container
⾃動⽣成
⾃動⽣成
⾃動⽣成
Reconciliation Loop
46
Deployment
ReplicaSet
Pod
Container
⾃動⽣成
⾃動⽣成
⾃動⽣成
何らかの要因で

障害が発⽣し、プロセス終了!
Reconciliation Loop
47
Deployment
ReplicaSet
Pod
⾃動⽣成
⾃動⽣成
プロセスが終了したため

コンテナが消滅してしまう
Reconciliation Loop
48
Deployment
ReplicaSet
Pod
⾃動⽣成
⾃動⽣成
Container
⾃動⽣成
Reconciliation Loop
49
Deployment
ReplicaSet
Pod
⾃動⽣成
⾃動⽣成
Container
⾃動⽣成
Reconciliation Loop
50
Deployment
ReplicaSet
Pod
⾃動⽣成
⾃動⽣成
Container
⾃動⽣成Reconcilation Loopにより

⾃動的に復活!
特徴2: Reconciliation Loop
•とある状態を維持 or とある状態への遷移を

⾃律的に⾏うためのLoop⾏動
•コンテナのみならず、Kubernetes全体の

システムに適⽤されている
•ex: kube-apiserver etc
•これにより容易にコンテナ再起動などが⾏える
51
特徴3-1: Custom Resource
•「宣⾔されたもの」はResourceと呼ばれる
•標準Resourceの例
•Pod (コンテナ)
•Service (コンテナへのL 接続)
•PersistentVolume (永続化ストレージ)
•Secret (秘匿情報)
•CronJobs (cron設定)
52
特徴3-1: Custom Resource
•拡張されたResource
•開発者が⾃由に作ることが可能
•よく使われるCustom Resourceの⼀例
•Ingress (コンテナへのL 接続)
•CertificateRequests (SSL証明書要求)
•Certificates (SSL証明書のCR版)
• Reconciliation Loopも利⽤可能
53
特徴3-2: Eco System
•Kubernetesの宣⾔に乗るエコシステム
•Ingress(L ロードバランサー)を作成すると

インストールしたLBが環境に合わせて⽣成
•AWS: ALB (kubernetes-sigs/aws-alb-ingress-controller)
•GCP: GCP HTTP(S) ロードバランサ
•オンプレ: Nginx (kubernetes/ingress-nginx)
54
特徴3-2: Eco System
•抽象化された宣⾔を実装に落とし込ための

コントローラを環境に合わせてカスタマイズ
•kubernetes-sigs/external-dns
• Route , CloudFlare, RFC (DNS UPDATE)
•Container Storage Interface
• Amazon EBS, Ceph RBD, hostpath
•Container Network Interface
• Amazon VPC CNI plugin, Calico, Flannel
55
Cloud Nativeとは?[再掲]
「疎結合」「回復⼒」「管理性」「可観測性」
「⾃動化による堅牢 / 柔軟性」なシステム
56
Cloud Nativeとは?[再掲]
「疎結合」「回復⼒」「管理性」「可観測性」
「⾃動化による堅牢 / 柔軟性」なシステム
57
Kubernetesは「ある程度」実現してくれる
雑談: kubernetes-sigsとは?
•SIG: ざっくり「興味ある奴集まれスレ」
•https://github.com/kubernetes-sigs/
•実験的 / サブプロジェクトと呼ばれるものが
集まっており、エコシステムを加速中
•類似概念: working group (wg)
•詳しくは: https://github.com/kubernetes/community
58
Kubernetesで何ができるようになった?
•宣⾔的APIで起動できるアプリケーションは
「⽐較的」複製しやすい
• もちろんそのように作る必要有
•名前を変えて宣⾔することにより、同じ

アプリケーションが新しく⽴ち上げられる
• 同じクラスタ、別クラスタどちらでも可

59
Kubernetesで何ができるようになった?
•宣⾔的APIで起動できるアプリケーションは
「⽐較的」複製しやすい
• もちろんそのように作る必要有
•名前を変えて宣⾔することにより、同じ

アプリケーションが新しく⽴ち上げられる
• 同じクラスタ、別クラスタどちらでも可
•Pull Reqごとに⽣成も簡単に!!!
60
[PR] PR-based Preview Env in Kubernetes
•Terraform を⽤いて別クラスタ⽣成 or

既存クラスタ上でPRコードの環境⽣成!
•Google Kubernetes Engineベース
•特有の話はしてないのでAWSオンプレも🙆
•実際にPRベースに環境を作るサンプル付き!!
•周辺プロダクトの紹介も少しあるぞ!!
61
[PR] PR-based Preview Env in Kubernetes
62アーキテクチャ図
[PR] PR-based Preview Env in Kubernetes
•Terraform を⽤いて別クラスタ⽣成 or

既存クラスタ上でPRコードの環境⽣成!
•Google Kubernetes Engineベース
•特有の話はしてないのでAWSオンプレも🙆
•実際にPRベースに環境を作るサンプル付き!!
•周辺プロダクトの紹介も少しあるぞ!!
63
よくあるCloud Nativeへの誤解
•「コンテナ / Kubernetesを導⼊さえすれば
Cloud Native!」ではない 🙅
• あくまで考え⽅、あり⽅の⼀種
•オンプレはCloud Nativeと無縁ではない🙅
• Cloudベースな考えも多いが、オンプレ
転⽤も⼗分に可能
• 実際発表者はオンプレの部署です

(プライベートクラウドグループ) 64
まとめ
•Cloud Nativeの特徴など概要をご紹介
• 様々な考え⽅の下⽣まれた1つのあり⽅
•どうして⼈類はCloud Nativeに⾄ったのか?
• クラウドの登場、変化するアプリケーション
•Kubernetesに⼈々が注⽬する理由をご紹介
• 3つの特徴、抽象化と具体的の境界線
65
このスライドは発表の前半部分です
後半はこちら:

https://speakerdeck.com/yukirii/
osc tk-yukirii-k s
66

Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk