Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebエンジニアのためのKubernetesサクッと入門
Search
mokichi
November 30, 2020
Programming
1
180
WebエンジニアのためのKubernetesサクッと入門
NPO法人みんなのコード様の社内勉強会にて使用した資料を、許可を得て公開させていただきます。
mokichi
November 30, 2020
Tweet
Share
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
2
490
Rubyistから見たElixir
mokichi
1
480
動的画像変換サービス「imagepix」のご紹介
mokichi
1
280
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
3
980
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
260
Ractorが出たからRubyの並列処理をおさらいする
mokichi
0
800
未来予知できない凡人の生存戦略
mokichi
0
92
Other Decks in Programming
See All in Programming
SourceGeneratorのススメ
htkym
0
150
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
930
Oxlintはいいぞ
yug1224
5
1.1k
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
130
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
Graviton と Nitro と私
maroon1st
0
170
Fluid Templating in TYPO3 14
s2b
0
110
AtCoder Conference 2025
shindannin
0
990
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
130
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.6k
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.4k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Odyssey Design
rkendrick25
PRO
0
470
GraphQLとの向き合い方2022年版
quramy
50
14k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
69
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.6k
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
100
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Everyday Curiosity
cassininazir
0
120
Faster Mobile Websites
deanohume
310
31k
Building Adaptive Systems
keathley
44
2.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
400
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
230
Transcript
Webエンジニアのための Kubernetesサクッと入門 株式会社スマートアルゴリズム 代表取締役 齋藤 和也
自己紹介 1988年生まれ、福岡県出身、九州工業大学情報工 学部卒。 フリーランスとして2年ほど、Webサービスやスマー トフォンアプリの受託開発を中心に活動。アジャイル 開発を実践し、保守性・拡張性の高い設計を得意と する。 独立前は研究用ソフトウェアの開発に従事してお り、機械学習や自然言語処理といった分野にも明る い。
2015年1月、株式会社スマートアルゴリズムを設 立、代表取締役に就任。
ゴール KubernetesでWebアプリを運用する上で 最低限必要な構成要素をおさえよう!
Dockerについて 言わずと知れたコンテナ仮想化ソフトウェア VMのようにゲストOSがない分オーバーヘッドが小さい Kubernetesとは何か? | Kubernetesより引用
Dockerだけだと何がまずいの? Dockerの役割=コンテナを動かすだけ • 複数のコンテナをまとめて扱いたい場合は? • イメージを更新した際のコンテナの入れ替えは? • 負荷分散はどうする? • サーバが複数台あったら?
オーケストレーションは別で考える必要がある
そこでKubernetes!
Kubernetes(k8s)とは コンテナオーケストレーションのデファクトスタンダード 複数台のサーバをクラスタ化し、設定内容に応じてコンテナのラ イフサイクルを管理したり自己修復したりしてくれる
k8sのアーキテクチャ Kubernetes - Wikipediaより引用 GKE等のマネージドサービスは Masterの面倒を見てくれる kubectlコマンドで クラスタを制御
CronJob (fetch-weather) Webアプリ on k8s の構成例 (プログル情報の場合) Pod (proguru-high-xxx) nginx
rails Pod (python-xxx) python Service (proguru-high) Service (python) Ingress (proguru-high) high.proguru.jp/* high.proguru.jp/************ Job (fetch-weather-xxx) Deployment (proguru-high) Deployment (python)
Deployment • ローリングアップデートやロールバックといっ たデプロイ管理の仕組みを提供 • Deployment が ReplicaSet を管理し、 ReplicaSet
が Pod を管理する • Deployment を更新 → 新しい ReplicaSet を生成 → 古い Pod と新しい Pod を入れ替え → 古い ReplicaSet を削除 • ローリングアップデートの戦略も柔軟にカス タマイズできる
Service • Podをネットワークサービスとして公開するため の仕組みを提供 • セレクタとポートでどのPodが参照されるか決ま る • クラスタ外からアクセスできるようにするために、 NodePortを指定するケースが多い
クラスタ内に閉じているなら ClusterIPも可 • クラスタ内DNSにより、サービス名をホスト名と してアクセスできる
ConfigMap / Secret • 値やファイルをクラスタに登録しておき別リ ソースから参照できる仕組みを提供 • 環境変数として使ったりファイルとしてマウン トしたりといった使い方 •
ConfigMapは単なる設定 Secretは秘匿情報を扱うという使い分け • Secretについては公式ドキュメントを参照
Ingress • L7ロードバランサを扱う仕組みを提供 • GCPのロードバランサが作成される (GKE Ingress コントローラが制御) • アノテーションによって静的
IPを付与したり SSL証明書を紐付けたりできる (ManagedCertificateが必要) • ロードバランサはクラスタ外にあるため NodePortのサービスじゃないとIngress側か らアクセスできない
CronJob • Cronと同じ仕組みを提供 • Cronが動いているPodがあるのではなく CronJobがJobを起動する (DeploymentとPodの関係に似ている) • タイムゾーンはMasterに依存するため、マ ネージドサービスを使う場合はまず
間違いなくUTCになることに留意
DaemonSet • 全ノードで常に1つだけ特定のPodを起動す る仕組みを提供 • 各ノードのメトリクスを取得したりログを収集 したりする用途が多い • GKEではクラスタ作成時にオプションをつけ れば自動的にリソースが作られる
よくある課題:環境ごとに設定を分けるには? • プログル全般ではKustomizeというツールを使っている • ベースのYAMLを用意し、環境ごとに設定を上書き • Helmというツールもあるが、頻繁に更新されバージョニングさ れないようなWebアプリだと使いにくい印象 • k8sディレクトリで
$ kustomize build overlays/staging を実行してみよう
よくある課題:デプロイはどうする? • プログル全般ではSkaffoldというツールを使っている • kubectlはk8sクラスタを制御するためのツール Dockerイメージは別途作成する必要がある • ビルド〜デプロイのパイプラインを制御してくれる プッシュ型のツール •
プル型のツールとしてFluxやArgoCDがある(GitOps)
他にもいろいろある 網羅性が高くオススメ https://amzn.to/3ppEYf5 Elasticsearchのクラスタをk8s上に簡単に構築 https://www.elastic.co/jp/elastic-cloud-kubernetes カスタムリソース定義 (CRD)という仕組みにより kind: Elasticsearch というリソースを作成するだけで色々やってくれる
Fin.