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

コンテナ勉強会

 コンテナ勉強会

とある勉強会の資料

世良泰明

January 25, 2023
Tweet

More Decks by 世良泰明

Other Decks in Technology

Transcript

  1. コンテナ勉強会 2023/1/25 とある勉強会用資料 世良泰明

  2. 目次 1. はじめに 2. コンテナオーケストレータとは 3. Kubernetes 3.1 概要 3.2

    Kubernetesのノード 3.3 Kubernetesリソース 3.4 コンテナ間ネットワーク 3.5 デプロイ方法 4. Openshift 4.1 概要 5. AWSにおけるコンテナオーケストレーション 5.1 ECS 5.2 EKS 5.3 データプレーン 5.4 組み合わせ比較 6. まとめ
  3. 1.はじめに 本資料では、AWS上でコンテナを稼働させることを念頭に 以下について最低限の概要を抑える ・Kubernetes ・Openshift ・AWSにおけるコンテナオーケストレーション 今回扱うもの Amazon Elastic Kubernetes

    Service (Amazon EKS) Amazon Elastic Container Service (Amazon ECS) Red Hat OpenShift Service On AWS
  4. 2.コンテナオーケストレータとは コンテナを安定運用するためのサービス ・配置管理 ・負荷分散 ・状態監視と自動復旧 ・デプロイ このあたりを自動化, 管理しやすくしてくれる

  5. 3 Kubernetes Kubernetes

  6. 3.1 概要: Kubernetesとは 代表的なコンテナオーケストレーションツール 2014年にGoogleからOSS化. 現在はCNCF(Cloud Native Conputing Foundation)が管理している. k8sと略されることもある.

    特徴 ・複数のコンポーネントで構成されている.(DNS, Api-server, schedularなど) ・宣言型でリソースを定義. できること ・サービスディスカバリーと負荷分散 ・自動化されたロールアウト・ロールバック ・自己修復 ・機密情報と構成管理 など
  7. 3.2 Kuberntesのノード Kubernetesでは2種類のノード(マシン)によって構成される ・コントロールプレーンノード(マスターノード) ・ワーカーノード アイコン https://github.com/kubernetes/community https://github.com/kubernetes/kubernetes/tree/master/logo コントロールプレーンノード(マスターノード) ワーカーノード

    クラスター/各リソースを管理するためのノード 内部DNS, Api-server, スケジューラなどが動作している コンテナ(Pod)を稼働させるためのノード Kubernetesクラスター ワーカーノード マスターノード
  8. 参考: Kuberntesのコンポーネント https://kubernetes.io/ja/docs/concepts/overview/components/ ワーカーノード マスターノード (複数台で 冗長構成) Kubernetesでは2種類のノード(マシン)によって構成される ・コントロールプレーンノード(マスターノード) ・ワーカーノード

  9. 3.3 Kubernetesリソース リソース: kubernetes上の抽象化されたオブジェクト 1. コンテナ実行に関わるリソース ・Pod ・Replicaset ・Deployment など

    2. コンテナのエンドポイント提供/サービスディスカバリを提供するリソース ⇒ ネットワーク周りをいい感じにしてリソースに繋げられるようにする ・Service(=L4) ・Ingress(=L7) 他にもあるが今回はここまで
  10. コンテナ実行に関わるリソース Pod ・アプリケーションの最小単位. ・1つのPodにつき1つIPアドレスが付与される. ・利用イメージ, CPU, メモリ等定義. ・システム上ではラベルによって区別がされる. Podの定義(sample-pod.yaml) apiVersion:

    v1 kind: Pod metadata: name: sample-pod1 labels: system: a spec: containers: - name: nginx-container image: nginx:1.16 コンテナ NIC コンテナ NIC サイドカー コンテナ 基本は1Pod1コンテナ. ログ出力やサービスメッシュ等でサイドカーコンテナ等を利用することもある.
  11. コンテナ実行に関わるリソース ReplicaSet Podの上位概念. ・Podのレプリカを作成し, 指定した数のPodを維持し続けるリソース ・Podが壊れたら自動で立ち上げ直してくれる. ReplicaSetの定義(sample-rs.yaml) worker node 例:

    Pod3つ複製 worker node worker node ReplicaSet apiVersion: apps/v1 kind: ReplicaSet metadata: name: sample-rs spec: replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.16
  12. コンテナ実行に関わるリソース Deployment ReplicaSetの上位概念. ・ReplicaSetを管理することで, ローリングアップデートやロールバックなどを実現. 段階的に置き換え 旧ReplicaSet apiVersion: apps/v1 kind:

    Deployment metadata: name: sample-deployment spec: replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.16 Deploymentの定義(sample-deployment.yaml) 新ReplicaSet ③ ② ① コンテナ実行系のリソース Pod < ReplicaSet < Deployment
  13. 3.4 Kubernetes コンテナ間ネットワーク ・各ノードのネットワーク 192.168.100.0/24 ・コンテナの世界のネットワーク 10.0.0.0/8 worker3 worker1 worker2

    192.168.100.0/24 192.168.100.34 192.168.100.66 192.168.100.98 kubernetesは2つの層のネットワークがある 10.0.0.0/8 Serviceリソース ・コンテナネットワークでPodを負荷分散 ・ノードのネットワークとの橋渡し 等をしてくれる
  14. 3.5 Kubernetes デプロイ方法 1. yamlマニフェストファイルを適用 kubectl applyコマンドで適用. 2. Helmを使う ⇒

    パッケージマネージャーHelmでお手軽に導入 kubectl apply -f sample-pod.yaml helm add http://xxxx.xxx helm update helm install xxx yum, aptコマンドみたいな感じ リソース削除するときはkubectl delete
  15. 4. Openshift Openshift

  16. 4.1 Openshift 概要 RedHat社により提供されるKubernetes互換のコンテナオーケストレーター 特徴 ・Kubernetesの上位互換 ・RedHatによるサポートがつく ・コミュニティ版としてOKD(https://www.okd.io/)が存在. Kubernetesとの違い ・インフラノードの存在

    ・オペレータによるデプロイ ・GUI操作が可能
  17. Openshift デプロイ方法 3種類ある 1. yamlマニフェストファイルを適用 ⇒ 一番愚直な方法 2. Helmを使う ⇒

    パッケージマネージャーHelmでお手軽に導入 3. OperatorHubの利用 ⇒ 独自に定義された拡張リソースとして作成, 管理を行う
  18. 5. AWSにおけるコンテナオーケストレーション AWSにおけるコンテナオーケストレーション

  19. 5.1 AWSにおけるコンテナオーケストレーション コンテナオーケストレーション ・ECS ・EKS ・ROSA Amazon Elastic Kubernetes Service

    (Amazon EKS) Amazon Elastic Container Service (Amazon ECS) Red Hat OpenShift Service On AWS 今回はこちらの2つについて主に解説する
  20. ECS AWS独自のマネージドなコントロールプレーン Elastic Container Service 複数の構成要素 ・タスク ・サービス ・クラスター タスク<

    サービス < クラスター タスク コンテナ タスク コンテナ サービス タスク コンテナ サービス ECSクラスター https://docs.aws.amazon.com/ja_jp/AmazonECS/ latest/developerguide/Welcome.html
  21. ECS タスク定義 ・コンテナが動作するコンポーネント ・1つ以上のコンテナから構成されるアプリ実行単位 タスク コンテナ タスク コンテナ サービス タスク

    コンテナ サービス ECSクラスター タスク ・タスクを作成するテンプレート定義. ・ 実行するイメージ, CPU, メモリ, IAMロール等を定義 ・JSONで書かれる
  22. ECS ・指定した数だけタスクを維持するスケジューラ ・タスク数, ロードバランサ, ネットワークを指定 ・タスク数が減ればタスク定義から自動で復旧 タスク コンテナ タスク コンテナ

    サービス タスク コンテナ サービス ECSクラスター サービス
  23. ECS ・サービスとタスクを実行する論理グループ ・クラスター単位でアプリケーションを分離できる. タスク コンテナ タスク コンテナ サービス タスク コンテナ

    サービス ECSクラスター クラスター
  24. ECS AWS独自のマネージドなコントロールプレーン ECS タスク< サービス < ECSクラスター タスク コンテナ タスク

    コンテナ サービス タスク コンテナ サービス ECSクラスター
  25. EKS Kubernetesベースのマネージドなコントロールプレーン EKS EKSクラスター EKSコントロールプレーン ※EKSはコントロールプレーンを指す場合と, マネージドサービス全体を指す場合があるので要注意 https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/what-is-eks.html

  26. AWS データプレーン: Fargate, EC2 AWSフルマネージドなデータプレーン Fargate 仮想インスタンス EC2 ・仮想マシン ・スケールにやや難あり(垂直が難しい)

    ・起動は早い ・オーバーレイネットワークを利用 ・料金はインスタンスサイズ次第 ・運用コストがかかる(OSアプデ, 監視など) ・コンテナ稼働用のサーバレスサービス ・スケールしてくれる ・起動は遅め ・1タスク(1Pod)あたり1つのENI ・やや料金高め ・ホスト管理が不要
  27. AWSにおけるコンテナオーケストレーション コントロールプレーンとデータプレーンの組み合わせ コントロールプレーン ・ECS ・EKS データプレーン ・EC2 ・Fargate EKS ECS

    Fargate EC2 4通りの組み合わせ コントロールプレーン データプレーン
  28. AWSにおけるコンテナオーケストレーション コントロールプレーンとデータプレーンの組み合わせ メリデメ比較 時間切れ

  29. 6. まとめ AWSを念頭に, コンテナオーケストレーションサービスの概要を学んだ ・Kubernetes ・Openshift ・AWSにおけるコンテナオーケストレーション 押さえておいてほしいこと ・コントロールプレーンとデータプレーンがなんとなくわかる ・K8s,

    ECSの構成要素(リソース)をそれぞれ理解していること k8s: Pod, Replicaset, Deployment ECS: タスク, サービス, クラスター
  30. 参考文献 1. AWSコンテナ設計・構築[本格]入門 株式会社野村総合研究所 新井雅也, 馬勝淳史 著 NRIネットコム株式会社 佐々木拓郎 監修

    2. Kubernetes完全ガイド 第2版 青山真也 3. Openshift徹底入門 株式会社リアルグローブ・オートメーティッド 青山秀治 レッドハット株式会社 森真也, 清水護, 織学, 宇都宮卓也, 斎藤和史, 野間亮志, 荒木俊博 著 レッドハット株式会社 須江信洋 監修