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
怖くない!コンテナ初心者に送るやさしいKubernetes入門
Search
bbrfkr
August 02, 2018
Technology
20
5.8k
怖くない!コンテナ初心者に送るやさしいKubernetes入門
OpenStack Days Tokyo 2018/Cloud Native Days Tokyo 2018で発表させていただいたスライドです。
bbrfkr
August 02, 2018
Tweet
Share
More Decks by bbrfkr
See All by bbrfkr
有志で組織横串に挑む - GitLab CI Runnerカイゼン -
bbrfkr
0
210
アプリエンジニアを救え! AWS CDKで実現するインフラCI・CD
bbrfkr
2
1.2k
[July Tech Festa 2019] Kubernetes on OpenStack におけるハマりどころ
bbrfkr
5
1.3k
OpenShiftでKubeVirtを試してみた
bbrfkr
1
1k
Kubernetes x スマートスピーカ ~ Kubernetesで実現するFaaS ~
bbrfkr
1
240
Virtual Kubelet + Fargate + EKSでノードレス Kubernetes を夢見た話
bbrfkr
5
2.2k
Other Decks in Technology
See All in Technology
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
320
Work as an App Engineer
lycorp_recruit_jp
0
340
私なりのAIのご紹介 [2024年版]
qt_luigi
1
120
pg_bigmをRustで実装する(第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
shinyakato_
0
110
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
760
5分でわかるDuckDB
chanyou0311
10
3.3k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
130
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
150
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
230
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.9k
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
350
多様なメトリックとシステムの健全性維持
masaaki_k
0
110
Featured
See All Featured
KATA
mclloyd
29
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
A better future with KSS
kneath
238
17k
Designing for humans not robots
tammielis
250
25k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Navigating Team Friction
lara
183
15k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
GraphQLとの向き合い方2022年版
quramy
44
13k
Rails Girls Zürich Keynote
gr2m
94
13k
Six Lessons from altMBA
skipperchong
27
3.5k
Transcript
怖くない! コンテナ初心者に送る やさしいKubernetes入門
本発表の主旨 ▫ Kubernetesのとっつきづらさ ▫ 多くの専門用語 ▫ 複雑なアーキテクチャ ▫ 捉えにくい全体像 ▫
英語・中国語のみのドキュメント 日本語で補足補完し Kubernetesの概要・全体像を理解 2
HELLO! Name HN Co., Mission 斎藤辰徳 (サイトウ・タツノリ) bbrfkr (ビビリフクロウ) TIS株式会社
技術施策推進(インフラ) ▫ 技術支援 ▫ 技術啓蒙 3
Agenda ▫ コンテナとDocker ▫ Kubernetesとは ▫ Kubernetesのアーキテクチャ ▫ Kubernetesに触れてみる ▫
まとめ 4
コンテナとDocker Summary of container and Docker
Container Container コンテナとは ▫ 他のプロセスから隔離された プロセス実行環境 ▫ コンテナの特徴 ▫ 高速な起動
▫ 高い可搬性 ▫ 高いリソース利用効率 Infrastructure Operating System Bin/Lib App Bin/Lib App Container Engine 6
Dockerとは ▫ コンテナ/イメージのライフサイクルを管理するOSS 7 Ship Run Build イメージの共有 イメージの作成 Docker
file コンテナの実行
Dockerのここがイマイチ ▫ 可用性 ▫ 監視 ▫ 負荷分散 ▫ スケーリング ▫
大量コンテナの管理 8
Dockerのここがイマイチ ▫ 可用性 サービス継続稼働のために必ず欲しい Docker Host Docker Host Docker Host
Resource Pool 9
Dockerのここがイマイチ ▫ 監視 コンテナの正常動作をモニターしたい 10
Dockerのここがイマイチ ▫ 負荷分散 コンテナへのアクセスを仲介するモノが欲しい ? 11 IP: ???
Dockerのここがイマイチ ▫ スケーリング コンテナの負荷に応じてオートスケールしたい 12
Dockerのここがイマイチ ▫ 大量コンテナの管理 ▫ 対象サービスに関連するコンテナを一発で起動・停止したい ▫ どのホストにどのコンテナが乗っているかを意識したくない Docker Host Docker
Host 13 Docker Host Docker Host Docker Host
14 Kubernetesとは What is Kubernetes?
Kubernetes(k8s) ▫ Dockerの課題を解決するようなOSS ▫ Dockerホストをクラスタリング ▫ コンテナアプリの本番運用基盤を形成 15
k8sが解決する課題 ▫ 可用性 Hostのクラスタ化による障害時のコンテナ再起動 Docker Host Docker Host Docker Host
Resource Pool 16
k8sが解決する課題 ▫ 監視 Liveness、Readinessによる死活・健全性監視の実現 17
k8sが解決する課題 ▫ 負荷分散 Podアクセスへの仲介であるService(svc)の実装 18 IP: ??? svc svc IP:
x.x.x.x IP: x.x.x.x
k8sが解決する課題 ▫ スケーリング HorizontalPodAutoscaler(hpa)によるオートスケーリング 19 hpa hpa !!
k8sが解決する課題 ▫ 大量コンテナの管理 ▫ ManifestファイルによるInfrastructure as Code(IaC)化 ▫ IaC化によるコンテナのオーケストレーション Docker
Host 20 Docker Host Docker Host Mani fest Mani fest Delete Create
k8sが解決する課題 ▫ 可用性 ▫ 監視 ▫ 負荷分散 ▫ スケーリング ▫
大量コンテナの管理 21 Hostのクラスタ化 Liveness、Readiness Service HorizontalPodAutoscaler Manifestファイル
Kubernetesのアーキテクチャ Kubernetes architecture
k8sオブジェクト k8sのアーキテクチャレイヤ k8sクラスタ 23 deploy rs svc ing Pod kube-apiserver
Kubernetesによって 抽象化されたオブジェ クト群でコンテナアプリ を実現 k8sオブジェクトの機能 を実現するためのサー バ群 deploy: Deployment rs: ReplicaSet ing: Ingress svc: Service
コンテナアプリの実現 k8sユーザ エンドユーザ 24 rs deploy: Deployment rs: ReplicaSet ing:
Ingress svc: Service イメージレジストリ deploy svc ing pod pod pod url kubectl create -f : 作成 : ユーザアクセス
知っておきたい k8s用語 ▫ Pod ▫ Deployment ▫ ReplicaSet ▫ Service
▫ Ingress ▫ HorizontalPodAutoscaler 25
Pod ▫ 複数コンテナをまとめたもの ▫ k8sが扱う最小単位 ▫ コンテナ間でIPを共有 ▫ コンテナ間でボリュームを共有 ▫
Pod単位での作成/削除 ▫ 共にスケールすべきコンテナを 格納 pod Shared Volume IP 26
▫ コンテナアプリのデプロイ方式を定義 pod pod Deployment(deploy) revision=1 revision=2 27 pod deploy
rs rs rs deploy pod pod image: docker.io/httpd command: - "httpd" - "-DFOREGROUND"
▫ 要求数分のPodが起動している状態を保持 pod ReplicaSet(rc) replicas=2 replicas=2 28 rs rs pod
pod pod pod
Service(svc) ▫ Pod達に対するエンドポイント (IPと名前) pod IP: ??? ? !! IP:
172.16.0.100 名前: tomcat 29 pod pod svc pod IP: ??? pod IP: ??? pod IP: ??? pod IP: ??? pod IP: ???
pod pod pod Ingress(ing) ▫ エンドユーザがServiceにアクセス可能なURLを提供 30 svc pod pod
pod svc ing url
HorizontalPodAutoscaler(hpa) ▫ Podのオートスケールを実現 ▫ DeploymentやReplicaSetに紐づきPod数を操作 31 deploy rs hpa deploy
rs hpa pod pod pod pod !!
k8sオブジェクト k8sのアーキテクチャレイヤ k8sクラスタ 32 deploy rs svc ing pod kube-apiserver
Kubernetesによって 抽象化されたオブジェ クト群でコンテナアプリ を実現 k8sオブジェクトの機能 を実現するためのサー バ群 deploy: Deployment rs: ReplicaSet ing: Ingress svc: Service
k8sを構成するサーバ群 Master kube-apiserver kube-controller-manager kube-scheduler etcd etcd k8sユーザ エンドユーザ Node
kubelet kube-proxy CNI実装 Node kubelet kube-proxy CNI実装 ... App Pod ... Ingress Controller 33 ... ユーザアクセス ... APIコール
k8sを構成するサーバ群 ▫ Masterサーバのプロセス群 ▫ kube-apiserver ▫ APIエンドポイントとして機能 ▫ kube-controller-manager ▫
各種コントローラを実行・管理 ▫ kube-scheduler ▫ PodのNodeへの割り当て 34
k8sを構成するサーバ群 ▫ etcdサーバのプロセス群 ▫ etcd ▫ k8sクラスタの構成情報を格納するKVS ▫ クラスタを構成するNodeの情報 ▫
ReplicaSetの現在の複製数 ▫ Podの現在の状態 ▫ etc... 35
k8sを構成するサーバ群 ▫ Nodeサーバのプロセス群 ▫ kubelet ▫ 実際にPodを実行するエージェント ▫ kube-proxy ▫
Serviceの仮想IPへのアクセスをPodに転送 ▫ CNI(Container Network Interface)実装 ▫ コンテナネットワークを実現 36
k8sのネットワーク(コンテナネットワーク) ▫ 別ホスト上のPod同士は直接通信できない 37 Node Node pod pod pod pod
docker0(仮想ブリッジ) docker0(仮想ブリッジ)
k8sのネットワーク(コンテナネットワーク) ▫ CNI実装により別ホスト上のPod同士が通信可能に 38 Node Node pod pod pod pod
例) CNI実装=flannelの場合 flannelによるSDN(L2) docker0(仮想ブリッジ) docker0(仮想ブリッジ)
k8sのネットワーク(Serviceネットワーク) ▫ Serviceが払出したIP(ClusterIP)にアクセスすると kube-proxyが背後のPodへのアクセスに変換 39 Node Node pod2 pod1 pod4
pod3 svc IP: 10.1.0.100 kube-proxy kube-proxy dest: 10.1.0.100 dest: pod4 flannelによるSDN(L2) docker0(仮想ブリッジ) docker0(仮想ブリッジ)
40 Kubernetesに触れてみる Try Kubernetes
k8sクラスタの構築方法 ▫ クラウドのマネージドサービスを使う ▫ GKE、EKS、AKSなど ▫ 自前で作る ▫ ツールを使う ▫
一から手動 41 k8sクラスタを管理する立場の方には ぜひ一度挑戦してみることをおススメ
k8sクラスタ構築時のつまずきポイント Q: A: 42 kubeletが起動してくれない! サーバのswapが有効になっていませんか? kubeletはswap領域が存在していると起動しないよう になっています。 またdockerのcgroup driverとkubeletのcgroup
driverが一致していない時もkubeletは起動しません。 あわせて確認してください。
k8sクラスタ構築時のつまずきポイント Q: A: 43 Serviceの仮想IPからPodにアクセスできない! まずはkube-proxyが正しく動作していることを確認 します。動作している場合はコンテナネットワークが 上手く形成できていない可能性があります。特に手動 構築でflannelを利用しているときはdockerとの連携 が正しく行われていることを確認しましょう。
k8sクラスタ構築時のつまずきポイント Q: A: 44 kubernetes-dashboardってBasic認証できない? kubernetes-dashboardのManifestにオプションを付 与して展開することで可能です。ただし、Basic認証 を利用するにはkube-apiserverが認可方式にRBACだ けでなく、ABAC(Attribute Based
Access Control) を利用する設定にする必要があります。
k8sクラスタ構築時のつまずきポイント Q: A: 45 Cloud ProviderにAWSを使いたい! 「kubeadm init」する前に以下の設定をしましょう。 1. EC2インスタンスとSecurityGroupにタグ
「KubernetesCluster=<クラスタ名>」をつける 2. kubeletの起動オプションに「--cloud- provider=aws」をつける 3. kubeadmのconfigに「cloudProvider: aws」と 「nodeName: <private DNS名>」をつける
k8sの遊び場 ▫ Katacoda 46
k8sの遊び場 ▫ Katacoda 47
k8sの遊び場 ▫ Play with Kubernetes(PWK) 48
Kubernetesの遊び場 49 ▫ Play with Kubernetes(PWK) まとめ Conclusion
まとめ ▫ Kubernetes(k8s) ▫ Dockerホストのクラスタリング ▫ コンテナアプリの本番運用基盤を形成 ▫ Kubernetesのアーキテクチャ ▫
k8sオブジェクトレイヤとk8sクラスタレイヤ ▫ 前者はk8sユーザが、後者はクラスタ管理者が意識 k8sには固有の概念が多いので 触りながら理解していきましょう 50
51