kakakakakku blog

Weekly Tech Blog: Keep on Learning!

「Japan Container Days v18.04」に参加して1日中コンテナのことを考えていた

今日は「Japan Container Days v18.04」に参加してきた.正直「Container Days」と言うよりも「Kubernetes Days」って感じだったけど,1日ずっとコンテナのことばかりを考えていた.発表テーマも多岐にわたっていて,バランスが非常に良かったと思う.僕が参加したセッションをまとめておく.

containerdays.jp

サイバーエージェントにおけるプライベートコンテナ基盤 AKE を支える技術

  • ake client を使ってクラスタを起動できる
    • ake client の裏は OpenStack Heat を使っている
  • Kubernetes にパッチを当てているため,ビルドから始める
  • Kubernetes と Swarm をサポートしている
  • Datadog / Elastic Stack なども連携できる
  • 既存のエコシステムは採用しなかった
    • OpenStack Magnum
    • Rancher
    • Tectonic

3年前まで所属してたアドテクスタジオからの発表だった.「おうち Kubernetes」の事例などは知っていたけど,AKE の詳細解説は今まで聞いたことがなかった.実装は大変そうだけど,既にプロダクションでも稼働してるとのことで,すごいなぁー!

developers.cyberagent.co.jp

speakerdeck.com

マイクロサービスアプリケーションとしての機械学習

  • メルカリの画像認識機能
    • 出品時に写真を撮ると,名前,カテゴリー,色などを自動推定する
  • 機械学習エンジニア側で Dockerfile を用意すれば,残りは SRE で構築してもらうことができた
    • Web Server / Queue / Worker / 機械学習モデルなど
  • 継続的デリバリーは Spinnaker を使っている
    • GUI で直感的に使える
  • 機械学習モデルのリリースは,最初は「意図的に手動で」運用していた
    • 多様である機会学習モデルの運用がどういうものなのかを把握するため
    • 汎用性の不足もある
  • Persistent Volumes でデータを共通化すれば,機械学習モデルの Blue/Green Deployment が実現できる

話を聞いて感じたのは「やはりメルカリ強いなぁー」ということだった.アカデミック出身の機械学習エンジニアがいたり,フルスタックなアーキテクチャ(資料参照)を1週間で作ってしまう SRE がいたり.また「意図的に手動で」運用をして,様子を見るというフローも良かった.実際に「画像認識機能」は使ったことがあるので,この機能の裏側はこんな感じだったのかーと知れて良かった.

speakerdeck.com

Yahoo! JAPAN の Kubernetes-as-a-Service で加速するアプリケーション開発

  • Yahoo! ズバトク on Kubernetes
  • 今までの課題
    • 簡単にスケールアウトできなかった
    • リリースの自動化ができていなかった
  • そこで Kubernetes を導入した
    • Concourse CI を使ってデプロイをしている
    • デプロイ時間も早くなった
    • OpenStack のノードがダウンしても,セルフヒーリングでポッドを再配置できる
  • アプリケーションも合わせて変えないと Kubernetes の恩恵を受けられないので,マイクロサービスに書き換えた
  • Z Lab では Yahoo! Japan の Kubernetes-as-a-Service を開発している
  • Kubernetes-as-a-Service on Kubernetes

Z Lab って聞いたことないなと思ったら,Yahoo! で使う基盤を作る 100% 子会社だった.Kubernetes-as-a-Service on Kubernetes というパワーワードも出ていたけど,他社と似ていて,OpenStack に Kubernetes クラスタを立てて共通基盤として提供するような感じだった.さらに Kubernetes を「分散システム基盤」という側面で考えているのは勉強になった.

www.slideshare.net

Kubernetes のセキュリティベストプラクティス

  • フロントエンドのポッドから /var/run/secrets/kubernetes.io/serviceaccount/token などの秘匿情報が漏れてしまう場合
    • リクエストヘッダーに Bearer Authentication を指定して接続されてしまう可能性がある
  • RBAC (Role-Based Access Control) を使う
  • API Server Firewall
    • gcloud container cluster--master-authorized-networks オプションを使う
  • Kubernetes Network Policies
    • もしパスワードが取れたとしても,Web ポッドから,Redis ポッドに直接繋がらないようにできる
    • 必要なポッド間だけを通す
  • securityContext に設定する項目
    • runAsUser
      • root ユーザー以外でプロセスを実行する
    • readOnlyRootFilesystem
      • ルートファイルシステムを読み取り専用にする
    • allowPrivilegeEscalation
      • 特権を取らせないようにする
  • Seccomp で不要な syscall を呼べないようにする
  • Istio など,サービスメッシュを使って,ポッド間のアクセスを制御することもできる

