Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetesに入門したい

Hiroaki ONO
December 17, 2017

 Kubernetesに入門したい

Kubernetesを使いはじめてみた際に知っておきたい用語をまとめてみた

Hiroaki ONO

December 17, 2017
Tweet

More Decks by Hiroaki ONO

Other Decks in Technology

Transcript

  1. Kubernetesに
    ⼊入⾨門したい
    v1.0
    @hihihiroro

    View Slide

  2. 個⼈人的な話になりますが、

    View Slide

  3. 最近、

    Kubernetes
    触り始めました

    View Slide

  4. Kubernetesって
    難しくないですか?

    View Slide

  5. コンセプトとか
    コンポーネントの繋がりとか

    View Slide

  6. 僕には難しい

    View Slide

  7. 難しいからなんとなく
    整理理してみる

    View Slide

  8. • Kubernetesとは
    • Kubernetesのコンセプト
    • Kubernetes使ってみる

    View Slide

  9. # Kubernetesとは

    View Slide

  10. kubernetes
    • オーケストレーションツール
    • アプリケーション、ミドルウェア、

    ストレージなどで構成されるシステムを

    構築、設定、運⽤用を⾃自動化する

    View Slide

  11. kubernetes
    • オーケストレーションツール
    • プロビジョニング
    • オートスケーリング
    • 死活監視
    • サービスディスカバリ

    View Slide

  12. kubernetes
    • オーケストレーションツール
    • プロビジョニング
    • オートスケーリング
    • 死活監視
    • サービスディスカバリ
    コンテナに特化!!

    View Slide

  13. kubernetesをまとめると
    • Googleの内部で使われている

    コンテナオーケストレーター(Borg)のOSS
    • マシンではなくアプリケーションを管理理
    • ⻑⾧長いのでk8sってよく省略略される

    View Slide

  14. コンテナ
    )BSEXBSF
    -JOVY,FSOFM
    CJO-JCT CJO-JCT
    BQQ BQQ
    )BSEXBSF
    )ZQFSWJTPS
    CJO-JCT CJO-JCT
    04 04
    BQQ BQQ
    )BSEXBSF
    04
    CJO-JCT
    BQQ BQQ
    DPOUBJOFS


    DPOUBJOFS


    7.
    仮想化 コンテナ
    物理理
    7.
    • デプロイ時間が遅い
    • 無駄なリソースが必要
    • スケールしづらい
    • 複雑な仕組み
    • 無駄なリソースが必要
    • 環境依存問題
    • プロセスでのデプロイ
    • ファイルシステム化
    • 少リソースで実⾏行行

    View Slide

  15. コンテナの問題点
    • そもそもコンテナってどうやってたてるの?
    • コンテナをどこのホストにどう配備するの?
    • 今稼働しているコンテナをどう管理理するの?
    • コンテナ間の依存関係の解決はどうするの?
    • 死活監視はどうするの?

    View Slide

  16. コンテナの問題点
    • そもそもコンテナってどうやってたてるの?
    • コンテナをどこのホストにどう配備するの?
    • 今稼働しているコンテナをどう管理理するの?
    • コンテナ間の依存関係の解決はどうするの?
    • 死活監視はどうするの?
    Docker
    オーケストレーションツール

    View Slide

  17. Docker
    Linuxカーネルのコンテナ技術を⽤用いた
    w w w w w w w w w w w w w w w w w w w w
    アプリケーションを
    ・開発
    ・搬送
    ・実⾏行行
    するためのプラットフォーム

    View Slide

  18. Docker
    • Dockerイメージ
    • イメージ・レイヤの積み重ね(読み込み専⽤用)
    • Dockerコンテナ
    • イメージ・レイヤを

    1つのファイルシステムとみなす
    • 読み書き可能なイメージ・レイヤを持つ
    https://docs.docker.com/engine/userguide/storagedriver/
    imagesandcontainers/#container-and-layers

    View Slide

  19. オーケストレーションツール
    • Docker Swarm
    • Dockerのネイティブオーケストレーションツール
    • Nomad
    • ジョブスケジューリング管理理ツール
    • Mesos+marathon
    • Mesos上で動く⻑⾧長期実⾏行行⽤用フレームワーク
    • Kubernetes(k8s)
    • コンテナに特化したオーケストレーションツール

    View Slide

  20. # Kubernetesのコンセプト

    View Slide

  21. # Kubernetesのコンセプト
    k8s

    View Slide

  22. # k8sのコンセプト

    View Slide

  23. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数コンテナの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  24. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数コンテナの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  25. Node/Cluster
    • Node:コンテナをデプロイ先VMもしくは物理理サー

    • Cluster:Nodeの集合体
    kubelet
    Docker
    kube-proxy
    Node
    Cluster
    kubelet
    Docker
    kube-proxy
    Node

    View Slide

  26. Node/Cluster
    Node
    • コンテナのデプロイ先
    VMもしくは物理理サーバ
    • 元の名前はMinion
    kubelet
    Docker
    kube-proxy
    Node
    Cluster
    kubelet
    Docker
    kube-proxy
    Node
    Cluster
    • Nodeの集合体

    View Slide

  27. Pod
    Pod
    • デプロイの最⼩小単位
    • 1個以上の

    コンテナの集合体
    Pod内部のコンテナ

    →IPやポートを共有
    kubelet
    Docker
    kube-proxy
    Volume
    Container
    Pod
    Pod
    Pod

    View Slide

  28. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数コンテナの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  29. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数コンテナの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  30. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数コンテナの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン
    Pod

    View Slide

  31. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数Podの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  32. Label
    Label
    • リソースに付与する

    任意の⽂文字列列
    • {名前:値}のKey-Value
    • リソースのグルーピングに使⽤用
    kubelet
    Docker
    kube-proxy
    FOWQSP
    SPMFBQJ
    FOWQSP
    SPMF%#

    View Slide

  33. Service
    Service
    • サービスディスカバリ
    • Podへのアクセス⼿手段を提供
    • 仮想IP(Cluster IP)を付与

    View Slide

  34. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数Podの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  35. Service
    Service
    • サービスディスカバリ
    • Podへのアクセス⼿手段を提供
    • Node上に静的なポート番号を公開

    View Slide

  36. Service
    Service
    • ClusterIP : 複数のPodを紐付ける

    クラスタ内仮想IP
    • NodePort : ClusterIPをNode上の

    静的なポートで公開

    View Slide

  37. Service
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Service : A
    • ClusterIP : 8080
    • NodePort : 80
    Service : B
    • ClusterIP : 10025
    • NodePort : 25

    View Slide

  38. Service(Cluster内通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    Cluster内からService:Bへアクセス
    port:10025へアクセス

    View Slide

  39. Service(Cluster内通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    Cluster内からService:Bへアクセス

    View Slide

  40. Service(Cluster内通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    Cluster内からService:Bへアクセス
    kube-proxy
    • Service→Podへのルーティング
    (iptablesによって実現)

    View Slide

  41. Service(Cluster内通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    Cluster内からService:Bへアクセス

    View Slide

  42. Service(Cluster外通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    SLB
    Cluster外のサーバからService:Bへアクセス

    View Slide

  43. Service(Cluster外通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    SLB
    Cluster外のサーバからService:Bへアクセス
    port:25へアクセス

    View Slide

  44. Service(Cluster外通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    SLB
    Cluster外のサーバからService:Bへアクセス

    View Slide

  45. Service(Cluster外通信)
    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    SPMF#
    Docker
    kubelet
    kube-proxy
    SPMF"
    :8080
    :80 :25
    :10025
    SLB
    Cluster外のサーバからService:Bへアクセス

    View Slide

  46. Ingress
    • 通信内容をServiceにプロキシする
    • HTTPロードバランサに特化した実装
    • L7バランサ

    View Slide

  47. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数Podの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  48. Volume
    • 外部ストレージをコンテナにマウント
    • emptyDir Volume
    • Node上に領域を確保。Podが削除されると廃棄
    • hostPath Volume
    • Node上に領域を確保。Nodeが削除されると廃棄
    • Persistent Volume
    • ネットワークストレージ上に領域を確保。

    View Slide

  49. Configmap
    • 設定をコンテナイメージ外に登録
    • {名前:値}のKey-Value
    • プレーンテキストで格納

    View Slide

  50. Secret
    • 設定をコンテナイメージ外に登録
    • {名前:値}のKey-Value
    • base64エンコードして格納

    View Slide

  51. ConfigMap/Secret
    • Podへの渡し⽅方
    • Volumeとしてマウント
    • 環境変数に設定

    View Slide

  52. ConfigMap/Secret(マウント)
    ConfigMap
    PROP.1: hoge
    PROP.2: piyo
    Secret
    PASS.1: cGFzcw==
    kubelet
    Docker
    kube-proxy
    /etc/config
    /etc/secret
    /etc/config/PROP.1 : hoge
    /etc/config/PROP.2 : piyo
    /etc/secret/PASS.1 : pass
    volum
    e
    volum
    e

    View Slide

  53. ConfigMap/Secret(環境変数)
    kubelet
    Docker
    kube-proxy
    PROP.1=hoge
    PROP.2=piyo
    PASS.1=pass
    ConfigMap
    PROP.1: hoge
    PROP.2: piyo
    Secret
    PASS.1: cGFzcw==
    envFrom
    envFrom

    View Slide

  54. k8s⽤用語
    • コンテナ実⾏行行環境
    • 複数Podの取扱
    • 外部からのアクセス
    • データの取扱
    • デプロイパターン

    View Slide

  55. デプロイパターン
    • Deployment : ⽔水平スケーリングパターン
    • DaemonSet : 各Node配置パターン
    • StatefuleSet : ステート管理理パターン
    • Job : タスク実⾏行行⽤用パターン
    • CronJob : 定期タスク実⾏行行⽤用パターン

    View Slide

  56. Deployment
    • 複数Podの並列列起動、世代管理理
    • ReplicaSetの世代管理理
    • ローリングアップデート
    • ロールバック

    View Slide

  57. ReplicaSet
    • 複数Podの並列列起動、世代管理理
    • Podの管理理
    • template : Podの定義
    • replicas : Podの個数
    • リソースが空いてるNodeに配置する

    View Slide

  58. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    service1-xxx
    version : 1
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    service1-yyy
    version : 1

    View Slide

  59. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    service1-xxx
    version : 1
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    service1-yyy
    version : 1
    ReplicaSet
    replicas : 2
    version : 2

    View Slide

  60. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    service1-xxx
    version : 1
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    service1-yyy
    version : 1
    ReplicaSet
    replicas : 2
    version : 2
    service1-aaa
    version : 2

    View Slide

  61. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    service1-yyy
    version : 1
    ReplicaSet
    replicas : 2
    version : 2
    service1-aaa
    version : 2

    View Slide

  62. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    service1-yyy
    version : 1
    ReplicaSet
    replicas : 2
    version : 2
    service1-zzz
    version : 2
    service1-aaa
    version : 2

    View Slide

  63. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    ReplicaSet
    replicas : 2
    version : 2
    service1-zzz
    version : 2
    service1-aaa
    version : 2

    View Slide

  64. Deployment/ReplicaSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Deployment
    name : service1
    ReplicaSet
    replicas : 2
    version : 1
    ReplicaSet
    replicas : 2
    version : 2
    service1-zzz
    version : 2
    service1-aaa
    version : 2

    View Slide

  65. DaemonSet
    • 各Nodeに必ず1つだけPodを起動
    • 監視ツール
    • ログ収集
    • メトリクス収集

    View Slide

  66. DaemonSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    TFSWJDFYYY
    DaemonSet
    name : service1
    TFSWJDFZZZ

    View Slide

  67. StatefulSet
    • 通し番号付きのPodを作成、番号順に起動
    • Podが削除された場合同じ名前で起動される
    • 同じPersistent Volumeが使われる
    • mysql(master)、mysql(slave)、mysql(slave)

    View Slide

  68. StatefulSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    StatefulSet
    name : service1
    replica : 3
    TFSWJDF

    View Slide

  69. StatefulSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    StatefulSet
    name : service1
    replica : 3
    TFSWJDF
    TFSWJDF

    View Slide

  70. StatefulSet
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    StatefulSet
    name : service1
    replica : 3
    TFSWJDF
    TFSWJDF
    TFSWJDF

    View Slide

  71. Job
    • Podが正しく起動、終了了、停⽌止まで保証
    • parallelism : 同時起動するPodの数
    • completions : Jobを成功とみなすのに

    必要なPodの終了了数
    • 完了了後も完了了ステータスでリソースは残る

    View Slide

  72. Job
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Job
    parallelism : 3
    completions : 2
    TFSWJDFYYY
    TFSWJDF[[[
    TFSWJDFZZZ

    View Slide

  73. Job
    kubelet
    Docker
    kube-proxy
    Docker
    kubelet
    kube-proxy
    Job
    parallelism : 3
    completions : 2
    TFSWJDFYYY
    TFSWJDF[[[
    TFSWJDFZZZ
    ̋
    ̋
    ×
    Jobから作成されたPodは
    Jobに結果を通知する

    View Slide

  74. CronJob
    • 定期的にJobを実⾏行行
    • schedule : crontab同様のスケージュル定義
    • concurrencyPolicy : 並列列実⾏行行ポリシー
    • Allow : 並列列実⾏行行許可
    • Forbid : 現在分が残ってる場合、次回分をスキップ
    • Replace : 現在分が残ってる場合、新Jobに置き換え

    View Slide

  75. # ざっくりなまとめ

    View Slide

  76. kube-apiserver
    kube-

    controller-manager
    etcd
    kube-scheduler
    ConfigMap
    Secret

    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    Docker
    kubelet
    kube-proxy
    SPMF#
    :8080
    :80 :25
    :10025
    Service
    Pod
    Label
    Node
    Deployment
    ReplicaSet
    DaemonSet
    Job

    Cluster
    Master

    View Slide

  77. # k8s使ってみる

    View Slide

  78. 使うもの
    • Docker for Mac
    • minikube
    • k8s

    View Slide

  79. Version
    • Docker for Mac : 17.09.1-ce
    • minikube : 0.24.1
    • k8s : 1.8.0

    View Slide

  80. Install⼿手順(Docker for Mac)
    # manual
    https://docs.docker.com/docker-for-mac/install/#download-docker-for-
    mac
    # homebrew
    brew cask install docker
    https://www.docker.com/docker-mac

    View Slide

  81. Install⼿手順(kubectl)
    # manual
    curl -LO https://storage.googleapis.com/kubernetes-release/release/
    `curl -s https://storage.googleapis.com/kubernetes-release/release/
    stable.txt`/bin/darwin/amd64/kubectl && chmod +x ./kubectl && sudo
    mv ./kubectl /usr/local/bin/kubectl
    # homebrew
    brew install kubectl
    https://kubernetes.io/docs/tasks/tools/install-kubectl

    View Slide

  82. Install⼿手順(minikube)
    # manual
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/
    v0.23.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv
    minikube /usr/local/bin/
    # homebrew
    brew cask install minikube
    https://github.com/kubernetes/minikube/releases
    https://github.com/kubernetes/minikube

    View Slide

  83. やること
    • k8sの公式チュートリアル
    • https://kubernetes.io/docs/tutorials/
    kubernetes-basics
    • ⾜足りない⽅方はコチラも
    • https://kubernetes.io/docs/tutorials

    View Slide

  84. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  85. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリをデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  86. k8sクラスタ作成
    ## minikubeのversion確認
    $ minikube version
    minikube version: v0.24.1
    ## minikube起動
    $ minikube start
    Starting local Kubernetes v1.8.0 cluster...
    Starting VM...
    Getting VM IP address...
    Moving files into cluster...
    Setting up certs...
    Connecting to cluster...
    Setting up kubeconfig...
    Starting cluster components...
    Kubectl is now configured to use the cluster.
    Loading cached images from config file.

    View Slide

  87. k8sクラスタ作成
    ## kubectlのヴァージョン確認
    $ kubectl version
    Client Version: version.Info{Major:"1", Minor:"8",
    GitVersion:"v1.8.5",
    GitCommit:"cce11c6a185279d037023e02ac5249e14daa22bf",
    GitTreeState:"clean", BuildDate:"2017-12-07T18:09:07Z",
    GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
    Server Version: version.Info{Major:"1", Minor:"8",
    GitVersion:"v1.8.0",
    GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4",
    GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z",
    GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}

    View Slide

  88. k8sクラスタ作成
    ## Cluster情報表示
    $ kubectl cluster-info
    Kubernetes master is running at https://192.168.99.100:8443
    To further debug and diagnose cluster problems, use 'kubectl cluster-
    info dump’.
    ## Nodeの⼀一覧表示
    $ kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    minikube Ready 6d v1.8.0
    # minikube って名前のnodeが⽴立ち上がった

    View Slide

  89. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリをデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  90. k8sクラスタにアプリをデプロイ
    ## kubernetes-bootcampをデプロイ
    $ kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/
    kubernetes-bootcamp:v1 --port=8080
    deployment "kubernetes-bootcamp" created
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE
    AGE
    kubernetes-bootcamp 1 1 1 1
    18s

    View Slide

  91. k8sクラスタにアプリをデプロイ
    ## k8sクラストにアクセスするためproxyを起動
    $ kubectl proxy
    Starting to serve on 127.0.0.1:8001
    ## k8sクラスタにアクセスできるか確認
    $ curl http://localhost:8001/version
    {
    "major": "1",
    "minor": "8",
    "gitVersion": "v1.8.0",
    "gitCommit": "0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4",
    "gitTreeState": "clean",
    "buildDate": "2017-11-29T22:43:34Z",
    "goVersion": "go1.9.1",
    "compiler": "gc",
    "platform": "linux/amd64"
    }

    View Slide

  92. k8sクラスタにアプリをデプロイ
    ## Podの名前を取得
    $ export POD_NAME=$(kubectl get pods -o go-template --template
    '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
    $ echo Name of the Pod: $POD_NAME
    Name of the Pod: kubernetes-bootcamp-6db74b9f76-4t8fc
    ## アプリにアクセス
    $ curl http://localhost:8001/api/v1/proxy/namespaces/default/pods/
    $POD_NAME/
    Hello Kubernetes bootcamp! | Running on: kubernetes-
    bootcamp-6db74b9f76-4t8fc | v=1
    # kubernetes-bootcampアプリが⽴立ち上がった

    View Slide

  93. k8sクラスタにアプリをデプロイ
    ## Podの⼀一覧表示
    $ kubectl get pods
    NAME READY STATUS RESTARTS
    AGE
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    1m
    ## Podのログ表示
    $ kubectl logs $POD_NAME
    Kubernetes Bootcamp App Started At: 2017-12-17T08:47:21.490Z |
    Running On: kubernetes-bootcamp-6db74b9f76-4t8fc
    Running On: kubernetes-bootcamp-6db74b9f76-4t8fc | Total Requests: 1
    | App Uptime: 82.315 seconds | Log Time: 2017-12-17T08:48:43.805Z

    View Slide

  94. k8sクラスタにアプリをデプロイ
    ## Podの詳細表示
    $ kubectl describe pods
    Name: kubernetes-bootcamp-6db74b9f76-4t8fc
    Namespace: default
    Node: minikube/192.168.99.100
    Start Time: Sun, 17 Dec 2017 17:47:20 +0900
    Labels: pod-template-hash=2863065932
    run=kubernetes-bootcamp
                ・
                ・
                ・
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal Scheduled 2m default-scheduler Successfully assigned kubernetes-
    bootcamp-6db74b9f76-4t8fc to minikube
    Normal SuccessfulMountVolume 2m kubelet, minikube MountVolume.SetUp succeeded for volume
    "default-token-2mz8l"
    Normal Pulled 2m kubelet, minikube Container image "docker.io/jocatalin/
    kubernetes-bootcamp:v1" already present on machine
    Normal Created 2m kubelet, minikube Created container
    Normal Started 2m kubelet, minikube Started container

    View Slide

  95. k8sクラスタにアプリをデプロイ
    ## Podでコマンド実⾏行行(envコマンド)
    $ kubectl exec $POD_NAME env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=kubernetes-bootcamp-6db74b9f76-4t8fc
    KUBERNETES_PORT=tcp://10.96.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
    KUBERNETES_SERVICE_HOST=10.96.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    NPM_CONFIG_LOGLEVEL=info
    NODE_VERSION=6.3.1
    HOME=/root

    View Slide

  96. k8sクラスタにアプリをデプロイ
    ## Pod内でbash実⾏行行
    $ kubectl exec -ti $POD_NAME bash
    [email protected]:/# env
    NODE_VERSION=6.3.1
    HOSTNAME=kubernetes-bootcamp-6db74b9f76-4t8fc
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT=tcp://10.96.0.1:443
    TERM=xterm
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_HOST=10.96.0.1
    NPM_CONFIG_LOGLEVEL=info
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/
    SHLVL=1
    HOME=/root
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_SERVICE_PORT_HTTPS=443
    KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
    KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
    _=/usr/bin/env
    [email protected]:/# exit
    exit
    $
    ここからコンテナ内部
    ここでコンテナから抜ける

    View Slide

  97. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリをデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  98. k8sクラスタ外にアプリの公開
    ## Serviceの⼀一覧表示
    $ kubectl get services
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.96.0.1 443/TCP 6d
    ## kubernetes-bootcampを公開
    $ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
    service "kubernetes-bootcamp" exposed
    ## Serviceの⼀一覧表示
    $ kubectl get services
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
    AGE
    kubernetes ClusterIP 10.96.0.1 443/TCP 6d
    kubernetes-bootcamp NodePort 10.108.145.126 8080:32593/TCP 6s
    # kubernetes-bootcamp⽤用のServiceが⽴立ち上がった

    View Slide

  99. k8sクラスタ外にアプリの公開
    ## Serviceの詳細表示
    $ kubectl describe services/kubernetes-bootcamp
    Name: kubernetes-bootcamp
    Namespace: default
    Labels: run=kubernetes-bootcamp
    Annotations:
    Selector: run=kubernetes-bootcamp
    Type: NodePort
    IP: 10.108.145.126
    Port: 8080/TCP
    TargetPort: 8080/TCP
    NodePort: 32593/TCP
    Endpoints: 172.17.0.4:8080
    Session Affinity: None
    External Traffic Policy: Cluster
    Events:

    View Slide

  100. k8sクラスタ外にアプリの公開
    ## NodePortの取得
    $ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-
    template='{{(index .spec.ports 0).nodePort}}’)
    $ echo $NODE_PORT
    32593
    ## NodeのIPを取得
    $ export NODE_IP=$(minikube ip)
    $ echo $NODE_IP
    192.168.99.100
    ## Nodeに直接アクセス
    $ curl http://$NODE_IP:$NODE_PORT
    Hello Kubernetes bootcamp! | Running on: kubernetes-
    bootcamp-6db74b9f76-4t8fc | v=1

    View Slide

  101. k8sクラスタ外にアプリの公開
    ## kubernetes-bootcampが動いているPodを表示
    $ kubectl get pods -l run=kubernetes-bootcamp
    NAME READY STATUS RESTARTS
    AGE
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    22m
    ## kubernetes-bootcampのServiceを表示
    $ kubectl get services -l run=kubernetes-bootcamp
    NAME TYPE CLUSTER-IP EXTERNAL-IP
    PORT(S) AGE
    kubernetes-bootcamp NodePort 10.108.145.126
    8080:32593/TCP 17m

    View Slide

  102. k8sクラスタ外にアプリの公開
    ## Podの名前を取得
    $ export POD_NAME=$(kubectl get pods -o go-template --template
    '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
    $ echo Name of ths Pod : $POD_NAME
    Name of ths Pod : kubernetes-bootcamp-6db74b9f76-4t8fc
    ## app=v1というラベルを付与
    $ kubectl label pod $POD_NAME app=v1
    pod "kubernetes-bootcamp-6db74b9f76-4t8fc" labeled

    View Slide

  103. k8sクラスタ外にアプリの公開
    ## Podの詳細表示
    $ kubectl describe pods/$POD_NAME
    Name: kubernetes-bootcamp-6db74b9f76-4t8fc
    Namespace: default
    Node: minikube/192.168.99.100
    Start Time: Sun, 17 Dec 2017 17:47:20 +0900
    Labels: app=v1
    pod-template-hash=2863065932
    run=kubernetes-bootcamp
                ・
                ・
                ・
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal Scheduled 28m default-scheduler Successfully assigned kubernetes-
    bootcamp-6db74b9f76-4t8fc to minikube
    Normal SuccessfulMountVolume 28m kubelet, minikube MountVolume.SetUp succeeded for volume
    "default-token-2mz8l"
    Normal Pulled 28m kubelet, minikube Container image "docker.io/jocatalin/
    kubernetes-bootcamp:v1" already present on machine
    Normal Created 28m kubelet, minikube Created container
    Normal Started 28m kubelet, minikube Started container

    View Slide

  104. k8sクラスタ外にアプリの公開
    ## app=v1のPodを表示
    $ kubectl get pods -l app=v1
    NAME READY STATUS RESTARTS
    AGE
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    33m

    View Slide

  105. k8sクラスタ外にアプリの公開
    ## Serviceの削除
    $ kubectl delete services -l run=kubernetes-bootcamp
    service "kubernetes-bootcamp" deleted
    ## Serviceの⼀一覧表示
    $ kubectl get services
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.96.0.1 443/TCP 6d
    ## Nodeに直接アクセスできないことの確認
    $ curl http://$NODE_IP:$NODE_PORT
    curl: (7) Failed to connect to 192.168.99.100 port 32593: Connection refused
    ## アプリが⽣生きていることの確認
    $ kubectl exec -ti $POD_NAME curl localhost:8080
    Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6db74b9f76-4t8fc
    | v=1

    View Slide

  106. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリをデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  107. アプリのスケールアップ
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    kubernetes-bootcamp 1 1 1 1 49m
    # 1個のアプリケーションが起動中
    ## スケールアップ
    $ kubectl scale deployments/kubernetes-bootcamp --replicas=4
    deployment "kubernetes-bootcamp" scaled
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    kubernetes-bootcamp 4 4 4 4 51m
    # アプリが4個にスケールアップ

    View Slide

  108. アプリのスケールアップ
    ## Podの⼀一覧表示
    $ kubectl get pods -o wide
    NAME READY STATUS RESTARTS
    AGE IP NODE
    kubernetes-bootcamp-6db74b9f76-2wkqp 1/1 Running 0
    3m 172.17.0.6 minikube
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    55m 172.17.0.4 minikube
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Running 0
    3m 172.17.0.7 minikube
    kubernetes-bootcamp-6db74b9f76-lkx8h 1/1 Running 0
    3m 172.17.0.5 minikube

    View Slide

  109. アプリのスケールアップ
    ## デプロイされたアプリの詳細表示
    $ kubectl describe deployments/kubernetes-bootcamp
    Name: kubernetes-bootcamp
    Namespace: default
    CreationTimestamp: Sun, 17 Dec 2017 17:47:20 +0900
    Labels: run=kubernetes-bootcamp
    Annotations: deployment.kubernetes.io/revision=1
    Selector: run=kubernetes-bootcamp
    Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
    StrategyType: RollingUpdate
    MinReadySeconds: 0



    OldReplicaSets:
    NewReplicaSet: kubernetes-bootcamp-6db74b9f76 (4/4 replicas created)
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal ScalingReplicaSet 55m deployment-controller Scaled up replica set kubernetes-
    bootcamp-6db74b9f76 to 1
    Normal ScalingReplicaSet 4m deployment-controller Scaled up replica set kubernetes-
    bootcamp-6db74b9f76 to 4

    View Slide

  110. アプリのスケールアップ
    ## スケールダウン
    $ kubectl scale deployments/kubernetes-bootcamp --replicas=2
    deployment "kubernetes-bootcamp" scaled
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE
    AGE
    kubernetes-bootcamp 2 2 2 2
    1h
    # アプリが2個にスケールダウン

    View Slide

  111. アプリのスケールアップ
    ## Podの⼀一覧表示
    $ kubectl get pods -o wide
    NAME READY STATUS RESTARTS
    AGE IP NODE
    kubernetes-bootcamp-6db74b9f76-2wkqp 1/1 Terminating 0
    10m 172.17.0.6 minikube
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    1h 172.17.0.4 minikube
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Running 0
    10m 172.17.0.7 minikube
    kubernetes-bootcamp-6db74b9f76-lkx8h 1/1 Terminating 0
    10m 172.17.0.5 minikube
    # 2個のPodがTerminatingに

    View Slide

  112. アプリのスケールアップ
    ## Podの⼀一覧表示
    $ kubectl get pods
    NAME READY STATUS RESTARTS
    AGE
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    1h
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Running 0
    12m
    # しばらくするとRunningのみに

    View Slide

  113. チュートリアル
    1. k8sクラスタ作成
    2. k8sクラスタにアプリをデプロイ
    3. k8sクラスタ外にアプリの公開
    4. アプリのスケールアップ
    5. ローリングアップデート

    View Slide

  114. ローリングアップデート
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE
    AGE
    kubernetes-bootcamp 2 2 2 2
    1h
    ## Podの⼀一覧表示
    $ kubectl get pods -o wide
    NAME READY STATUS RESTARTS
    AGE IP NODE
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    1h 172.17.0.4 minikube
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Running 0
    19m 172.17.0.7 minikube

    View Slide

  115. ローリングアップデート
    ## Podの詳細表示
    $ kubectl describe pods
    Name: kubernetes-bootcamp-6db74b9f76-4t8fc
    Namespace: default
    Node: minikube/192.168.99.100
    Start Time: Sun, 17 Dec 2017 17:47:20 +0900
    Labels: app=v1
    pod-template-hash=2863065932
    run=kubernetes-bootcamp



    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal Scheduled 19m default-scheduler Successfully assigned kubernetes-
    bootcamp-6db74b9f76-fs8c9 to minikube
    Normal SuccessfulMountVolume 19m kubelet, minikube MountVolume.SetUp succeeded for volume
    "default-token-2mz8l"
    Normal Pulled 19m kubelet, minikube Container image "docker.io/jocatalin/
    kubernetes-bootcamp:v1" already present on machine
    Normal Created 19m kubelet, minikube Created container
    Normal Started 19m kubelet, minikube Started container

    View Slide

  116. ローリングアップデート
    ## サービスを作成
    $ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
    service "kubernetes-bootcamp" exposed
    ## Serviceの詳細表示
    $ kubectl describe services/kubernetes-bootcamp
    Name: kubernetes-bootcamp
    Namespace: default
    Labels: run=kubernetes-bootcamp
    Annotations:
    Selector: run=kubernetes-bootcamp
    Type: NodePort
    IP: 10.107.5.238
    Port: 8080/TCP
    TargetPort: 8080/TCP
    NodePort: 32430/TCP
    Endpoints: 172.17.0.4:8080,172.17.0.7:8080
    Session Affinity: None
    External Traffic Policy: Cluster
    Events:

    View Slide

  117. ローリングアップデート
    ## アプリをv2にバージョンアップ
    $ kubectl set image deployments/kubernetes-bootcamp kubernetes-
    bootcamp=jocatalin/kubernetes-bootcamp:v2
    ## Podの⼀一覧表示
    $ kubectl get pods
    NAME READY STATUS RESTARTS
    AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 0/1 ContainerCreating 0
    1s
    kubernetes-bootcamp-6566f8f9db-xznsk 0/1 ContainerCreating 0
    1s
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0
    1h
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Terminating 0
    25m

    View Slide

  118. ローリングアップデート
    ## Podの推移
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 0/1 ContainerCreating 0 1s
    kubernetes-bootcamp-6566f8f9db-xznsk 0/1 ContainerCreating 0 1s
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Running 0 1h
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Terminating 0 25m
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 1/1 Running 0 5s
    kubernetes-bootcamp-6566f8f9db-xznsk 0/1 ContainerCreating 0 5s
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Terminating 0 1h
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Terminating 0 25m
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 1/1 Running 0 16s
    kubernetes-bootcamp-6566f8f9db-xznsk 1/1 Running 0 16s
    kubernetes-bootcamp-6db74b9f76-4t8fc 1/1 Terminating 0 1h
    kubernetes-bootcamp-6db74b9f76-fs8c9 1/1 Terminating 0 25m
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 1/1 Running 0 1m
    kubernetes-bootcamp-6566f8f9db-xznsk 1/1 Running 0 1m
    新アプリの起動
    1コンテナ切り替わり
    2コンテナ切り替わり
    旧アプリの削除

    View Slide

  119. ローリングアップデート
    ## Serviceの詳細表示
    $ kubectl describe services/kubernetes-bootcamp
    Name: kubernetes-bootcamp
    Namespace: default
    Labels: run=kubernetes-bootcamp
    Annotations:
    Selector: run=kubernetes-bootcamp
    Type: NodePort
    IP: 10.107.5.238
    Port: 8080/TCP
    TargetPort: 8080/TCP
    NodePort: 32430/TCP
    Endpoints: 172.17.0.5:8080,172.17.0.6:8080
    Session Affinity: None
    External Traffic Policy: Cluster
    Events:

    View Slide

  120. k8sクラスタ外にアプリの公開
    ## NodePortの取得
    $ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-
    template='{{(index .spec.ports 0).nodePort}}')
    $ echo $NODE_PORT
    32430
    ## NodeのIPを取得
    $ export NODE_IP=$(minikube ip)
    $ echo $NODE_IP
    192.168.99.100
    ## Nodeに直接アクセス
    $ curl http://$NODE_IP:$NODE_PORT
    Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6566f8f9db-5m2z4 |
    v=2
    # アプリがv2になっていることが確認できる

    View Slide

  121. k8sクラスタ外にアプリの公開
    ## ローリングアップデートの状態確認
    $ kubectl rollout status deployments/kubernetes-bootcamp
    deployment "kubernetes-bootcamp" successfully rolled out
    # ローリングアップデート成功

    View Slide

  122. ローリングアップデート
    ## Podの詳細表示
    $ kubectl describe pods
    Name: kubernetes-bootcamp-6566f8f9db-5m2z4
    Namespace: default
    Node: minikube/192.168.99.100
    Start Time: Sun, 17 Dec 2017 19:03:57 +0900
    Labels: pod-template-hash=2122949586
    run=kubernetes-bootcamp
    Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":
    {"kind":"ReplicaSet","namespace":"default","name":"kubernetes-bootcamp-6566f8f9db","uid":"98ce05ec-e311-11e7-a398-0...
    Status: Running
    IP: 172.17.0.5
    Created By: ReplicaSet/kubernetes-bootcamp-6566f8f9db
    Controlled By: ReplicaSet/kubernetes-bootcamp-6566f8f9db
    Containers:
    kubernetes-bootcamp:
    Container ID: docker://ea0f360269c505075bde352bc00f916c79ff46c2eb22075161333b5eb181d76b
    Image: jocatalin/kubernetes-bootcamp:v2


    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal Scheduled 10m default-scheduler Successfully assigned kubernetes-bootcamp-6566f8f9db-xznsk to minikube
    Normal SuccessfulMountVolume 10m kubelet, minikube MountVolume.SetUp succeeded for volume "default-token-2mz8l"
    Normal Pulling 10m kubelet, minikube pulling image "jocatalin/kubernetes-bootcamp:v2"
    Normal Pulled 10m kubelet, minikube Successfully pulled image "jocatalin/kubernetes-bootcamp:v2"
    Normal Created 10m kubelet, minikube Created container
    Normal Started 10m kubelet, minikube Started container
    imageがv2になっている

    View Slide

  123. ローリングアップデート
    ## アプリをv10にバージョンアップ
    # v10は存在しないタグの為ローリングアップーデートが失敗する
    $ kubectl set image deployments/kubernetes-bootcamp kubernetes-
    bootcamp=jocatalin/kubernetes-bootcamp:v10
    deployment "kubernetes-bootcamp" image updated
    ## Podの⼀一覧表示
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-5466c44897-hqjdw 0/1 ErrImagePull 0 14s
    kubernetes-bootcamp-5466c44897-jxmlw 0/1 ErrImagePull 0 13s
    kubernetes-bootcamp-6566f8f9db-5m2z4 1/1 Running 0 16m
    kubernetes-bootcamp-6566f8f9db-xznsk 1/1 Terminating 0 16m
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    kubernetes-bootcamp 2 3 2 1 1h

    View Slide

  124. ローリングアップデート
    ## ローリングアップデートの中⽌止
    $ kubectl rollout undo deployments/kubernetes-bootcamp
    deployment "kubernetes-bootcamp" rolled back
    ## Podの⼀一覧表示
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    kubernetes-bootcamp-6566f8f9db-5m2z4 1/1 Running 0 21m
    kubernetes-bootcamp-6566f8f9db-tsjrt 1/1 Running 0 36s
    ## デプロイされたアプリの⼀一覧表示
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    kubernetes-bootcamp 2 2 2 2 1h
    # ロールバックに成功している

    View Slide

  125. # まとめ

    View Slide

  126. まとめ
    • k8sの重要そうな⽤用語をまとめてみた
    • 詳しくは書いてないのでざっくりベース
    • 公式チュートリアルを試してみた
    • ファイルから読み込むなど他にもできそう

    View Slide

  127. # もっと勉勉強しないと!

    View Slide

  128. 今回はここまで

    View Slide

  129. # appendix

    View Slide

  130. kube-apiserver
    kube-

    controller-manager
    etcd
    kube-scheduler
    ConfigMap
    Secret

    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    Docker
    kubelet
    kube-proxy
    SPMF#
    :8080
    :80 :25
    :10025
    Service
    Pod
    Label
    Node
    Deployment
    ReplicaSet
    DaemonSet
    Job

    Cluster
    Master

    View Slide

  131. Master
    • kube-apiserver
    • Kubernetesのリソース情報の管理理を⾏行行う
    • リソース情報のCRUD処理理担当
    • etcdへのアクセスを管理理している
    • 複数台建てることが可能な設計
    https://kubernetes.io/docs/reference/generated/kube-apiserver/

    View Slide

  132. Master
    • kube-scheduler
    • 新しく作られたPodにNodeを割り当てる
    • Kubernetes API越しにPod, Nodeの

    リソースを監視
    https://kubernetes.io/docs/reference/generated/kube-scheduler/

    View Slide

  133. Master
    • kube-controller-manager
    • 各種リソースのコントローラを起動する
    • Node Controller
    • Replication Controller
    • Endpoints Controller
    • Service Account & Token Controllers
    https://kubernetes.io/docs/reference/generated/kube-controller-manager/

    View Slide

  134. kube-apiserver
    kube-

    controller-manager
    etcd
    kube-scheduler
    ConfigMap
    Secret

    kubelet
    Docker
    kube-proxy
    :80
    :8080 :10025
    :25
    SPMF"
    Docker
    kubelet
    kube-proxy
    SPMF#
    :8080
    :80 :25
    :10025
    Service
    Pod
    Label
    Node
    Deployment
    ReplicaSet
    DaemonSet
    Job

    Cluster
    Master

    View Slide

  135. Node
    • kubelet
    • Podの起動・管理理を⾏行行う
    • Podの情報は以下の⽅方法で受け取る
    • apiserver
    • ローカルファイル
    • HTTPエンドポイント
    • HTTPサーバー
    https://kubernetes.io/docs/reference/generated/kubelet/

    View Slide

  136. Node
    • kube-proxy
    • Serviceが持つClusterIPを転送する
    • ロードバランスはラウンドロビン
    https://kubernetes.io/docs/reference/generated/kube-proxy/

    View Slide