Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

● Daiki Hayakawa / @bells17 ● ソフトウェアエンジニア ● 主に Kubernetes 関連コンポーネントの 開発など ● Kubernetes #sig-docs-ja-reviews ● CNBF実行委員 ● @bells17_

Slide 3

Slide 3 text

● Dockerとは ● Dockerを使ってみる ● Kubernetesとコンテナオーケストレーター ● Kubernetesを使ってみる ● Kubernetesについて学ぶには Agenda

Slide 4

Slide 4 text

● Docker/KubernetesなどCloud Nativeなコンテキストでよく話されるワード について知ってもらう ● Dockerの基礎知識や簡単な使い方について知ってもらう ● Docker周辺ツールについて簡単に知ってもらう ● コンテナオーケストレーターの概要を知ってもらう ● Kubernetesの基礎知識や簡単な使い方について知ってもらう ● Kubernetesを学習する上で参考になるページや書籍について紹介する 今日話すこと

Slide 5

Slide 5 text

Dockerとは

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

● アプリケーションの実行に必要な環境を1つのパッケージにまとめたも の(=コンテナイメージ) ○ コード ○ ランタイム ○ システムライブラリ ○ etc… ● Linuxカーネルの機能であるnamespace, cgroup, pivot_rootなどを利用す ることでコンテナを実現 コンテナとは?

Slide 8

Slide 8 text

https://www.docker.com/resources/what-container より

Slide 9

Slide 9 text

コンテナとVMの比較 コンテナ VM メモリ消費 少ない 多い 起動時間 数秒 数十秒~数分 起動できるOSについて 例えばLinuxサーバー上 でWindows Serverを立ち 上げることはできない ハードウェアを仮想的 にエミュレートしている ので起動するOSの制約 が少ない

Slide 10

Slide 10 text

Dockerを使ってみる

Slide 11

Slide 11 text

FROM centos:8 RUN dnf -y install nginx ENTRYPOINT ["nginx", "-g", "daemon off;"] Dockerfile $ docker build -t mynginx:dev . Docker Image

Slide 12

Slide 12 text

Dockerコンテナを実行 $ docker run -p 80:8080 mynginx:dev http://localhost:8080 Dockerコンテナを起動 Dockerコンテナとして起動した nginxアプリケーションにアクセス可能

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

コンテナレジストリにDockerイメージをpush $ docker push mynginx:dev Docker Image Container Registry push image 例: DockerHubに作成した Dockerイメージをpush

Slide 15

Slide 15 text

● Docker Hub: Docker社が提供しているコンテナレジストリサービス ● GCP Container Registry: GCPが提供しているコンテナレジストリサービス でイメージの脆弱性診断機能やGKEとの連携機能がある ● AWS ECR: AWSが提供しているコンテナレジストリサービスでAWS ECSや AWS EKSとの連携が行いやすい ● Azure Container Registry: Azureが提供するコンテナレジストリサービス でコンテナイメージ以外にもHelm Chartなども格納が可能 コンテナレジストリの例(SaaS)

Slide 16

Slide 16 text

● Harbor: VMWareなどが開発していたOSSコンテナレジストリでコンテナイ メージに対する脆弱性診断などの機能を持つ ● Kraken: Uberが開発しているOSSコンテナレジストリでP2P通信を利用す ることで大規模環境でも高速なコンテナイメージのダウンロードが可能 なレジストリ ● Quay: CoreOSが開発していたOSSコンテナレジストリで最近RedHatに買 収された コンテナレジストリの例(OSS)

Slide 17

Slide 17 text

● 複数のDockerコンテナをまとめて実行するためのツール ● YAMLファイルで起動するDockerコンテナの定義する ● docker-composeコマンドで定義したDockerコンテナの起動をまと めて行える ● 主に開発環境~CIテストなどで利用することが多い印象 Docker Compose

Slide 18

Slide 18 text

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にアクセス可能

Slide 19

Slide 19 text

Kubernetesと コンテナオーケストレーター

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Kubernetesでコンテナを使ってみる

Slide 25

Slide 25 text

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 作成したコンテナに リクエストできることを確認

Slide 26

Slide 26 text

Kubernetes Components

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

● 先ほどの例のようにKubernetesではコンテナを実行する単位であるPod といったリソースを宣言的に作成することで、Kubernetesが宣言された 状態になるように自動的にコンテナの作成といった作業を行ってくれ る - 宣言的API ● また、先ほど作成されたコンテナが何らかの理由で停止した場合は、 宣言されたPodのリソースの状態になるべく自動修復が行われる - Self Healing ● 更にKubernetesはKubernetes Componentが利用しているものと同様の APIを公開しているので、Kubernetes本体の機能を独自に拡張すること ができる - Automatable Kubernetesの特徴

Slide 29

Slide 29 text

● Pod: Kubernetesにおけるコンテナの最小実行単位。docker-composeの ように複数のコンテナグループをまとめたものをPodという単位で扱う ● Deployment: 同一のPodを任意の数だけクラスタで展開を行い、更にそ れらをローリングアップデートによるデプロイする機能を持つ ● CronJob: Podをcronのように一定の周期で実行する機能を提供する。 Batch処理などの定期処理にはこのリソースを利用することが多い ● etc... Kubernetesの主なリソース

Slide 30

