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
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
270
アプリエンジニアのためのGraphQL入門.pdf
spycwolf
0
100
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
130
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
130
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
710
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
7
680
強いチームと開発生産性
onk
PRO
35
12k
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
13k
The Rise of LLMOps
asei
9
1.7k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
880
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
210
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Code Review Best Practice
trishagee
64
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Language of Interfaces
destraynor
154
24k
Gamification - CAS2011
davidbonilla
80
5k
Teambox: Starting and Learning
jrom
133
8.8k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
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