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

98ed373322bb5e2f9a128b63ac7d509f?s=47 bbrfkr
August 02, 2018

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

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

98ed373322bb5e2f9a128b63ac7d509f?s=128

bbrfkr

August 02, 2018
Tweet

Transcript

  1. 2.

    本発表の主旨 ▫ Kubernetesのとっつきづらさ ▫ 多くの専門用語 ▫ 複雑なアーキテクチャ ▫ 捉えにくい全体像 ▫

    英語・中国語のみのドキュメント 日本語で補足補完し Kubernetesの概要・全体像を理解 2
  2. 6.

    Container Container コンテナとは ▫ 他のプロセスから隔離された プロセス実行環境 ▫ コンテナの特徴 ▫ 高速な起動

    ▫ 高い可搬性 ▫ 高いリソース利用効率 Infrastructure Operating System Bin/Lib App Bin/Lib App Container Engine 6
  3. 21.

    k8sが解決する課題 ▫ 可用性 ▫ 監視 ▫ 負荷分散 ▫ スケーリング ▫

    大量コンテナの管理 21 Hostのクラスタ化 Liveness、Readiness Service HorizontalPodAutoscaler Manifestファイル
  4. 23.

    k8sオブジェクト k8sのアーキテクチャレイヤ k8sクラスタ 23 deploy rs svc ing Pod kube-apiserver

    Kubernetesによって 抽象化されたオブジェ クト群でコンテナアプリ を実現 k8sオブジェクトの機能 を実現するためのサー バ群 deploy: Deployment rs: ReplicaSet ing: Ingress svc: Service
  5. 24.

    コンテナアプリの実現 k8sユーザ エンドユーザ 24 rs deploy: Deployment rs: ReplicaSet ing:

    Ingress svc: Service イメージレジストリ deploy svc ing pod pod pod url kubectl create -f : 作成 : ユーザアクセス
  6. 26.

    Pod ▫ 複数コンテナをまとめたもの ▫ k8sが扱う最小単位 ▫ コンテナ間でIPを共有 ▫ コンテナ間でボリュームを共有 ▫

    Pod単位での作成/削除 ▫ 共にスケールすべきコンテナを 格納 pod Shared Volume IP 26
  7. 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"
  8. 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: ???
  9. 32.

    k8sオブジェクト k8sのアーキテクチャレイヤ k8sクラスタ 32 deploy rs svc ing pod kube-apiserver

    Kubernetesによって 抽象化されたオブジェ クト群でコンテナアプリ を実現 k8sオブジェクトの機能 を実現するためのサー バ群 deploy: Deployment rs: ReplicaSet ing: Ingress svc: Service
  10. 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コール
  11. 36.

    k8sを構成するサーバ群 ▫ Nodeサーバのプロセス群 ▫ kubelet ▫ 実際にPodを実行するエージェント ▫ kube-proxy ▫

    Serviceの仮想IPへのアクセスをPodに転送 ▫ CNI(Container Network Interface)実装 ▫ コンテナネットワークを実現 36
  12. 38.

    k8sのネットワーク(コンテナネットワーク) ▫ CNI実装により別ホスト上のPod同士が通信可能に 38 Node Node pod pod pod pod

    例) CNI実装=flannelの場合 flannelによるSDN(L2) docker0(仮想ブリッジ) docker0(仮想ブリッジ)
  13. 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(仮想ブリッジ)
  14. 41.

    k8sクラスタの構築方法 ▫ クラウドのマネージドサービスを使う ▫ GKE、EKS、AKSなど ▫ 自前で作る ▫ ツールを使う ▫

    一から手動 41 k8sクラスタを管理する立場の方には ぜひ一度挑戦してみることをおススメ
  15. 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: <private DNS名>」をつける
  16. 50.

    まとめ ▫ Kubernetes(k8s) ▫ Dockerホストのクラスタリング ▫ コンテナアプリの本番運用基盤を形成 ▫ Kubernetesのアーキテクチャ ▫

    k8sオブジェクトレイヤとk8sクラスタレイヤ ▫ 前者はk8sユーザが、後者はクラスタ管理者が意識 k8sには固有の概念が多いので 触りながら理解していきましょう 50
  17. 51.

    51