Slide 1

Slide 1 text

うしとたぬきによるアプリ開発 Rancher Meetup Tokyo #13 レッドハット株式会社 北山 晋吾 Solution Architect ✖

Slide 2

Slide 2 text

2 Introduction Shingo Kitayama Company: Red Hat K.K. Role: Solution Architect Product: OpenShift Interest: KPP shkitayama spchildren

Slide 3

Slide 3 text

3 本日お伝えしたいこと 複雑なクラウドネイティブではなく。 ” 気軽なアプリ開発プラットフォームについて考えてみた ”

Slide 4

Slide 4 text

4 1. Kubernetesを使ったアプリ開発 Agenda 2. GitLabのCI/CDパイプライン 3. Rancherのk8s運用 4. まとめ

Slide 5

Slide 5 text

1. Kubernetesを使ったアプリ開発 夢見るクラウドネイティブな世界 5

Slide 6

Slide 6 text

6 コンテナの導入状況の結果 出展: IDC Japan/2018年 国内クラウドインフラストラクチャに関するユーザー動向調査結果 https://www.idcjapan.co.jp/Press/Current/20180614Apr.html 半数の企業がDockerに対する取り組みを始め、本番環境も進んでいる。

Slide 7

Slide 7 text

7 みんな大好きKubernetes Kubernetesを使用している企業 41.1% Dockerの導入目的 アプリケーションの運用管理効率化 34.6% アプリケーションの品質/パフォーマンス向上 29.9% インフラコストの削減 26.2% アプリケーションのリリーススピード/頻度の向上 23.4% 出展: IDC Japan/2018年 国内クラウドインフラストラクチャに関するユーザー動向調査結果 https://www.idcjapan.co.jp/Press/Current/20180614Apr.html Dockerの利用は、アプリケーションの運用管理効率化が導入目的

Slide 8

Slide 8 text

8 KubernetesとKubernetesサービス containerd / cri-o / docker … Any Infrastructures OCI CRI Kubernetes Mesos Cloud Foundry DC/OS Pivotal CF Bluemix Docker OpenShift GKE AKS EKS Swarm Kubernetesサービスも拡充 × 何を選ぶのか ○ 何がしたいのか Kubernetesが デファクトに… Managed Cloud Public Cloud Hybrid Cloud Private Cloud RKE

Slide 9

Slide 9 text

9 Kubernetesがやってくれること マルチクラウド 複数のホストにわたるコンテナのオーケストレーション リソースの利用効率 エンタープライズ・アプリケーションの実行に必要なリソースを最大限活用できるようにハードウェアを効 率よく使用する サービスディスカバリ アプリケーションのデプロイとアップデートを制御し自動化する リソースのオートスケール コンテナ化されたアプリケーションとそのリソースをオンザフライでスケールする サービスの宣言的管理 デプロイ済みアプリケーションが常にデプロイ方法に従って実行される 自己回復 自動再起動、自動複製、自動スケーリングにより、アプリケーションのヘルスチェックと自己治療を行う Kubernetesの主な機能

Slide 10

Slide 10 text

10 Cloud Native Application開発に必要なもの Container Registry QuayやDocker Trusted registryなどのコンテナイメージの管理 Network OpenvSwitchなどのプロジェクト/サービス間のインテリジェントなルーティング Telemetry Heapster / Kibana / Hawkularなどを利用したリソースの監視とオートスケール Security マルチテナンシーを実現するOAUTH / LDAP / RBACによるプロジェクト管理 Cluster Automation Kubernetesのインストールやクラスタのライフサイクル管理 Service Catalog アプリケーションをパッケージ化した豊富なカタログ Kubernetesだけでは実現できないあれこれは、うしとたぬきにお任せ 出展: What is Kubernetes https://www.redhat.com/ja/topics/containers/what-is-kubernetes

Slide 11

Slide 11 text