Slide 30 text

Kubernetesを使ってみる

Slide 31

Slide 31 text

マネージドKubernetes

Slide 32

Slide 32 text

● Google Cloud Platformが提供するマネージドKubernetesサービス ● Kubernetesクラスタの構築やアドオンの管理などが完全にマネージさ れていて非常に簡単にKubernetesクラスタの利用を始めることができ る ● ログやモニタリングなどもStackdriverと統合されていてKubernetesを本 番レベルの環境で利用するのがとても簡単 ● 最近だとAnthosという名前でService MeshやConfig Managementなど Kubernetes上で利用できる様々なサービスを展開している GKE

Slide 33

Slide 33 text

● AWSが提供するマネージドKubernetesサービス ● 自由度の高いKubernetesクラスタの構築が可能で、クラスタ構築をサ ポートするeksctlなどのコマンドラインツールが提供されている ● ドキュメントが充実しており、各種アドオンのインストール方法や Cloudwatchとの連携方法などについての詳細などについて詳細に記 載されている ● KubernetesのノードとしてFargateを利用することができ、いくつかの制 約があるものの、ノードのスケールなどをユーザーが気にすることなく Kubernetesクラスタを利用できる Amazon EKS

Slide 34

Slide 34 text

● Microsoft Azureが提供するマネージドKubernetesサービス ● Azure MonitorなどのAzureサービスと連携してKubernetesクラスタを利用 することが可能 ● Windows Serverコンテナの利用が可能(プレビュー版) ● Virtual Kubeletを利用したAzure Container Instancesというサーバーレス サービスとKubernetesを連携が可能 AKS

Slide 35

Slide 35 text

● IBM Cloudが提供するマネージドKubernetesサービス ● ibmcloudコマンドで簡単にKubernetesクラスタの構築が可能 ● サービスメッシュであるIstioがマネージドアドオンとして提供されている ● IBM® Log Analysis with LogDNAやIBM Cloud Monitoring with Sysdigと連携することでロギングやメトリクスの管理が可能 IKS

Slide 36

Slide 36 text

Kubernetesクラスター構築ツールなど

Slide 37

Slide 37 text

● Kubernetesコミュニティが公式に提供するOSSのKubernetesクラスタ構築 ツール ● 1コマンドでKubernetesクラスタの構築が可能 ● Kubernetesクラスタを構築する上で公式が推奨する方法を提供してく れる ● 他のKubernetesクラスタ構築ツールから利用されることを想定してお り、拡張がしやすく、モジュール形式でも提供されている kubeadm

Slide 38

Slide 38 text

● Rancher Labsが提供するOSSのKubernetesクラスタ構築ツール ● マネージドKubernetesのようなKubernetesクラスタ管理画面があり、 ユーザー管理からKubernetesクラスタの構築・バージョンアップなどの 管理まで一通りを行うことができる ● またDocker Machine Pluginを作成することで任意の環境に対するクラ スタの自動プロビジョニングが可能 ● KubernetesクラスタにRancher独自のコンポーネントがインストールされ ており、マネージドKubernetesのようなKubernetesクラスタの状態チェッ クやリソースのデプロイが管理画面から可能となっている Rancher

Slide 39

Slide 39 text

● 学習支援のためのトレーニングプラットフォームであるKatacoda上に設 置されたKubernetesのPlayground環境 ● ブラウザから実際のKubernetesクラスタを構築~操作することができ、 手元などにKubernetes環境を用意することなく利用が可能なので非常 に簡単にKubernetesを触ることができる ● KatacodaにはKubernetes Playground以外にもKubernetes学習用のカリ キュラムがいくつもあるので、このカリキュラムをこなすことで Kubernetesの基本的な操作方法を学習することができる Kubernetes Playground(Katacoda)

Slide 40

Slide 40 text

Kubernetesについて学ぶには

Slide 41

Slide 41 text

Kubernetesチュートリアル

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

● Docker/Kubernetes 実践コンテナ開発入門 ● 15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運 用まで ● Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーショ ンの作り方 ● Kubernetes完全ガイド Kubernetes関連書籍

Slide 44

Slide 44 text

● Certificate Kubernetes Administrator(CKA) ● Certified Kubernetes Application Developer(CKAD) 日本だとクリエーションラインさんが上記資格取得支援のためのトレーニ ングなどを行っています Kubernetes関連資格

Slide 45

Slide 45 text

● Kubernetes Meetup Tokyo ○ YouTubeチャンネル ● Docker Meetup Tokyo ● CloudNative Days ○ YouTubeチャンネル ● Cloud Native Meetup Tokyo ● Cloud Native Developers JP ● JAWS-UG コンテナ支部 ● KubeCon ○ YouTubeチャンネル Kubernetes関連meetup

Slide 46

Slide 46 text

● http://kubernetes.slack.com/の#jp-users-noviceチャンネルで何でも質問 してください! ● 英語が得意な方は#kubernetes-noviceチャンネルや Stack Overflowの[kubernetes]タグで質問してみても良いと思います その他Kubernetesでわからないことがあれば

Slide 47

Slide 47 text

● 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 参考

Slide 48

Slide 48 text

Thanks / Question? ● Daiki Hayakawa, @bells17 ● Slide: https://speakerdeck.com/bells17 ● @bells17_