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
120
WebエンジニアのためのKubernetesサクッと入門
NPO法人みんなのコード様の社内勉強会にて使用した資料を、許可を得て公開させていただきます。
mokichi
November 30, 2020
Tweet
Share
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
1
290
Rubyistから見たElixir
mokichi
1
400
動的画像変換サービス「imagepix」のご紹介
mokichi
1
250
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
3
890
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
200
Ractorが出たからRubyの並列処理をおさらいする
mokichi
0
700
未来予知できない凡人の生存戦略
mokichi
0
57
Other Decks in Programming
See All in Programming
機能が複雑化しても 頼りになる FactoryBotの話
tamikof
1
230
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
250
Rails 1.0 のコードで学ぶ find_by* と method_missing の仕組み / Learn how find_by_* and method_missing work in Rails 1.0 code
maimux2x
1
260
color-scheme: light dark; を完全に理解する
uhyo
7
500
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
130
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
740
AIプログラミング雑キャッチアップ
yuheinakasaka
19
5k
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
AWS Step Functions は CDK で書こう!
konokenj
4
780
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
940
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
290
Featured
See All Featured
Producing Creativity
orderedlist
PRO
344
40k
Speed Design
sergeychernyshev
27
810
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Practical Orchestrator
shlominoach
186
10k
4 Signs Your Business is Dying
shpigford
183
22k
What's in a price? How to price your products and services
michaelherold
244
12k
Side Projects
sachag
452
42k
Designing Experiences People Love
moore
140
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
Being A Developer After 40
akosma
89
590k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
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.