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
150
WebエンジニアのためのKubernetesサクッと入門
NPO法人みんなのコード様の社内勉強会にて使用した資料を、許可を得て公開させていただきます。
mokichi
November 30, 2020
Tweet
Share
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
1
370
Rubyistから見たElixir
mokichi
1
430
動的画像変換サービス「imagepix」のご紹介
mokichi
1
270
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
3
940
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
230
Ractorが出たからRubyの並列処理をおさらいする
mokichi
0
750
未来予知できない凡人の生存戦略
mokichi
0
76
Other Decks in Programming
See All in Programming
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
270
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
870
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
340
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
190
VS Code Update for GitHub Copilot
74th
2
660
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
2
150
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
780
効率的な開発手段として VRTを活用する
ishkawa
0
150
Hack Claude Code with Claude Code
choplin
5
2.4k
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
14
5.1k
TypeScriptでDXを上げろ! Hono編
yusukebe
1
390
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
21
8.7k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Building Applications with DynamoDB
mza
95
6.5k
Visualization
eitanlees
146
16k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
Building an army of robots
kneath
306
45k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Raft: Consensus for Rubyists
vanstee
140
7k
Building Adaptive Systems
keathley
43
2.7k
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.