11 Cloud Nativeなアプリ開発フロー Build Developer Test Container Registry Helm Chart Repository Artifact Management Continuous Integration Version Control Continuous Integration Continuous Integration 開発したアプリケーションに対して、動的なテス トを行い、ステージング環境や本番環境にデプロイ できる成果物(Artifact)を作成する流れ。 Gitによるアプリ開発の視点で言うならば、開発者 が作成した新しいコードをマスターブランチにマー ジするプロセス。これによって、新しいコードに対 して一定の品質を担保できた成果物が作成される。 成果物の一例 ・Containerイメージ ・VMイメージ ・アプリケーションアーカイブ ・ChatやManufactures などなど

Slide 12

Slide 12 text

12 Cloud Nativeなアプリ開発フロー Container Registry Deploy Staging Deploy Production Release Monitoring Helm Chart Repository Artifact Management Continuous Delivery/Deployment Continuous Delivery / Deployment Continuous Delivery / Deployment 成果物をステージング環境にデプロイして動的テ ストを行うことや、本番環境にデプロイしリリース するまでの流れ。 厳密に言うと、”Delivery”はCIの延長上にありス テージング環境や本番環境にデプロイするまでの仕 組み。”Deployment”は利用者に対して迅速にリリー スできるまでの仕組みを示す。 デリバリ/デプロイの一例 ・Blue/Greenデプロイメント ・Canary Release ・イミュータブルデプロイメント などなど

Slide 13

Slide 13 text

13 Cloud Nativeなアプリ開発フロー Build Developer Test Container Registry Deploy Staging Deploy Production Release Monitoring Helm Chart Repository Artifact Management Continuous Integration Version Control アプリ開発の流れ Continuous Delivery/Deployment

Slide 14

Slide 14 text

14 Cloud Nativeなアプリ開発フロー Build Developer Test Container Registry Deploy Staging Deploy Production Release Monitoring Helm Chart Repository Artifact Management Continuous Integration Version Control 本日のお話ポイント Continuous Delivery/Deployment

Slide 15

Slide 15 text

2. GitLabによるアプリ開発 夢見るクラウドネイティブな世界 15

Slide 16

Slide 16 text

16 GitLabのビジョン Continuous Integration Continuous Deployment Plan Create Verify Package Release Configure Monitor Complete DevOps “GitLab’s vision is to serve enterprise-scale, integrated software development teams that want to spend more time writing code and less time maintaining their tool chain.” GitLabによる Complete DevOpsの実現

Slide 17

Slide 17 text

17 GitLab CI/CD GitLab CI/CD

Slide 18

Slide 18 text

GitLab Instance 18 GitLab CI/CD GitLab CI/CDのアーキテクチャ Developer GitLab CI/CD GitLab Repository GitLab Project .gitlab-ci.yml Test Environment Staging Environment Production Environment gitlab-runner gitlab-runner gitlab-runner Kubernetes Executor KubernetesクラスターのKubernetes APIに接 続し、各GitLab CIジョブのPodを作成。 .gitlab-ci.ymlでserviceを定義することで、 Job実行コンテナとは別のコンテナも構成 できる。 その他のExecutors ・Shell Executor ・Docker Executor ・SSH Executor ・Virtualbox Executor などなど Kubernetes API Job実行のPod

Slide 19

Slide 19 text

GitLab Instance 19 GitLab CI/CD GitLab CI/CDのアーキテクチャ Developer GitLab CI/CD GitLab Repository GitLab Project .gitlab-ci.yml Production Environment gitlab-runner GitLab CI/CD Job実行用のPodは、Jobが完了次第(成功し ても失敗しても)動的に削除される。そのた め、Job実行のPodと実際にデプロイする サービスPodは異なる。 → デプロイ作業はJobとして実行しなけれ ばいけない。 ※Auto DevOps機能を利用しない場合 Job実行のPod は削除される サービスPod Test Environment gitlab-runner Job実行のPod≒テストPod CI CD

Slide 20

Slide 20 text

20 Container Registry GitLab Container Registry

Slide 21

Slide 21 text

