Docker/Kubernetesコトハジメ/Docker~Kubernetes First Step

3499a1d71fa70b8ee44816ca9e7329fe?s=47 bells17
August 05, 2020

Docker/Kubernetesコトハジメ/Docker~Kubernetes First Step

CNBF Meetup #2 で発表した資料です

動画はこちら
https://youtu.be/yjtw4bp9pxg

Googleスライド版はこちらになります
https://docs.google.com/presentation/d/1xfdLkUNNc5n8yF9MNfn15z3rYjkuOUd-EG5oQ2YJVUg/edit?usp=sharing

3499a1d71fa70b8ee44816ca9e7329fe?s=128

bells17

August 05, 2020
Tweet

Transcript

  1. Docker/Kubernetes コトハジメ Cloud Native Bright Feature Meetup #2 @bells17

  2. • Daiki Hayakawa / @bells17 • ソフトウェアエンジニア • 主に Kubernetes

    関連コンポーネントの 開発など • Kubernetes #sig-docs-ja-reviews • CNBF実行委員 • @bells17_
  3. • Dockerとは • Dockerを使ってみる • Kubernetesとコンテナオーケストレーター • Kubernetesを使ってみる • Kubernetesについて学ぶには

    Agenda
  4. • Docker/KubernetesなどCloud Nativeなコンテキストでよく話されるワード について知ってもらう • Dockerの基礎知識や簡単な使い方について知ってもらう • Docker周辺ツールについて簡単に知ってもらう • コンテナオーケストレーターの概要を知ってもらう

    • Kubernetesの基礎知識や簡単な使い方について知ってもらう • Kubernetesを学習する上で参考になるページや書籍について紹介する 今日話すこと
  5. Dockerとは

  6. • Docker社が開発したコンテナアプリケーション実行環境とその周辺 ツール • コンテナイメージのビルド~実行環境などを備えている • VM型の仮想化に比べ起動が高速 Dockerとは

  7. • アプリケーションの実行に必要な環境を1つのパッケージにまとめたも の(=コンテナイメージ) ◦ コード ◦ ランタイム ◦ システムライブラリ ◦

    etc… • Linuxカーネルの機能であるnamespace, cgroup, pivot_rootなどを利用す ることでコンテナを実現 コンテナとは?
  8. https://www.docker.com/resources/what-container より

  9. コンテナとVMの比較 コンテナ VM メモリ消費 少ない 多い 起動時間 数秒 数十秒~数分 起動できるOSについて

    例えばLinuxサーバー上 でWindows Serverを立ち 上げることはできない ハードウェアを仮想的 にエミュレートしている ので起動するOSの制約 が少ない
  10. Dockerを使ってみる

  11. FROM centos:8 RUN dnf -y install nginx ENTRYPOINT ["nginx", "-g",

    "daemon off;"] Dockerfile $ docker build -t mynginx:dev . Docker Image
  12. Dockerコンテナを実行 $ docker run -p 80:8080 mynginx:dev http://localhost:8080 Dockerコンテナを起動 Dockerコンテナとして起動した

    nginxアプリケーションにアクセス可能
  13. • Dockerイメージなどのコンテナイメージを保存するサービス • Githubのようにユーザーや組織単位で名前空間を持ち、名前空間内 でコンテナイメージを作成できるものが一般的 • コンテナイメージの公開/非公開を設定でき、非公開コンテナを利用す る場合、コンテナレジストリの認証を行うことで利用可能 コンテナレジストリ

  14. コンテナレジストリにDockerイメージをpush $ docker push mynginx:dev Docker Image Container Registry push

    image 例: DockerHubに作成した Dockerイメージをpush
  15. • Docker Hub: Docker社が提供しているコンテナレジストリサービス • GCP Container Registry: GCPが提供しているコンテナレジストリサービス でイメージの脆弱性診断機能やGKEとの連携機能がある

    • AWS ECR: AWSが提供しているコンテナレジストリサービスでAWS ECSや AWS EKSとの連携が行いやすい • Azure Container Registry: Azureが提供するコンテナレジストリサービス でコンテナイメージ以外にもHelm Chartなども格納が可能 コンテナレジストリの例(SaaS)
  16. • Harbor: VMWareなどが開発していたOSSコンテナレジストリでコンテナイ メージに対する脆弱性診断などの機能を持つ • Kraken: Uberが開発しているOSSコンテナレジストリでP2P通信を利用す ることで大規模環境でも高速なコンテナイメージのダウンロードが可能 なレジストリ •

    Quay: CoreOSが開発していたOSSコンテナレジストリで最近RedHatに買 収された コンテナレジストリの例(OSS)
  17. • 複数のDockerコンテナをまとめて実行するためのツール • YAMLファイルで起動するDockerコンテナの定義する • docker-composeコマンドで定義したDockerコンテナの起動をまと めて行える • 主に開発環境~CIテストなどで利用することが多い印象 Docker

    Compose
  18. version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart:

    always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} docker-compose によるコンテナの起動 (例: wordpressの構築・起動) $ docker-compose up http://localhost:8080/wp-login.php docker-composeで起動した wordpressにアクセス可能
  19. Kubernetesと コンテナオーケストレーター

  20. • 複数のサーバーで様々なコンテナの展開・起動を管理してくれるソフト ウェア • コンテナ間のネットワークやストレージなどの管理なども行ってくれる コンテナオーケストレーター

  21. • Googleが内部で運用していたコンテナ基盤であるBorgをOSS向けに作 り直したコンテナオーケストレーター • 現在Kubernetesの管理はCloud Native Computing Foundation(CNCF)に移 管されており、CNCFのGraduatedプロジェクトとして認定されている Kubernetesとは

  22. CNCFプロジェクトの成熟度レベル

  23. None
  24. Kubernetesでコンテナを使ってみる

  25. Kubernetesでコンテナを使ってみる apiVersion: v1 kind: Pod metadata: name: nginx labels: app:

    nginx spec: containers: - name: nginx image: nginx $ kubectl apply -f pod.yaml pod.yaml $ kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 22s $ kubectl port-forward nginx 80:8080 $ curl -D - -s -o /dev/null localhost:8080 HTTP/1.1 200 OK Server: nginx/1.17.8 Date: Wed, 12 Feb 2020 12:12:23 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 21 Jan 2020 13:36:08 GMT Connection: keep-alive ETag: "5e26fe48-264" Accept-Ranges: bytes 作成したコンテナに リクエストできることを確認
  26. Kubernetes Components

  27. Pod(コンテナ)作成までの大まかな流れ

  28. • 先ほどの例のようにKubernetesではコンテナを実行する単位であるPod といったリソースを宣言的に作成することで、Kubernetesが宣言された 状態になるように自動的にコンテナの作成といった作業を行ってくれ る - 宣言的API • また、先ほど作成されたコンテナが何らかの理由で停止した場合は、 宣言されたPodのリソースの状態になるべく自動修復が行われる

    - Self Healing • 更にKubernetesはKubernetes Componentが利用しているものと同様の APIを公開しているので、Kubernetes本体の機能を独自に拡張すること ができる - Automatable Kubernetesの特徴
  29. • Pod: Kubernetesにおけるコンテナの最小実行単位。docker-composeの ように複数のコンテナグループをまとめたものをPodという単位で扱う • Deployment: 同一のPodを任意の数だけクラスタで展開を行い、更にそ れらをローリングアップデートによるデプロイする機能を持つ • CronJob:

    Podをcronのように一定の周期で実行する機能を提供する。 Batch処理などの定期処理にはこのリソースを利用することが多い • etc... Kubernetesの主なリソース
  30. Kubernetesを使ってみる

  31. マネージドKubernetes

  32. • Google Cloud Platformが提供するマネージドKubernetesサービス • Kubernetesクラスタの構築やアドオンの管理などが完全にマネージさ れていて非常に簡単にKubernetesクラスタの利用を始めることができ る • ログやモニタリングなどもStackdriverと統合されていてKubernetesを本

    番レベルの環境で利用するのがとても簡単 • 最近だとAnthosという名前でService MeshやConfig Managementなど Kubernetes上で利用できる様々なサービスを展開している GKE
  33. • AWSが提供するマネージドKubernetesサービス • 自由度の高いKubernetesクラスタの構築が可能で、クラスタ構築をサ ポートするeksctlなどのコマンドラインツールが提供されている • ドキュメントが充実しており、各種アドオンのインストール方法や Cloudwatchとの連携方法などについての詳細などについて詳細に記 載されている •

    KubernetesのノードとしてFargateを利用することができ、いくつかの制 約があるものの、ノードのスケールなどをユーザーが気にすることなく Kubernetesクラスタを利用できる Amazon EKS
  34. • Microsoft Azureが提供するマネージドKubernetesサービス • Azure MonitorなどのAzureサービスと連携してKubernetesクラスタを利用 することが可能 • Windows Serverコンテナの利用が可能(プレビュー版)

    • Virtual Kubeletを利用したAzure Container Instancesというサーバーレス サービスとKubernetesを連携が可能 AKS
  35. • IBM Cloudが提供するマネージドKubernetesサービス • ibmcloudコマンドで簡単にKubernetesクラスタの構築が可能 • サービスメッシュであるIstioがマネージドアドオンとして提供されている • IBM® Log

    Analysis with LogDNAやIBM Cloud Monitoring with Sysdigと連携することでロギングやメトリクスの管理が可能 IKS
  36. Kubernetesクラスター構築ツールなど

  37. • Kubernetesコミュニティが公式に提供するOSSのKubernetesクラスタ構築 ツール • 1コマンドでKubernetesクラスタの構築が可能 • Kubernetesクラスタを構築する上で公式が推奨する方法を提供してく れる • 他のKubernetesクラスタ構築ツールから利用されることを想定してお

    り、拡張がしやすく、モジュール形式でも提供されている kubeadm
  38. • Rancher Labsが提供するOSSのKubernetesクラスタ構築ツール • マネージドKubernetesのようなKubernetesクラスタ管理画面があり、 ユーザー管理からKubernetesクラスタの構築・バージョンアップなどの 管理まで一通りを行うことができる • またDocker Machine

    Pluginを作成することで任意の環境に対するクラ スタの自動プロビジョニングが可能 • KubernetesクラスタにRancher独自のコンポーネントがインストールされ ており、マネージドKubernetesのようなKubernetesクラスタの状態チェッ クやリソースのデプロイが管理画面から可能となっている Rancher
  39. • 学習支援のためのトレーニングプラットフォームであるKatacoda上に設 置されたKubernetesのPlayground環境 • ブラウザから実際のKubernetesクラスタを構築~操作することができ、 手元などにKubernetes環境を用意することなく利用が可能なので非常 に簡単にKubernetesを触ることができる • KatacodaにはKubernetes Playground以外にもKubernetes学習用のカリ

    キュラムがいくつもあるので、このカリキュラムをこなすことで Kubernetesの基本的な操作方法を学習することができる Kubernetes Playground(Katacoda)
  40. Kubernetesについて学ぶには

  41. Kubernetesチュートリアル

  42. • GKEチュートリアル • EKSチュートリアル • Azureチュートリアル • IKSチュートリアル 各種パブリッククラウドのチュートリアル

  43. • Docker/Kubernetes 実践コンテナ開発入門 • 15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運 用まで • Kubernetes実践入門

    プロダクションレディなコンテナ&アプリケーショ ンの作り方 • Kubernetes完全ガイド Kubernetes関連書籍
  44. • Certificate Kubernetes Administrator(CKA) • Certified Kubernetes Application Developer(CKAD) 日本だとクリエーションラインさんが上記資格取得支援のためのトレーニ

    ングなどを行っています Kubernetes関連資格
  45. • Kubernetes Meetup Tokyo ◦ YouTubeチャンネル • Docker Meetup Tokyo

    • CloudNative Days ◦ YouTubeチャンネル • Cloud Native Meetup Tokyo • Cloud Native Developers JP • JAWS-UG コンテナ支部 • KubeCon ◦ YouTubeチャンネル Kubernetes関連meetup
  46. • http://kubernetes.slack.com/の#jp-users-noviceチャンネルで何でも質問 してください! • 英語が得意な方は#kubernetes-noviceチャンネルや Stack Overflowの[kubernetes]タグで質問してみても良いと思います その他Kubernetesでわからないことがあれば

  47. • http://docs.docker.jp/index.html • https://docs.docker.com/ • https://www.docker.com/ • https://www.docker.com/resources/what-container • https://www.redhat.com/en/topics/containers/what-is-container-orchestration

    • https://www.cncf.io/ • https://kubernetes.io/ja/docs/concepts/overview/components/ • https://landscape.cncf.io/ • https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/architecture.md • https://cloud.google.com/kubernetes-engine • https://cloud.google.com/anthos • https://aws.amazon.com/jp/eks/ • https://azure.microsoft.com/ja-jp/services/container-instances/ • https://www.ibm.com/jp-ja/cloud/container-service • https://docs.microsoft.com/ja-jp/azure/aks/windows-container-cli • https://github.com/kubernetes/kubeadm • https://rancher.com/ • https://github.com/kubernetes-sigs/kind • https://www.katacoda.com/courses/kubernetes/playground 参考
  48. Thanks / Question? • Daiki Hayakawa, @bells17 • Slide: https://speakerdeck.com/bells17

    • @bells17_