【レポート】Mastering Kubernetes on AWS #reinvent #CON308

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

re:Invent2017のセッション「CON308 - Mastering Kubernetes on AWS」を聞いてきました。以下がセッションの概要です。

A lot of progress has been made on how to bootstrap a cluster since Kubernetes' first commit and is now only a matter of minutes to go from zero to a running cluster on Amazon Web Services. However, evolving a simple Kubernetes architecture to be ready for production in a large enterprise can quickly become overwhelming with options for configuration and customization.

In this session, Arun Gupta, Open Source Strategist for AWS and Raffaele Di Fazio, software engineer at leading European fashion platform Zalando, will show common practices for running Kubernetes on AWS and share insights from experience in operating tens of Kubernetes clusters in production on AWS. We will cover options and recommendations on how to install and manage clusters, configure high availability, perform rolling upgrades and handle disaster recovery, as well as continuous integration and deployment of applications, logging, and security.

本日朝のKeynoteで、AWSの提供するマネージドKubernetesであるElastic Container Service for Kubernetes(EKS)が発表されました。

その影響もあってか、セッション開始前はwaitinglistも含めて長蛇の列でした。期待通り、セッション内ではEKSに関する情報も少し出てきました。内容をレポートしたいと思います。

Kubernetesのセットアップはどうするのがベスト?

  • 開発環境にはMinikube
  • KOPSを使って自前で作る
  • EKS - Launched Today!
    • 高可用KubernetesのマスターノードとetcdをAWS側で管理して提供
    • 既存のECSと同様、ワーカーノードはユーザ側でEC2インスタンスを用意して起動する
    • EKSではupstreamのKubernetesを利用する。Forkしたものではない!
    • CLIではaws eks ~のような形となり、ECSとは独立したAPIが用意されている

Zalandoではどのようにしているのか

  • Zalandoの紹介
    • ドイツに本社があるアパレルEC
    • 2200万人の顧客、360万ユーロの売上、月間2億アクセス
  • もともとはオンプレでインフラを構築していたり、自前のプラットフォームを構築したりしていたが、低い集積率に苦しんでいた。そのあとAWS上にKubernetesを構築することで高い集積率と健全なインフラを構築することができた
  • KubernetesはCloudFormationを使ってデプロイしている
  • 複数のAWSアカウントにKubernetesクラスタをデプロイしている。管理を効率化するためにいくつか仕組みを自作した
    • Custom cluster registry : クラスタの設定情報を管理するためのRESTサーバ。
    • Cluster Lifecycle Manager: 上述のCustom cluster registryをポーリングして設定値に変更がないかをチェックする。変更があった場合、その変更値をパラメータにCloudFormationをUpdateする

KubernetesでのCI/CD

  • JenkinsやAWS CodePipeline/CodeBuild、CircleCIなど選択肢は多数
  • CIのビルドフェーズでDockerイメージをbuildし、Docker HubやECRにDockerイメージをPushする
  • AWSの機能をフル活用したKubernetesへのデプロイ方法として、CodeBuildの最終フェーズでKubernetes Python SDKを使ってKubernetesにデプロイするLambda Functionをtriggerする、という方法もある。

IAM / 機密情報の管理

可視性(Visibility)

  • Kubernetesのクラスタ、Pod、アプリケーション等を監視する必要があるが、監視対象はアプリケーションが吐くログ、メトリクスなど多岐にわたる。
  • ログはElasticsearch + Fluentd + Kibanaで可視化するのがベスト
  • クラスタOSの監視にはPrometheusheapsterなどを使う
  • アプリケーションの監視はJMXなどの言語ランタイムが吐く値や、x-rayなどのAPMを用いる
  • Zalandoでは、ログ監視にScalyr、監視には自前の監視OSSであるZMONとPrometheus/Heapsterを使っている
  • Grafanaでダッシュボードを作り、インフラチームと開発チームそれぞれが欲しがるメトリクスを用意し、常に状態を確認できるようにしている

最後に

Kubernetes構築・運用のベストプラクティスが聞けたのと同時に、現場で実際に運用している会社の話も聞けたのは非常に勉強になりました。

セッションの最後で、AWSが公開しているkubernetesの構築/運用のワークショップ資料のGithubが紹介されていました。

セッションで使われたスライドもGithubにあるので興味のある方は見てみてはいかがでしょうか。

それでは!引き続きre:Invent祭りをお楽しみください。