Kubernetes を運用するときに必要になるセキュリティ関連のパラメータを聞くことができた.まだ Kubernetes クラスタは運用していないけど,Network Policies など,注意するべきパラメータを知ることができたので,いざ運用するときに活かせそう.最後にサービスメッシュの話も少し出ていた.

speakerdeck.com

Horizontal Pod Autoscalers

  • 規模感
    • マイクロサービス 124+
    • kubernetes ノード 80+
    • コンテナ 3000+
  • Horizontal Pod Autoscaler (HPA)
  • 要件
    • 突然のスパイクに勝てる
    • 秒単位でスケールできること
    • 新規サービスも反映できる共通化された設定
      • Distributed Monolith にならないように
  • モニタリング
    • k8s-prometheus-adapter
    • Prometheus でメトリクスを取得する
    • nginx_exporter をサイドカーパターンで稼働させれば,メトリクスは簡単に取れる

Kubernetes でポッドをオートスケールしながら,メトリクスを取得する話だった.Wantedly のマイクロサービスはどんどん増えている気がする.既に120個超え!実際に負荷をかけたときのメトリクスを紹介するスライドに hey というコマンドが使われていた.Go で書かれた負荷ツールだと Vegeta を普段使っていて,hey は知らなかった.

github.com

speakerdeck.com

Container Networking Deep Dive

発表の最後に「Kubernetes を運用するなら,ネットワークも理解しましょう!」と言われていて「うっ確かに」という感じだった.ネットワークレイヤーの話で難しかったけど,ポッド同士がどのように疎通しているのか,図解がわかりやすくて良かった.

www.slideshare.net

Spinnaker を利用した Kubernetes への継続的デリバリ

  • Kubernetes は CI / CD の実現が課題になる
  • Spinnaker
    • Spinnaker
    • Netflix 社が開発している OSS
    • マルチクラウドに対応している
    • Kubernetes にデプロイができる
    • GUI で簡単にパイプランを作ることができる
  • デプロイ方法
    • Red/Black Deploy ( = Blue/Green )
      • Netflix では Red/Black と呼んでいて,意味は一緒
    • Rolling Red/Black Deploy
    • Canary Deploy
  • CI は Jenkins or Travis CI と連携できる
    • 逆にそれ以外は連携できない
  • Chaos Monkey Integration

メルカリの事例などで,最近よく聞くようになった Spinnaker の話だった.初心者セッションだったので,基礎的なところから聞くことができて,良かった.GUI 中心で Kubernetes の継続的デリバリーができるのは非常に便利だけど,それだと「Spinnaker おじさん」が出そうだから,どこまで Infrastructure as Code ができるのか,気になるところ.Netflix のデプロイ事例は以下の記事に載っている.

medium.com

speakerdeck.com

Kubernetes のない世界 すべてがサーバーレスになる

今日1番面白かったセッションだった.雰囲気としては「@yoshidashingo と @toricls のトークショー✨」という感じだったけど,コンテナ,Kubernetes,サーバレス,オンプレなど,注目のキーワードを軸に様々な視点から議論を繰り広げていた.まさに「ご意見番」って感じ.特に「Less Ops, More Code」というスローガンは良かった.Fargate など,コンテナを用意すればあとは良しなにやってくれる系のサービスが普及するのは素晴らしいと思っているし,もし EKS Fargate が出れば,Kubernetes をほとんど意識せずに使えるような未来が来そう.

www.slideshare.net

まとめ

  • Japan Container Days v18.04 に参加してきた
  • 各社 Kubernetes 最高!という感じだけど,セキュリティ,モニタリング,ログ,デプロイなど,運用面で工夫されていた
  • 「Less Ops, More Code」を目指して Kubernetes を意識しないような未来の話を聞けたのも良かった
  • 最後少し CNCF の話を聞けたのも良かった
  • あまりにも Kubernetes に偏ってたので,ECS や Fargate の話があればさらに良かったかなとは思う

関連記事

これから Kubernetes を学ぶなら,ワークショップ資料「aws-workshop-for-kubernetes」がオススメ!

kakakakakku.hatenablog.com