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

怖くない!コンテナ初心者に送るやさしいKubernetes入門

bbrfkr
August 02, 2018

 怖くない!コンテナ初心者に送るやさしいKubernetes入門

OpenStack Days Tokyo 2018/Cloud Native Days Tokyo 2018で発表させていただいたスライドです。

bbrfkr

August 02, 2018
Tweet

More Decks by bbrfkr

Other Decks in Technology

Transcript

  1. 怖くない!
    コンテナ初心者に送る
    やさしいKubernetes入門

    View full-size slide

  2. 本発表の主旨
    ▫ Kubernetesのとっつきづらさ
    ▫ 多くの専門用語
    ▫ 複雑なアーキテクチャ
    ▫ 捉えにくい全体像
    ▫ 英語・中国語のみのドキュメント
    日本語で補足補完し
    Kubernetesの概要・全体像を理解
    2

    View full-size slide

  3. HELLO! Name
    HN
    Co.,
    Mission
    斎藤辰徳 (サイトウ・タツノリ)
    bbrfkr (ビビリフクロウ)
    TIS株式会社
    技術施策推進(インフラ)
    ▫ 技術支援
    ▫ 技術啓蒙
    3

    View full-size slide

  4. Agenda
    ▫ コンテナとDocker
    ▫ Kubernetesとは
    ▫ Kubernetesのアーキテクチャ
    ▫ Kubernetesに触れてみる
    ▫ まとめ
    4

    View full-size slide

  5. コンテナとDocker
    Summary of container and Docker

    View full-size slide

  6. Container
    Container
    コンテナとは
    ▫ 他のプロセスから隔離された
    プロセス実行環境
    ▫ コンテナの特徴
    ▫ 高速な起動
    ▫ 高い可搬性
    ▫ 高いリソース利用効率
    Infrastructure
    Operating System
    Bin/Lib
    App
    Bin/Lib
    App
    Container
    Engine
    6

    View full-size slide

  7. Dockerとは
    ▫ コンテナ/イメージのライフサイクルを管理するOSS
    7
    Ship
    Run
    Build
    イメージの共有
    イメージの作成
    Docker
    file
    コンテナの実行

    View full-size slide

  8. Dockerのここがイマイチ
    ▫ 可用性
    ▫ 監視
    ▫ 負荷分散
    ▫ スケーリング
    ▫ 大量コンテナの管理
    8

    View full-size slide

  9. Dockerのここがイマイチ
    ▫ 可用性
    サービス継続稼働のために必ず欲しい
    Docker Host Docker Host Docker Host
    Resource Pool
    9

    View full-size slide

  10. Dockerのここがイマイチ
    ▫ 監視
    コンテナの正常動作をモニターしたい
    10

    View full-size slide

  11. Dockerのここがイマイチ
    ▫ 負荷分散
    コンテナへのアクセスを仲介するモノが欲しい
    ?
    11
    IP: ???

    View full-size slide

  12. Dockerのここがイマイチ
    ▫ スケーリング
    コンテナの負荷に応じてオートスケールしたい
    12

    View full-size slide

  13. Dockerのここがイマイチ
    ▫ 大量コンテナの管理
    ▫ 対象サービスに関連するコンテナを一発で起動・停止したい
    ▫ どのホストにどのコンテナが乗っているかを意識したくない
    Docker Host Docker Host
    13
    Docker Host
    Docker Host Docker Host

    View full-size slide

  14. 14
    Kubernetesとは
    What is Kubernetes?

    View full-size slide

  15. Kubernetes(k8s)
    ▫ Dockerの課題を解決するようなOSS
    ▫ Dockerホストをクラスタリング
    ▫ コンテナアプリの本番運用基盤を形成
    15

    View full-size slide

  16. k8sが解決する課題
    ▫ 可用性
    Hostのクラスタ化による障害時のコンテナ再起動
    Docker Host Docker Host Docker Host
    Resource Pool
    16

    View full-size slide

  17. k8sが解決する課題
    ▫ 監視
    Liveness、Readinessによる死活・健全性監視の実現
    17

    View full-size slide

  18. k8sが解決する課題
    ▫ 負荷分散
    Podアクセスへの仲介であるService(svc)の実装
    18
    IP: ???
    svc svc
    IP: x.x.x.x IP: x.x.x.x

    View full-size slide

  19. k8sが解決する課題
    ▫ スケーリング
    HorizontalPodAutoscaler(hpa)によるオートスケーリング
    19
    hpa hpa
    !!

    View full-size slide

  20. k8sが解決する課題
    ▫ 大量コンテナの管理
    ▫ ManifestファイルによるInfrastructure as Code(IaC)化
    ▫ IaC化によるコンテナのオーケストレーション
    Docker Host
    20
    Docker Host
    Docker Host
    Mani
    fest
    Mani
    fest
    Delete
    Create

    View full-size slide

  21. k8sが解決する課題
    ▫ 可用性
    ▫ 監視
    ▫ 負荷分散
    ▫ スケーリング
    ▫ 大量コンテナの管理
    21
    Hostのクラスタ化
    Liveness、Readiness
    Service
    HorizontalPodAutoscaler
    Manifestファイル

    View full-size slide

  22. Kubernetesのアーキテクチャ
    Kubernetes architecture

    View full-size slide

  23. k8sオブジェクト
    k8sのアーキテクチャレイヤ
    k8sクラスタ
    23
    deploy rs svc ing
    Pod
    kube-apiserver
    Kubernetesによって
    抽象化されたオブジェ
    クト群でコンテナアプリ
    を実現
    k8sオブジェクトの機能
    を実現するためのサー
    バ群
    deploy: Deployment
    rs: ReplicaSet
    ing: Ingress
    svc: Service

    View full-size slide

  24. コンテナアプリの実現
    k8sユーザ
    エンドユーザ
    24
    rs
    deploy: Deployment
    rs: ReplicaSet
    ing: Ingress
    svc: Service
    イメージレジストリ
    deploy
    svc
    ing
    pod
    pod
    pod
    url
    kubectl create -f
    : 作成 : ユーザアクセス

    View full-size slide

  25. 知っておきたい k8s用語
    ▫ Pod
    ▫ Deployment
    ▫ ReplicaSet
    ▫ Service
    ▫ Ingress
    ▫ HorizontalPodAutoscaler
    25

    View full-size slide

  26. Pod
    ▫ 複数コンテナをまとめたもの
    ▫ k8sが扱う最小単位
    ▫ コンテナ間でIPを共有
    ▫ コンテナ間でボリュームを共有
    ▫ Pod単位での作成/削除
    ▫ 共にスケールすべきコンテナを
    格納
    pod
    Shared
    Volume
    IP
    26

    View full-size slide

  27. ▫ コンテナアプリのデプロイ方式を定義
    pod
    pod
    Deployment(deploy)
    revision=1 revision=2
    27
    pod
    deploy
    rs
    rs rs
    deploy
    pod pod
    image: docker.io/httpd
    command:
    - "httpd"
    - "-DFOREGROUND"

    View full-size slide

  28. ▫ 要求数分のPodが起動している状態を保持
    pod
    ReplicaSet(rc)
    replicas=2 replicas=2
    28
    rs rs
    pod pod pod pod

    View full-size slide

  29. 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: ???

    View full-size slide

  30. pod
    pod
    pod
    Ingress(ing)
    ▫ エンドユーザがServiceにアクセス可能なURLを提供
    30
    svc
    pod
    pod
    pod
    svc
    ing
    url

    View full-size slide

  31. HorizontalPodAutoscaler(hpa)
    ▫ Podのオートスケールを実現
    ▫ DeploymentやReplicaSetに紐づきPod数を操作
    31
    deploy
    rs
    hpa
    deploy
    rs
    hpa
    pod pod pod pod
    !!

    View full-size slide

  32. k8sオブジェクト
    k8sのアーキテクチャレイヤ
    k8sクラスタ
    32
    deploy rs svc ing
    pod
    kube-apiserver
    Kubernetesによって
    抽象化されたオブジェ
    クト群でコンテナアプリ
    を実現
    k8sオブジェクトの機能
    を実現するためのサー
    バ群
    deploy: Deployment
    rs: ReplicaSet
    ing: Ingress
    svc: Service

    View full-size slide

  33. 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コール

    View full-size slide

  34. k8sを構成するサーバ群
    ▫ Masterサーバのプロセス群
    ▫ kube-apiserver
    ▫ APIエンドポイントとして機能
    ▫ kube-controller-manager
    ▫ 各種コントローラを実行・管理
    ▫ kube-scheduler
    ▫ PodのNodeへの割り当て
    34

    View full-size slide

  35. k8sを構成するサーバ群
    ▫ etcdサーバのプロセス群
    ▫ etcd
    ▫ k8sクラスタの構成情報を格納するKVS
    ▫ クラスタを構成するNodeの情報
    ▫ ReplicaSetの現在の複製数
    ▫ Podの現在の状態
    ▫ etc...
    35

    View full-size slide

  36. k8sを構成するサーバ群
    ▫ Nodeサーバのプロセス群
    ▫ kubelet
    ▫ 実際にPodを実行するエージェント
    ▫ kube-proxy
    ▫ Serviceの仮想IPへのアクセスをPodに転送
    ▫ CNI(Container Network Interface)実装
    ▫ コンテナネットワークを実現
    36

    View full-size slide

  37. k8sのネットワーク(コンテナネットワーク)
    ▫ 別ホスト上のPod同士は直接通信できない
    37
    Node Node
    pod
    pod pod
    pod
    docker0(仮想ブリッジ) docker0(仮想ブリッジ)

    View full-size slide

  38. k8sのネットワーク(コンテナネットワーク)
    ▫ CNI実装により別ホスト上のPod同士が通信可能に
    38
    Node Node
    pod
    pod pod
    pod
    例) CNI実装=flannelの場合
    flannelによるSDN(L2)
    docker0(仮想ブリッジ) docker0(仮想ブリッジ)

    View full-size slide

  39. 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(仮想ブリッジ)

    View full-size slide

  40. 40
    Kubernetesに触れてみる
    Try Kubernetes

    View full-size slide

  41. k8sクラスタの構築方法
    ▫ クラウドのマネージドサービスを使う
    ▫ GKE、EKS、AKSなど
    ▫ 自前で作る
    ▫ ツールを使う
    ▫ 一から手動
    41
    k8sクラスタを管理する立場の方には
    ぜひ一度挑戦してみることをおススメ

    View full-size slide

  42. k8sクラスタ構築時のつまずきポイント
    Q:
    A:
    42
    kubeletが起動してくれない!
    サーバのswapが有効になっていませんか?
    kubeletはswap領域が存在していると起動しないよう
    になっています。
    またdockerのcgroup driverとkubeletのcgroup
    driverが一致していない時もkubeletは起動しません。
    あわせて確認してください。

    View full-size slide

  43. k8sクラスタ構築時のつまずきポイント
    Q:
    A:
    43
    Serviceの仮想IPからPodにアクセスできない!
    まずはkube-proxyが正しく動作していることを確認
    します。動作している場合はコンテナネットワークが
    上手く形成できていない可能性があります。特に手動
    構築でflannelを利用しているときはdockerとの連携
    が正しく行われていることを確認しましょう。

    View full-size slide

  44. k8sクラスタ構築時のつまずきポイント
    Q:
    A:
    44
    kubernetes-dashboardってBasic認証できない?
    kubernetes-dashboardのManifestにオプションを付
    与して展開することで可能です。ただし、Basic認証
    を利用するにはkube-apiserverが認可方式にRBACだ
    けでなく、ABAC(Attribute Based Access Control)
    を利用する設定にする必要があります。

    View full-size slide

  45. k8sクラスタ構築時のつまずきポイント
    Q:
    A:
    45
    Cloud ProviderにAWSを使いたい!
    「kubeadm init」する前に以下の設定をしましょう。
    1. EC2インスタンスとSecurityGroupにタグ
    「KubernetesCluster=<クラスタ名>」をつける
    2. kubeletの起動オプションに「--cloud-
    provider=aws」をつける
    3. kubeadmのconfigに「cloudProvider: aws」と
    「nodeName: 」をつける

    View full-size slide

  46. k8sの遊び場
    ▫ Katacoda
    46

    View full-size slide

  47. k8sの遊び場
    ▫ Katacoda
    47

    View full-size slide

  48. k8sの遊び場
    ▫ Play with Kubernetes(PWK)
    48

    View full-size slide

  49. Kubernetesの遊び場
    49
    ▫ Play with Kubernetes(PWK)
    まとめ
    Conclusion

    View full-size slide

  50. まとめ
    ▫ Kubernetes(k8s)
    ▫ Dockerホストのクラスタリング
    ▫ コンテナアプリの本番運用基盤を形成
    ▫ Kubernetesのアーキテクチャ
    ▫ k8sオブジェクトレイヤとk8sクラスタレイヤ
    ▫ 前者はk8sユーザが、後者はクラスタ管理者が意識
    k8sには固有の概念が多いので
    触りながら理解していきましょう
    50

    View full-size slide