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
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
190
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
200
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
260
C++26 エラー性動作
faithandbrave
2
780
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
870
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
760
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
3
320
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
850
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
17
4.8k
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
150
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
270
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
Optimizing for Happiness
mojombo
376
70k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
It's Worth the Effort
3n
183
28k
GraphQLとの向き合い方2022年版
quramy
44
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
The Pragmatic Product Professional
lauravandoore
32
6.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Navigating Team Friction
lara
183
15k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.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