Slide 1

Slide 1 text

STRICTLY CONFIDENTIAL 2019/6/7 Alpaca Japan Shinya Sasaki Cloud Native Kansai #3 GitOpsその後

Slide 2

Slide 2 text

STRICTLY CONFIDENTIAL Who? ➢ 名前 ○ 佐々木 真也 ➢ 所属 ○ AlpacaJapan 株式会社 ■ Head of Infrastructure Engineering 2

Slide 3

Slide 3 text

STRICTLY CONFIDENTIAL Alpaca Japan 3 3 3 金融 x 機械学習 がテーマのスタートアップ 主な提供サービス/プロダクト ❖ 銀行・証券会社・信託銀行を中心に 金融機関向けのトレーディング AI技術で多くの実績を保持 「相場予測モデルの構築」 のプロジェクトで 協業 「AlpacaSearch for kabu.com」 
 相互に類似している銘柄のチャートパターン を表示
 「AI外貨予測」「AI外貨積立」 
 指定した外貨の為替の変動を予測し、予測 した日に一定金額を積立 可能
 主要マーケットの短期予測 をリアルタイムで表示 
 
 弊社の大規模データ処理 の技術やディープラーニン グ技術を活用したアプリ ケーション


Slide 4

Slide 4 text

STRICTLY CONFIDENTIAL 4

Slide 5

Slide 5 text

STRICTLY CONFIDENTIAL 日経6/5 5

Slide 6

Slide 6 text

STRICTLY CONFIDENTIAL Cloud Native Kansai #1 6 https://www.slideshare.net/shinyasasaki1024/gitopskubernetesmanifest

Slide 7

Slide 7 text

STRICTLY CONFIDENTIAL GitOpsおさらい 7 • CIツールがKubernetes APIにアクセスできるようにしないといけない • セキュリティリスクになる • クレデンシャルを管理しないといけない • 境界がない Kubernetes anti-patterns: Let's do GitOps, not CIOps! https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops CIOps

Slide 8

Slide 8 text

STRICTLY CONFIDENTIAL GitOpsおさらい 8 • k8sクラスタ内外で境界ができる • configとcodeのリポジトリを分けることで、お互いの変更に影響を受けない Kubernetes anti-patterns: Let's do GitOps, not CIOps! https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops GitOps

Slide 9

Slide 9 text

STRICTLY CONFIDENTIAL Argo CD 9

Slide 10

Slide 10 text

STRICTLY CONFIDENTIAL 改善 (1) • 構成 • port-forwardからLoadBalancerにして常時アクセスできるように 10 $ kubectl -n argocd port-forward service/argocd-server 8080:443 https://localhost:8080 https://argocd.mydomain.~ kind: Service spec: type: LoadBalancer

Slide 11

Slide 11 text

STRICTLY CONFIDENTIAL 改善 (2) • GitHubアカウントでSSO • ローカルユーザはAdminしかない • 環境によるアクセス制限をGithub Teamで行う 11

Slide 12

Slide 12 text

STRICTLY CONFIDENTIAL 改善 (3) • GitHubリポジトリの登録をHTTPS → SSHにする • 社内ポリシー的にHTTPSログインは2FAがMustなため • GUIからはできないがCLIならできるらしい 12 argocd repo add git@github.com:argoproj/argocd-example-apps.git --ssh-private-key-path ~/.ssh/id_rsa

Slide 13

Slide 13 text

STRICTLY CONFIDENTIAL というわけでまずArgoCDへの再登録から・・・ 13

Slide 14

Slide 14 text

STRICTLY CONFIDENTIAL ??? 14

Slide 15

Slide 15 text

STRICTLY CONFIDENTIAL 15 $ kubectl get pod

Slide 16

Slide 16 text

STRICTLY CONFIDENTIAL 16 $ kubectl get pod No resources found.

Slide 17

Slide 17 text

STRICTLY CONFIDENTIAL 17 $ kubectl get pod No resources found.

Slide 18

Slide 18 text

STRICTLY CONFIDENTIAL でもGitOpsなので GitHubリポジトリを再登録して同期するだ けで元通り!! • しかし実際には・・・ • いくつかGitHubに反映せず直接変更している箇所があった • Kubernetesだけでは戻せないところの把握ができてなかった • ELB再作成に伴うDNSレコードの更新 (type: LoadBalancer) 18

Slide 19

Slide 19 text

STRICTLY CONFIDENTIAL 対応策 (1) • GitOpsの徹底 • 正の状態が全員に分かる形で管理されていることは重要 19 Sync

Slide 20

Slide 20 text

STRICTLY CONFIDENTIAL 対応策 (2) • GithubによるSSO • GithubのTeamにより権限を変更 • RBAC設定により全員Delete権限は排除 20

Slide 21

Slide 21 text

STRICTLY CONFIDENTIAL 対応策 (3) • (あたりまえですが・・・)同期後に必要な作業の明文化 • DNSレコードの変更箇所 とか 21 一部 Service を LoadBalancer → NodePortに変更し、Kubernetes管理 外のELBに ELBはKubernetesで管理しない方がいいかも DNSレコードまでexternal-dnsで管理という手もあるが・・・ DNS設定変更はちょっと怖いし、そもそも変更はしない方がいい気が する

Slide 22

Slide 22 text

STRICTLY CONFIDENTIAL その他の改善点 • Hooksの利用 • こういうJobをつくるだけ • Sync開始前にDB MigrationのJobを実行 • Sync開始前後にSlack通知 • Sync完了後にテストJobを実行(予定) 22 apiVersion: batch/v1 kind: Job metadata: annotations: argocd.argoproj.io/hook: PreSync

Slide 23

Slide 23 text

STRICTLY CONFIDENTIAL 現在のデプロイフロー 23 STG PROD Developer ① PR & Merge App Repo ② Build & Push Infra Repo ③ PR ④ Merge ⑤ Sync ⑥ Deploy Developer ① PR & Merge App Repo ② Build & Push Infra Repo ③ PR ⑤ Sync ⑥ Deploy Infra ④ M erge

Slide 24

Slide 24 text

STRICTLY CONFIDENTIAL まとめ • 削除には気をつけよう 24