21 GitLab Kubernetes Integration Developer Test Environment Staging Environment Production Environment Kubernetes Integration GitLabプロジェクトごとにKubernetesクラス タを作成。アプリケーションのレビューや デプロイ、パイプラインの実行などが簡単 に行える。 現在(2018/06)サポートされていIntegration ・GKE Cluster via GCP Account ・Register Existing Cluster デプロイ可能Applications(Pod) ・helm-tiller (Tillerによってデプロイ) ・gitlab-runner ・Ingress ・Prometheus ・JupyterHub などなど Kubernetes Integration gitlab-runner GitLab CI/CD GitLab Repository helm-tiller GitLab Instance GitLab Project Kubernetes Integration

Slide 22

Slide 22 text

22 GitLabによるKubernetesのデプロイ Kubernetes Integration

Slide 23

Slide 23 text

23 Cloud Nativeなアプリ開発フロー Developer Deploy Staging Deploy Production Release Monitoring Artifact Management Continuous Integration 本日のお話ポイント Continuous Delivery/Deployment GitLab Repository Helm Chart Repository Container Registry Build GitLab Kubernetes Integration Test GitLab CI/CD

Slide 24

Slide 24 text

24 Cloud Nativeなアプリ開発フロー Developer Deploy Staging Deploy Production Release Monitoring Artifact Management Continuous Integration 本日のお話ポイント Continuous Delivery/Deployment GitLab Repository Helm Chart Repository Container Registry Build Test GitLab CI/CD GitLab Kubernetes Integration あ。今日は牛の会でした…ne。

Slide 25

Slide 25 text

3. Rancherによるアプリ管理 夢見るクラウドネイティブな世界 25

Slide 26

Slide 26 text

26 Rancherのビジョン “Recognized as a leader in the industry, Rancher’s vision is to change the way organizations adopt Kubernetes and manage their containers in production.” RancherによるKubernetesマネジメントとコンテナマネージメント RancherによるKubernetes管理 コンテナマネージメント

Slide 27

Slide 27 text

27 Kubernetes Management RancherによるKubernetesマネジメント

Slide 28

Slide 28 text

28 Kubernetes Management RancherによるKubernetesマネジメント @Yano Tetusrou. あとは、託した。

Slide 29

Slide 29 text

29 コンテナマネージメント Rancher Catalog Private Cloud Public Cloud Hybrid Cloud Any Kubernetes Environment

Slide 30

Slide 30 text

30 Deploy Staging Deploy Production Release Monitoring Continuous Delivery/Deployment Rancher Catalog CIでできた成果物をカタログに反映し、CDではカ タログからデプロイしたいものを選択。 カタログは、配布準備が整ったアプリケーション メニューであり、実態はGitリポジトリ。そのため、 すでに用意されたカタログと、自分でカスタムでき るカタログがある。 Catalogの種類 ・Library ・Helm Stable ・Helm Incubator ・Custom Rancher Catalog Artifactをサービスメニュー化する Rancher Catalog Helm Chart Repository Container Registry

Slide 31

Slide 31 text

31 Helm Chartのおさらい Helmによるコンテナデプロイメント Tiller Helm Client Helm Chart Repository Container Registry Helm Chart Service Deployment Application Container Kubernetes gRPC REST/JSON Developer Helm Chart Commit Pull Container Image

Slide 32

Slide 32 text

32 Rancher Catalog Helm Stable Tiller Helm Client Helm Chart Repository Container Registry Helm Chart Service Deployment Application Container Kubernetes gRPC REST/JSON Developer Helm Chart Commit Pull Container Image Rancher Catalog

Slide 33

Slide 33 text

33 Rancher Catalog Helm Stable Rancher Chart Description app-readme.md ○ Rancher 2.0 UIで表示するためのReadmeファイル charts/ Chartの依存関係を含めるディレクトリ Chart.yaml Helm Chartの情報ファイル question.yml ○ Rancher 2.0 UIに関する質問を含むファイル templates/ values.ymlと組み合わせ、コンテナを生成するテンプレートYAMLの配置 requirements.yml チャートの依存関係をリストするファイル README.md Helm Readmeファイル。[詳細説明]に表示される。 values.yaml チャートのデフォルトの設定値 Helm Chart Repository charts/// (例: charts/wordpress/v0.1/)

