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

オイラ大地のマイクロサービス開発

 オイラ大地のマイクロサービス開発

オイラ大地では、Kubernetesを利用したシステムのマイクロサービス化を行っています。 そのマイクロサービス化において、どのように開発やリリースを行っているかについてお話しします。

ohdate-yuuta

August 05, 2019
Tweet

More Decks by ohdate-yuuta

Other Decks in Technology

Transcript

  1. アジェンダ
 1. 自己紹介
 2. 覚えて帰ってほしいこと
 3. オイシックス・ラ・大地とは
 4. オイシックスについて
 5.

    マイクロサービス化の背景
 6. マイクロサービス開発の課題
 7. GitOpsによるマイクロサービス開発
 2
  2. 1. 自己紹介
 
 • 名前
 ◦ 大舘 雄太(おおだて ゆうた)  @utautau
 • 所属


    ◦ オイシックス・ラ・大地
 システム本部 システム基盤部 基盤刷新セクション
 • 経歴
 ◦ 入社:2018年4月
 ◦ 日々さわるもの:Java, Spring Boot, Kubernetes
 3
  3. 7-2. GitOpsによるマイクロサービス開発
 
 14 ローカル開発環境
 GitHub
 CircleCI
 Docker
 Image
 manifest

    repo
 Pull
 Push
 PR
 CD
 5
 6
 7
 8
 Kubernetes
 Java repo
 PR
 CI
 Pull
 Push
 3
 4
 1
 2
 Docker Hub
 GitOpsにもとづくCI/CD

  4. 7-3. GitOpsによるマイクロサービス開発
 
 
 15 CI (Continuous Integration)
 1. Java

    Repositoryを作成 or Pull
 2. プロダクトコード/テストコードを記述
 3. Java RepositoryにPush
 a. 自動でCircle CIがテストコードを実行
 b. 自動でDocker HubにImageをPush
 

  5. 7-4. GitOpsによるマイクロサービス開発
 
 
 16 > 自動でCircle CIでテストコードを実行
 ERROR
 外部リソース(DBなど)が必要!


     じゃあ、、
 1. マネージドサービスをテスト用に立てる→自由に使えない。。
 2. インメモリDB(H2など)を使う→微妙に仕様が違ったり。。
 3. Dockerで立てる→「docker pull 」「docker run」・・・

  6. 7-6. GitOpsによるマイクロサービス開発
 
 18 ローカル開発環境
 GitHub
 CircleCI
 Docker
 Image
 manifest

    repo
 Pull
 Push
 PR
 CD
 5
 6
 7
 8
 Kubernetes
 Java repo
 PR
 CI
 Pull
 Push
 3
 4
 1
 2
 Docker Hub
 GitOpsにもとづくCI/CD

  7. 7-7. GitOpsによるマイクロサービス開発
 CD (Continuous Delivery)
 1. manifest Repositoryを作成 or Pull


    2. マニフェストを記述
 3. manifest RepositoryにPush
 a. 自動でCircleCI経由で、Kubernetesにデプロイ
 ※ブランチ名によって、デプロイ先を選択
 19
  8. configMapGenerator 
 7-10.GitOpsによるマイクロサービス開発
 22 namespace: ns1 bases: - ../base patches:

    - deployment.yaml - service.yaml configMapGenerator: - name: sample-service-config literals: - SPRING_PROFILES_ACTIVE=production env: - name: SPRING_PROFILES_ACTIVE valueFrom: configMapKeyRef: name: sample-service-config key: SPRING_PROFILES_ACTIVE production-ns1/kustomization.yaml
 base/deployment.yaml

  9. 7-11.GitOpsによるマイクロサービス開発
 23 apiVersion: v1 kind: ConfigMap metadata: name: sample-service-config-tb9f7t5gh8 namespace:

    ns1 data: SPRING_PROFILES_ACTIVE: "production" --- apiVersion: v1 kind: Deployment # 省略 env: - name: SPRING_PROFILES_ACTIVE valueFrom: configMapKeyRef: name: sample-service-config-tb9f7t5gh8 key: SPRING_PROFILES_ACTIVE kustomizeによって作成されたファイル
 applyするとpodに再起動がかかる!
 ハッシュ値つきの
 configMapのnameが作成される