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.7k
怖くない!コンテナ初心者に送るやさしい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
180
アプリエンジニアを救え! AWS CDKで実現するインフラCI・CD
bbrfkr
2
1.1k
[July Tech Festa 2019] Kubernetes on OpenStack におけるハマりどころ
bbrfkr
5
1.3k
OpenShiftでKubeVirtを試してみた
bbrfkr
1
940
Kubernetes x スマートスピーカ ~ Kubernetesで実現するFaaS ~
bbrfkr
1
210
Virtual Kubelet + Fargate + EKSでノードレス Kubernetes を夢見た話
bbrfkr
5
2.1k
Other Decks in Technology
See All in Technology
テストコードを書きながらCompose Multiplatformを乗りこなす
subroh0508
0
140
スクラムに出会って「できた」を実感できるようになってきた話 / Scrum makes me feel like I can do it
yayoi_dd
2
110
Cloudflare WorkersがPythonに対応したので試してみた
miura55
0
190
Step by Stepで学ぶ、ADT(代数的データ型)、モナドからEffect-TSまで
leveragestech
1
2.9k
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
230
LLM評価の落とし穴~開発者目線で気をつけるポイント~
rishigami
11
3.2k
社内での継続的な機械学習勉強会の開催のコツ
yudai00
2
390
生成AIがもたらす変革 / GitHubGalaxy_CyberAgent
cyberagentdevelopers
PRO
2
110
#phpconkagawa レガシーコードにもオブザーバビリティを 〜少しずつ始めるサービス監視〜
yamato_sorariku
0
550
データ分析力を高めるSQL研修サービス『SQL Everyone』
hikarut
1
390
能動学習のいろは:書籍「Human-in-the-Loop機械学習」3〜5章
hiroyoshiito
0
290
拓展QA日常工作的邊界
line_developers_tw
PRO
0
550
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.7k
Embracing the Ebb and Flow
colly
80
4.2k
Automating Front-end Workflow
addyosmani
1357
200k
What's in a price? How to price your products and services
michaelherold
238
11k
Robots, Beer and Maslow
schacon
PRO
155
8k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
Optimising Largest Contentful Paint
csswizardry
13
2.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
14
8.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
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