Slide 34

Slide 34 text

34 Rancher Catalog Helm Stable app-readme.md question.yml チャートのUIヘッダーに説明的なテキストを提供するファイル。 (以下の画像は、Rancherチャートとネイティブヘルムチャートの違い) チャートの展開を簡素化するためのフォームの質問を含むファイル。 これがなければ、Key−Valueを使用して配置を構成する必要がある。

Slide 35

Slide 35 text

35 Cloud Nativeなアプリ開発フロー Build Developer Test Container Registry Deploy Staging Deploy Production Release Monitoring Helm Chart Repository Continuous Integration Version Control 本日のお話ポイント Continuous Delivery/Deployment Rancher Catalog Kubernetes Management

Slide 36

Slide 36 text

4. アプリ開発プラットフォーム 夢見るクラウドネイティブな世界を夢で終わらす 36

Slide 37

Slide 37 text

37 Cloud Nativeなアプリ開発フロー Build Developer Test Deploy Staging Deploy Production Release Monitoring Continuous Integration Version Control 本日のお話ポイント Continuous Delivery/Deployment Rancher Catalog Kubernetes Management GitLab Repository Helm Chart Repository Container Registry GitLab CI/CD GitLab Kubernetes Integration

Slide 38

Slide 38 text

38 Cloud Nativeなアプリ開発フロー Build Developer Test Deploy Staging Deploy Production Release Monitoring Continuous Integration Version Control 本日のお話ポイント Continuous Delivery/Deployment Rancher Catalog Kubernetes Management GitLab Repository Helm Chart Repository Container Registry GitLab CI/CD GitLab Kubernetes Integration なんて複雑…。

Slide 39

Slide 39 text

39 とりあえず流れを画面で解説 ” 複雑なアプリ開発プラットフォームをデモってみる ”

Slide 40

Slide 40 text

40 July Tech Fest 2018のお知らせ Cloud Nativeな俺のCI/CD環境 2018.7.29 (Sun.) 10:00-18:30 @産業技術大学院大 学

Slide 41

Slide 41 text

41 まとめ GitLab側からあとで登録ができれば、Kubernetesのデプロイや管理はRancherが便利。 ただし、GitLabのプロジェクトごとに、Kubernetes管理者が接続情報を教える必要がある。 アプリデプロイメントの管理を誰が行っていくのかのルールが必要。 便利だからといってCatalogに依存すると、Catalog運用に手間が増えることもある。 企業によって管理範囲が異なるものの、アプリ開発者はGitLabをインターフェイスとして。インフラ(プ ラットフォーム)管理者はRancherをインターフェイスとするのも一つ。 双方とも便利なツールではあるけれども、Kubernetesの仕組みを知らなくてもいいわけではない。 内部で動くツール(HELMなど)のアーキテクチャは知っていないと返って時間を浪費する。

Slide 42

Slide 42 text

Appendix 参考 42

Slide 43

Slide 43 text

43 いろいろハマる。その1 RKEのGitLab Integrationへの登録 Developer RKE GitLab CI/CD GitLab Repository GitLab Instance GitLab Project (1)Kubernetes Integration GKE Kubernetes Management (2)Kubernetes Management (2)Kubernetes Integration (1)Kubernetes Management

Slide 44

Slide 44 text

44 いろいろハマる。その1 RKEのGitLab Integrationへの登録 解決策:Proxyを置け。

Slide 45

Slide 45 text

45 いろいろハマる。その1 RKEのGitLab Integrationへの登録 Developer RKE GitLab CI/CD GitLab Repository GitLab Instance GitLab Project (1)Kubernetes Integration GKE Kubernetes Management (2)Kubernetes Management (2)Kubernetes Integration (1)Kubernetes Management Proxy

Slide 46

Slide 46 text

Thank you ご清聴ありがとうございました 46