$30 off During Our Annual Pro Sale. View Details »

GitOpsその後 / after starting GitOps

sasaki
June 07, 2019

GitOpsその後 / after starting GitOps

sasaki

June 07, 2019
Tweet

More Decks by sasaki

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. STRICTLY CONFIDENTIAL
    Alpaca Japan
    3
    3 3
    金融 x 機械学習 がテーマのスタートアップ
    主な提供サービス/プロダクト
    ❖ 銀行・証券会社・信託銀行を中心に 金融機関向けのトレーディング
    AI技術で多くの実績を保持
    「相場予測モデルの構築」
    のプロジェクトで
    協業
    「AlpacaSearch for kabu.com」

    相互に類似している銘柄のチャートパターン
    を表示

    「AI外貨予測」「AI外貨積立」

    指定した外貨の為替の変動を予測し、予測
    した日に一定金額を積立
    可能

    主要マーケットの短期予測
    をリアルタイムで表示


    弊社の大規模データ処理
    の技術やディープラーニン
    グ技術を活用したアプリ
    ケーション


    View Slide

  4. STRICTLY CONFIDENTIAL 4

    View Slide

  5. STRICTLY CONFIDENTIAL
    日経6/5
    5

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  9. STRICTLY CONFIDENTIAL
    Argo CD
    9

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. STRICTLY CONFIDENTIAL
    ???
    14

    View Slide

  15. STRICTLY CONFIDENTIAL 15
    $ kubectl get pod

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide