GitLab x RancherによるKubernetes CI/CD

GitLab x RancherによるKubernetes CI/CD

以下のイベントにて使用した資料です。
Rancher Meetup Tokyo #13
https://rancherjp.connpass.com/event/85028/

269258447d4284b5cb2ce0f048d143b2?s=128

Shingo.Kitayama

June 21, 2018
Tweet

Transcript

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

  2. 2 Introduction Shingo Kitayama Company: Red Hat K.K. Role: Solution

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

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

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

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

  7. 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の利用は、アプリケーションの運用管理効率化が導入目的
  8. 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
  9. 9 Kubernetesがやってくれること マルチクラウド 複数のホストにわたるコンテナのオーケストレーション リソースの利用効率 エンタープライズ・アプリケーションの実行に必要なリソースを最大限活用できるようにハードウェアを効 率よく使用する サービスディスカバリ アプリケーションのデプロイとアップデートを制御し自動化する リソースのオートスケール

    コンテナ化されたアプリケーションとそのリソースをオンザフライでスケールする サービスの宣言的管理 デプロイ済みアプリケーションが常にデプロイ方法に従って実行される 自己回復 自動再起動、自動複製、自動スケーリングにより、アプリケーションのヘルスチェックと自己治療を行う Kubernetesの主な機能
  10. 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
  11. 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 などなど
  12. 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 ・イミュータブルデプロイメント などなど
  13. 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
  14. 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
  15. 2. GitLabによるアプリ開発 夢見るクラウドネイティブな世界 15

  16. 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の実現
  17. 17 GitLab CI/CD GitLab CI/CD

  18. 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
  19. 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
  20. 20 Container Registry GitLab Container Registry

  21. 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
  22. 22 GitLabによるKubernetesのデプロイ Kubernetes Integration

  23. 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
  24. 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。
  25. 3. Rancherによるアプリ管理 夢見るクラウドネイティブな世界 25

  26. 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管理 コンテナマネージメント
  27. 27 Kubernetes Management RancherによるKubernetesマネジメント

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

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

    Any Kubernetes Environment
  30. 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
  31. 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
  32. 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
  33. 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/<application name>/<app version>/ (例: charts/wordpress/v0.1/)
  34. 34 Rancher Catalog Helm Stable app-readme.md question.yml チャートのUIヘッダーに説明的なテキストを提供するファイル。 (以下の画像は、Rancherチャートとネイティブヘルムチャートの違い) チャートの展開を簡素化するためのフォームの質問を含むファイル。

    これがなければ、Key−Valueを使用して配置を構成する必要がある。
  35. 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
  36. 4. アプリ開発プラットフォーム 夢見るクラウドネイティブな世界を夢で終わらす 36

  37. 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
  38. 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 なんて複雑…。
  39. 39 とりあえず流れを画面で解説 ” 複雑なアプリ開発プラットフォームをデモってみる ”

  40. 40 July Tech Fest 2018のお知らせ Cloud Nativeな俺のCI/CD環境 2018.7.29 (Sun.) 10:00-18:30

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

  42. Appendix 参考 42

  43. 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
  44. 44 いろいろハマる。その1 RKEのGitLab Integrationへの登録 解決策:Proxyを置け。

  45. 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
  46. Thank you ご清聴ありがとうございました 46