Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitOpsその後 / after starting GitOps

5862ce660c5a25de9584b0c2e5497055?s=47 sasaki
June 07, 2019

GitOpsその後 / after starting GitOps

5862ce660c5a25de9584b0c2e5497055?s=128

sasaki

June 07, 2019
Tweet

Transcript

  1. STRICTLY CONFIDENTIAL 2019/6/7 Alpaca Japan Shinya Sasaki Cloud Native Kansai

    #3 GitOpsその後
  2. STRICTLY CONFIDENTIAL Who? ➢ 名前 ◦ 佐々木 真也 ➢ 所属

    ◦ AlpacaJapan 株式会社 ▪ Head of Infrastructure Engineering 2
  3. STRICTLY CONFIDENTIAL Alpaca Japan 3 3 3 金融 x 機械学習

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

  4. STRICTLY CONFIDENTIAL 4

  5. STRICTLY CONFIDENTIAL 日経6/5 5

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

  7. 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
  8. 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
  9. STRICTLY CONFIDENTIAL Argo CD 9

  10. 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
  11. STRICTLY CONFIDENTIAL 改善 (2) • GitHubアカウントでSSO • ローカルユーザはAdminしかない • 環境によるアクセス制限をGithub

    Teamで行う 11
  12. 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
  13. STRICTLY CONFIDENTIAL というわけでまずArgoCDへの再登録から・・・ 13

  14. STRICTLY CONFIDENTIAL ??? 14

  15. STRICTLY CONFIDENTIAL 15 $ kubectl get pod

  16. STRICTLY CONFIDENTIAL 16 $ kubectl get pod No resources found.

  17. STRICTLY CONFIDENTIAL 17 $ kubectl get pod No resources found.

  18. STRICTLY CONFIDENTIAL でもGitOpsなので GitHubリポジトリを再登録して同期するだ けで元通り!! • しかし実際には・・・ • いくつかGitHubに反映せず直接変更している箇所があった •

    Kubernetesだけでは戻せないところの把握ができてなかった • ELB再作成に伴うDNSレコードの更新 (type: LoadBalancer) 18
  19. STRICTLY CONFIDENTIAL 対応策 (1) • GitOpsの徹底 • 正の状態が全員に分かる形で管理されていることは重要 19 Sync

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

    20
  21. STRICTLY CONFIDENTIAL 対応策 (3) • (あたりまえですが・・・)同期後に必要な作業の明文化 • DNSレコードの変更箇所 とか 21

    一部 Service を LoadBalancer → NodePortに変更し、Kubernetes管理 外のELBに ELBはKubernetesで管理しない方がいいかも DNSレコードまでexternal-dnsで管理という手もあるが・・・ DNS設定変更はちょっと怖いし、そもそも変更はしない方がいい気が する
  22. 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
  23. 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
  24. STRICTLY CONFIDENTIAL まとめ • 削除には気をつけよう 24