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

MackerelにおけるKubernetes利用の取組みとこれから / Kubernetes Meetup Tokyo #22

MackerelにおけるKubernetes利用の取組みとこれから / Kubernetes Meetup Tokyo #22

Hayato Imai

August 28, 2019
Tweet

More Decks by Hayato Imai

Other Decks in Technology

Transcript

  1. Mackerelにおける

    Kubernetes利用の取組みとこれから

    Kubernetes Meetup Tokyo #22


    View full-size slide

  2. ● 今井隼人(id:hayajo_77/@hayajo)
    ● 株式会社はてな(2017/11〜)
    ● Mackerelチーム
    ● SRE
    自己紹介

    https://developer.hatenastaff.com/entry/2019/06/10/120000

    View full-size slide

  3. Mackerel?


    View full-size slide

  4. 今日のお話


    View full-size slide

  5. ● MackerelにおけるKubernetes導入の取り組み
    ○ Kubernetes導入の目的
    ○ Kubernetesクラスタ構築の道のり
    ○ Kubernetesの運用と課題
    ○ 今後の取り組み
    今日のお話


    View full-size slide

  6. Mackerelにおける

    Kubernetes導入の目的


    View full-size slide

  7. コンテナ運用のキャッチアップ

    ● MackerelはVM(EC2)ベースでシステム構築されている
    ● コンテナの監視手段は提供しているがコンテナによるシステム運用におけ
    る監視ついてのプラクティスを提供できていない
    ● これを提供できるよう積極的にキャッチアップしてしていきたい

    View full-size slide

  8. ドッグフーディング

    ● Mackerelそのものをコンテナで運用してそれを監視する
    ● Mackerelコンテナエージェントの動作確認
    ○ ECS(EC2/Fargate)、Kubernetesに対応

    View full-size slide

  9. インフラ管理コストの削減

    ● 複雑なサーバープロビジョニング・管理からの脱却
    ○ 社内サーバ管理システムとの連携、複数のリポジトリを参照
    ○ サービスを横断した共通の仕組みのため複雑
    ○ アプリケーションのデプロイまで含めると手順が多く煩雑
    ● コンテナイメージによるアプリケーションの構成管理でこれを解決したい

    View full-size slide

  10. Kubernetesを選定した理由


    View full-size slide

  11. デファクトスタンダード

    ● コンテナオーケストレーションのデファクトスタンダード
    ● サービスとしてKubernetesクラスタ監視のキャッチアップが必要
    ● 社内でのKubernetesの運用事例はなかった。ECSの運用事例がほとん
    ど。

    View full-size slide

  12. 運用の効率化


    ● セルフヒーリング
    ● 効率的なリソース利用
    ● オートスケーリング
    ● Services, Secrets, ConfigMap, Jobs, PV, etc.

    View full-size slide

  13. 自前クラスタ or マネージドサービス


    View full-size slide

  14. EC2上に自前Kubernetesクラスタを構築

    ● コンテナによるシステム運用への移行を検討した当初はEKSが日本のリー
    ジョンに提供されていなかった
    ● Mackerelでは多くのAWSリソースを利用するため、AWS以外ではネット
    ワークのオーバヘッドが大きく運用は難しいと判断

    View full-size slide

  15. Kubernetesクラスタの設計


    View full-size slide

  16. Mackerelのシステム構成


    View full-size slide

  17. Kubernetesの導入範囲


    View full-size slide

  18. Crawlerのアーキテクチャ /w Kubernetes


    View full-size slide

  19. Kubernetesクラスタ構成


    View full-size slide

  20. Kubernetesクラスタの導入


    View full-size slide

  21. 詳しくはこちら

    https://developer.hatenastaff.com/entry/leading-kubernetes-at-hatena 


    View full-size slide

  22. 1. CONTAINERIZATION

    ● アプリケーションのDockerイメー
    ジを準備
    ○ マルチステージビルド
    ○ Buildkitの `--mount=type=cache`
    # syntax=docker/dockerfile:experimental
    # Stage: prepare go test and build
    FROM golang:1.12 AS prepare
    RUN go get github.com/golang/dep/cmd/dep && \
    go get golang.org/x/lint/golint
    RUN mkdir -p /app
    ADD Gopkg.toml Gopkg.lock /app
    WORKDIR /app
    RUN --mount=type=cache,target=/go/pkg/dep \
    dep ensure --vendor-only
    ADD . /app
    # Stage: build go application
    FROM prepare AS build
    RUN go build -ldflags=$(BUILD_LDFLAGS) -o ./app
    # Stage: build container image
    FROM debian:stretch-slim
    RUN apt-get update -yq && \
    apt-get install -yq ca-certificates && \
    rm -rfv /var/lib/apt
    RUN mkdir -p /app
    COPY --from=build /app/app /

    View full-size slide

  23. 2. CI/CD

    ● 稼働中のサービスのためのCI/CDパイプライン(Jenkins + Capistrano)に
    影響を与えずに並行してコンテナ運用を行う必要があった
    ● Skaffold + kustomize でこれを実現
    ● 詳しくはブログを参照

    View full-size slide

  24. 3. ORCHESTRATION

    ● マネージドサービスを利用できない理由は前述のとおり
    ● クラスタ構築に kubespray +Terraform を採用
    ○ Ansibleを利用するため構築ステップが追跡しやすい
    ○ インスタンスはTerraformで作成し、テンプレートでAnsibleのインベント
    リを生成

    View full-size slide

  25. 本番の一部で利用開始!


    View full-size slide

  26. しかしKubernetesクラスタの運用には課題
    が...


    View full-size slide

  27. 高い学習コスト

    ● そもそもKubernetesは複雑
    ○ 多くのオブジェクトやクラスタを構成するコンポーネント
    ● チーム全体で運用に取り組むための学習プランを用意できなかった
    ○ ハンズオン、書籍、ドキュメント、口伝、etc
    ○ 個人の学習意欲に依存していた
    ● そのためクラスタ構築に関わったメンバー以外はほぼさわれない状況が続
    いていた

    View full-size slide

  28. 膨大なエコシステム

    https://github.com/cncf/landscape#current-version 


    View full-size slide

  29. クラスタアップデートへの対応

    ● Kubernetesのマイナーリリースはおよそ3ヶ月ごとに実施され、3リリースブ
    ランチをサポート
    ○ 機能追加や変更が多く、アップデートを先送りにするほど検証に時間
    がかかる
    ○ リリースに追従しつづけるには体制づくりが大事
    ● アップデートに失敗すると復旧が難しい
    ○ クラスタのBlue/Green的な運用をしたくなる

    View full-size slide

  30. チームとしても徐々に運用が困難に...


    View full-size slide

  31. 運用リソース不足

    ● クラスタの運用開始時期とチームメンバーの退職・異動が重なり、運用リ
    ソースが圧倒的に不足
    ● また優先度の高い機能のリリースに注力する時期だったため、クラスタが
    放置気味になっていた

    View full-size slide

  32. クラスタアップデートに失敗

    ● kubesprayがkubeadm対応の過渡期だったため、Masterのアップデートう
    まくいかずクラスタのアップデートが困難になっていた
    ○ このため脆弱性への対応が遅れていた
    ● ツールの特性から特定のMaster/Nodeのインスタンスを作り直すことが難
    しくメンテナンスが手間だった
    ● クラスタの再構築も検討したが運用リソースが足らず中止

    View full-size slide

  33. Kubernetesクラスタの撤退を決断


    View full-size slide

  34. 撤退手順

    ● 本番環境
    ○ 既存システムと並行運用だったためロードバランサからNodePortを外
    すだけで撤退完了
    ● ステージング環境
    ○ すべてのサブシステムをKubernetesクラスタへ移行済だった
    ○ そのため従来のVMによる実行環境を再構築してから撤退

    View full-size slide

  35. ふりだし(VM運用)にもどる


    View full-size slide

  36. しかしMackerelにとってコンテナによるシステ
    ム運用の知見を得ることは必須


    View full-size slide

  37. これからの取り組み


    View full-size slide

  38. コンテナによるシステム運用の実現を優先する

    ● まずはコンテナによるシステム運用を実現することを優先させる
    ● 社内で構築・運用実績のあるECSへ移行する
    ○ 比較的短期間で移行できる(はず)
    ○ すでに一部システムはECS(Fargate)化して本番運用中

    View full-size slide

  39. 最終的にEKSへ移行

    ● サービスにとってKubernetesクラスタの運用知見を得ることも必須
    ● ECSを腰掛けとして、最終的にEKSへソフトランディングさせる
    ○ マネージドサービスを利用することでKubernetesクラスタの運用負荷
    を軽減する
    ○ EKSへの移行で失敗してもコンテナによるシステム運用は担保

    View full-size slide

  40. サービス系以外のコンテナをKubernetesで運用

    ● 運用系ツールなどのサービスに直接関わらないコンテナを載せる
    Kubernetesクラスタを構築・運用
    ● EKSへ移行するまでのKubernetesクラスタ運用知見の劣化を防ぐ

    View full-size slide

  41. まとめ


    View full-size slide

  42. まとめ

    ● 構築できる ≠ 運用できる

    ● クラスタ運用を見据えた体制を整えることが大事

    ○ 学習プランの整備、ドキュメントの充実

    ○ 軌道に乗るまでは専任エンジニアが2人以上ほしい(肌感覚)

    ● スモールスタート、並行運用、撤退可能な設計を心がける

    ○ とくに既存システムからの移行において


    View full-size slide

  43. 個人的なコンテナ運用所感

    fargate運用物語 / Fargate-Story | https://speakerdeck.com/soudai/fargate-story?slide=85 


    View full-size slide

  44. 【宣伝】コンテナを学ぶのにオススメの記事

    https://employment.en-japan.com/engineerhub/entry/2019/02/05/103000 


    View full-size slide

  45. curl -sIL mackerel.io | grep career


    View full-size slide