RancherとGitOps的な話
Rancher Meetup #03 in Kyoto
やっさん
@yassan168
#rancherjp
今日のお持ち帰りポイント
• Rancherでのデプロイ手段はWebUIでポチポチだけ?
• GitOps的な事するには?
GitOpsのおさらい
#rancherjp
• Weaveworks社が提唱するk8sの継続的デリバリ手法の一つ
• Gitでバージョン管理されたManifestを
Single Source Of Truth(信頼できる情報源)とする
GitOpsとは
cf. Kubernetes anti-patterns: Let’s do GitOps, not CIOps!
#rancherjp
GitOpsとは
Kubernetesで作るコンテナベース CI★CDの夕べ / ochacafe#1 - Speaker Deck
とても分かりやすい
のでオススメです!
#rancherjp
CI/CDツール
• Jenkins、CircleCI、Wercker、Concourse
manifestのテンプレートエンジン・manifest管理ツール
• Helm、Ksonnet、Kustomize
CD特化(差分検出と反映)
• ArgoCD、Weave Flux、Spinnaker
GitOps関連Tool
個人的には
Argo CD推し
Continuous Delivery | Argo
え?
でも、Rancherでアプリのデプロイって言えば?
#rancherjp
RancherでのAppのデプロイと言えば
これ
#rancherjp
RancherでのAppのデプロイと言えば
これ
カタログ。
#rancherjp
自システムのCatalogの作成方法は
ここにすべて書いてます(ぁ
https://amzn.to/2krjNg9
#rancherjp
RancherのCatalogとは
• RancherのCatalogは、Helmがベース
• Rancher Chart=Helm Chart+(app-readme.md + questions.yml)
• Helmは、Tillerによって、Chart(マニフェストのテンプレ)とvalues.yamlを悪魔合
体しマニフェストを召喚。召喚したマニフェストを用いて、k8s APIか
らリソースをクラスタにデプロイ。
values
.yamlChart
ポチポチだるくない?
#rancherjp
kubectl使えます。
いちおう
#rancherjp
さらに。
Rancher CLIからCatalog上のアプリをデプロイ出来ます。
• カタログ一覧の取得
• rancher app list-templates
• カタログのVer.一覧取得
• rancher app show-template [テンプレート名]
• 現状のアプリのバージョンやリビジョンの取得
• rancher apps show-app [OPTIONS] [APP名]
#rancherjp
さらに。
• デプロイ
• rancher app install --answers /example/answers.yaml 
--version 1.0.1 
--namespace bar 
[テンプレート名] [アプリ名]
• アップグレード
• rancher apps upgrade [OPT] [アプリ名]
• ロールバック
• rancher apps rollback [OPT] [アプリ名]
#rancherjp
なので、、、
事前にRancherのCatalogを作成後、
GitHubのWebhookを使って、
PRでmasterにMerge後に、Jenkins Pipelineにて、
 1. Dockerイメージをbuild&Registryにpush
 2. Rancher CLIでアプリのデプロイ
なんてことも出来なくもない。
なんちゃってGitOpsは出来そう。
#rancherjp
でもね。
課題はあります。
• CIにクレデンシャルが集中する問題
• 定期的にスケジュールでデプロイしたい
• Blue/Green、Canaryにデプロイしたい
など、やっぱりなんちゃってでしか無い。
なので、Rancher使ってGitOps特化なToolをデプロイしてGitOpsする。
#rancherjp
Argoって?
ArgoCDは、ArgoprojというToolのシーリズの1つ。
他にもいろんなプロダクトがあります。
• Argo Workflow
• Argoprojの最初。
• Kubernetesネイティブのワークフローエンジン
• v2.3.0で Support HDFS Artifact なので、digdagの代わりにしたい
• Argo CD
• GitOpsのためのKubernetesネイティブCDツール
• コミットに合わせてデプロイやロールバックができる
• UIでInit ContainerやSide Carの状態も確認できる
• Argo Events
• Kubernetesのためのイベントベースの依存管理ツール
• 定期実行以外にもSlackにこのMsgが来たらワークフローを実行とかも。
• Argo Rollouts
• Blue/GreenやCanaryにPodをデプロイできるOperator
#rancherjp
Rancher × Argoproj の動機
1. ArgoCDは良い感じのUIがある
a. WeaveworksのFluxはUIが無い
→さっと見たいときにめんどい
2. Helm以外のデプロイ手段に対応出来る
a. Kustomize、Ksonnetなど。
→ KubeFlowのデプロイ手段にしたい
3. Argo Event や Rolloutsへの期待
→試せてないけど良さそう
4. Agro WorkflowがDigdagの代わりに出来そう
a. DigdagのProj間の依存とか、HDFSとか、トリガとかあたりが解決しそう
cf. Operate and Manage Kubernetes easily with Weaveworks
ArgoCDのアプリ設定
UIはCloudの領分っぽい→
#rancherjp
RancherからArgoCDをデプロイしてみる
Rancher CLI からkubectlを使ってデプロイしてみた
# Rancherから作成したGKEクラスタにプロジェクト作成
$ rancher projects create --cluster "[クラスタ名]" --description "For ArgoCD" argocd
# ネームスペース作成
$ rancher namespaces create argocd
# ArgoCDデプロイ
$ rancher kubectl apply -n argocd -f 
https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.1/manifests/ha/install.yaml
# 外からつながるようにLoadbalancerの作成
$ rancher kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
# ArgoCDのユーザ Admin のPWチェック
$ rancher kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
#ブラウザで EXTERNAL-IP へアクセスし、ID:admin PW:↑でチェックしたPW でログイン
#rancherjp
こんな感じ
#rancherjp
まとめ
• Rancher CLI使えばGitOps風味な事は出来そう
• RancherのCatalog以外からのデプロイ手段の紹介
• ArgoCD良さげなので、Eventsとかと組み合わせてGitOps環境を整え
てみる
補足
#rancherjp
補足
Helm関連
• kubernetes sig apps - YouTube
• Helm | The Chart Best Practices Guide
• helm/charts: Curated applications for Kubernetes
Argo関連
• ArgoPrjのオンラインMeetup? YouTube (デモとか見るにはとても便利)
• Argo公式のHelm(試したけど動かんかった)
argo-helm/charts/argo-cd at master · argoproj/argo-helm
• Workflows & Pipelines | Argo
• argoproj/argo: Argo Workflows: Get stuff done with Kubernetes.
• Argo CD - Declarative GitOps CD for Kubernetes
• Argo Events - The Event-Based Dependency Manager for Kubernetes
• Argo Rollouts - Advanced Kubernetes Deployment Controller
• Kubernetes Meetup Tokyo 21 で 『Argo CD 実践ガイド』というタイトルで LT をしました #k8sjp |
DevelopersIO
• 20190725 Argo Project Latest News
• Reactive Workflow Argo Eventsの紹介
• GKEでArgoCDを使ってGitOpsしてみた - Qiita

RancherとGitOps的な話