Above & Beyond

日々のアウトプット記録

Cloud Native Meetup Tokyo #7 @Abema Towers

03/29(金) は「Cloud Native Meetup Tokyo #7 @Abema Towers」に参加してきました。

cloudnative.connpass.com

f:id:kabukawa:20190324224022p:plain:w500

会場は サイバーエージェント さんの新しいビル、Abema Towersにあるセミナールーム。

f:id:kabukawa:20190331113629j:plain

まだできたてホヤホヤのビルで、夜景もきれいに見えました。ビルの完成記念興行的ななにかが行われていました(笑)

f:id:kabukawa:20190331113642j:plain:w300 f:id:kabukawa:20190331113655j:plain:w300


目次


Cloud Native Meetup Tokyo とは

イベントの概要から引用します。

Cloud Native に近しい技術や CNCF がホストするプロジェクトについて共有し合う会です! 昨今はコンテナ関係のエコシステムが大量に増えてきましたが、それらの技術検証結果などを発表しあう場として利用していきたいと思っており、仲間を募集しております。


何故参加したか

今回で5回目の参加です。 1回目から4回目まではなんとか参加できていたのですが、5回目から抽選で外れることが続き、久しぶりの参加になります。


アジェンダ

Time Theme Speaker
19:00~19:05 Opening
19:05~19:35 Telepresence ではじめる k8s 時代の
ローカル開発
Toshihiro Goto @_shiro16
(GMOペパボ)
19:35~20:05 Introduction to Consul Kubernetes Integration
and Consul Connect
Ryo Takaishi @r_takaishi
(GMOペパボ)
20:05~20:35 分散イメージレジストリの検討
〜Beiran & Dragonfly〜
安田 侑史 @yupeji
(クリエーションライン株式会社)
フルカン ムスタファ@furkanmustafa
(Rainlab 株式会社)
20:40~21:40 懇親会 & LT * 2 Sponsored by CyberAgent

内容


Telepresence ではじめる k8s 時代のローカル開発

Toshihiro Goto @_shiro16 (GMOペパボ) さん

speakerdeck.com


telepresence とは

www.telepresence.io

元々はDatawire社が開発してOSSにしたものが Cloud Native Computing Foundation にホストされるようになったらしい。

以下を可能にするソフトウェア

  • 単一のサービスをリモートのKubernetesクラスタに接続しながら、そのサービスをローカルで実行すること
  • そのサービスがクラスタ内の他のサービスに依存している場合でも、単一のサービスの迅速なローカル開発を行うこと
  • ローカルの開発マシンをKubernetesクラスタの一部のように動作させること

telepresence なし
f:id:kabukawa:20190331112802p:plain

telepresence あり
f:id:kabukawa:20190331112817p:plain

解決できる問題

  • image build -> push -> pod の image 更新の手間を省くことが可能になる
  • リモートのKubernetesクラスタに接続しながら開発で可能になる
  • ローカルから他のサービス(マイクロサービス的な他のサービスや DB)に接続が可能になる
  • kubernetes のサービスの一部として機能するので、アクセスした際のネットワーク経路がほぼ同じになる

快適に開発ができる

telepresence の使い方

資料には以下の場合のコマンド例があります。

  • ローカルで起動した server にアクセスを流す
  • ローカルで起動した docker 上で起動している server にアクセスを流す

詳しくは以下を参照。 (資料に書かれていた https://www.telepresence.io/howto は404でページが無くなっていたみたいなので、ドキュメントへのリンクを貼っておきます)

www.telepresence.io

telepresence の処理の流れ

資料に詳しく書かれているので読んでみてください。

取り敢えず試してみた人向け

GKE向けサンプル(developing-services-with-k8s.md に詳しい使い方が書かれています)

github.com

@_shiro16 さんの公開されている telepresence のサンプル

github.com


個人メモ:

  • この動き、ありそうで無かった気がする。なかなか便利そう。
  • kubernetesを使う案件があったら是非使ってみたい。
  • @_shiro16 さんは以前Elasticsearchの勉強会で発表されていたのをお見かけしていたので、技術の幅が広いなぁと思いました。
  • どうでもいいけど、Datawire社の各プロダクトのマスコットキャラ(ペンギン?)かわいくないですか?バッドばつ丸みたいじゃないですか?(興奮)

f:id:kabukawa:20190331122907p:plain:w200 f:id:kabukawa:20190331122916p:plain:w200 f:id:kabukawa:20190331122924p:plain:w200


Introduction to Consul Kubernetes Integration and Consul Connect

Ryo Takaishi @r_takaishi (GMOペパボ) さん

speakerdeck.com


Consulとは?

www.consul.io

あらゆるランタイムプラットフォームとパブリックまたはプライベートクラウドにまたがってサービスを接続、保護、および構成するための分散型サービスメッシュ

  • 接続性のためのService Discovery
    • ヘルスチェック、DNS、HTTPインターフェース
  • セキュリティのためのサービスセグメンテーション
    • 安全なサービス間通信
  • 実行時設定のためのサービス設定

アプリが死んでも app.service.consul が Consul Cluster 内の振り分けなどを自動的にやってくれる。

f:id:kabukawa:20190331124659p:plain:w500

f:id:kabukawa:20190331124711p:plain:w500

今回の発表の背景

  • IaaS上にConsulクラスターを構築
  • nginx → rails への通信などをconsul-templateで動的制御
    • health-checkと組み合わせて、正常なノードだけぶら下げる
  • service-to-serviceの際の名前解決にConsul DNSを使用
  • IaaS上にKubernetesを構築して使おうとしている
    • いきなり全て移行するのは大変だしリスク高
  • 既存の環境とうまく連携したい
    • Kubernetes Integrationがあることを知り検証・利用
    • → その過程でConnectについても検証

Consul Connect (Service Segmentation for security)

learn.hashicorp.com

  • v1.2(2018-06)で追加
  • サービス間における通信の暗号化や認可を行う
  • 暗号化:相互TLS
  • 認可:Service Access Graph

以下のような機能を提供

  • Service Access Graph
  • Sidecar Proxy
  • Envoy Integration
  • Certification Management
  • Native App Integration

Sidecar Proxy は プラガブルになっていて、Envoy Integration 機能により Envoy を使うことも可能

f:id:kabukawa:20190331130337p:plain:w500

f:id:kabukawa:20190331130350p:plain:w500

Consul Connect まとめ

  • Consul Connectを使うことで手軽にservice-to-serviceの暗号化や通信の制御を行うことが可能
  • 既にConsulを使っている場合は試してみると良さそう
  • Envoyを使う場合、機能を全て活用することはできないので注意が必要

Kubernetes Integration

  • Consul ServerをKubernetes上で動かす
  • Consul ClientをKubernetes上で動かす
  • ConsulのServiceとKubernetesのServiceを同期する
  • Consul Connect Sidecar ProxyのPodへのInjection

リポジトリ

Consul ServerクラスターをKubernetes上で動かす

  • 既にConsulで管理しているリソースがあると、それらも含めてConsulで管理できるので便利

f:id:kabukawa:20190331131543p:plain:w500

サービスディスカバリの同期

f:id:kabukawa:20190331132232p:plain:w500

Kubernetes Integration まとめ

  • Kubernetes上でConsulを動かす機能を提供
  • ConsulとKubernetesで相互にサービスを同期可能
  • Consul Connect Sidecar Proxyをinjectionする機能を提供
  • 既存のConsulクラスターとKubernetesが並行稼働している場合、連携させることで便利になりそう

まとめとおまけ

f:id:kabukawa:20190331132656p:plain:w500

GMO Pepabo sponsors CloudNative Days Fukuoka 2019!

cloudnativedays.jp

f:id:kabukawa:20190331132708p:plain:w500


個人メモ:

  • Consul、名前は聞いたことあるけど知らないことが多かった。
  • 既に導入しているところにとっては、連携機能は便利そう。
  • トラブル発生時の原因切り分けとか、仕組みが複雑になると大変そうなイメージなので、そのあたりの話を聞いてみたい。
  • ConsulとEnvoyについてはこんな文書をHashiCorpが出しているのでリンクを貼っておく。

www.consul.io


分散イメージレジストリの検討 〜Beiran & Dragonfly〜

安田 侑史 @yupeji(クリエーションライン株式会社) さん
フルカン ムスタファ@ furkanmustafa(Rainlab 株式会社) さん

f:id:kabukawa:20190403144423p:plain

Consideration of Distributed Container Image Delivery - CodiMD


Docker イメージのダウンロードを分散ダウンロードできるようにして高速化できないか?というアプローチ。

分散ダウンロードの仕組み(Peer to Peer)

f:id:kabukawa:20190403144736p:plain:w500

Bit torrent のようなものだと考えるとわかりやすい

f:id:kabukawa:20190331143943p:plain:w500

https://tech.nikkeibp.co.jp/it/article/COLUMN/20080226/294799/


最近、相次いで同様の機能を提供するものが発表された。

github.com

  • Kraken
    • P2Pのイメージレジストリ
      f:id:kabukawa:20190403145153p:plain:w450
    • 一緒に提供されている helm chart を使ってデプロイ可能
    • Agent
    • Origin
    • Tracker
    • Proxy
    • Build-index
      • Mapping of human readable tag to blob digest
      • No consistency guarantees
      • Stores tags as files on disk
      • Powers image replication between clusters

github.com

  • beiran
    • p2p パッケージ及びイメージ配信レイヤ
    • クリエーションライン社とRAINLAB社がOSSとして提供
    • 現時点では絶賛開発中。αリリースが近い内にアナウンスされるらしい。

hmd.beiran.io


  • Beiranは、ピアツーピアの一般的なパッケージ配布ツール
  • それは現在、いくつかの小さなコンポーネントで構成されている
  • 開発中のPlugins;
    • containerd
    • apt
    • npm
  • beiran インストール前
    • docker image pull python:3.7
  • beiran インストール後
    • beiran docker image pull python:3.7
  • Beiranは基本的にマシン間(最終的には、BitTorrentソフトウェアのように、信頼できないマシン間でさえも)でパッケージを共有することを可能にする単純なソフトウェア。

名前の由来

開発中のものを動作デモ。表記単位がB(バイト)なのはバグらしい(笑)

f:id:kabukawa:20190331151058j:plain:w500

Roadmap

f:id:kabukawa:20190403151000p:plain:w500

この後やりたいこと

f:id:kabukawa:20190331151131j:plain:w500

f:id:kabukawa:20190331151141j:plain:w500

f:id:kabukawa:20190331151150j:plain:w500

gitlab.beiran.io


個人メモ:

  • Dockerのイメージが大きくてダウンロードに時間がかかるという問題に対して、サイズを減らす以外にこんなやり方が考えられているというのが面白い。
  • 使っているのはいわゆるP2Pなので枯れた技術なんだけど、ネットワークを有効活用する意味でも期待。
  • ただ、日本企業はプロキシが融通が利かなかったりP2P禁止!と息巻いていた時期があるので、普及するには時間がかかるのかもな、と思った。

LT1:Jibの話

Hayakawa Hiroshi(@hhiroshell) さん

speakerdeck.com


Jib

  • Java/JVM言語アプリケーションのコンテナイメージ作成を省力化してくれるツール
  • GoogleContainerTools配下のOSSプロジェクト

github.com

Javaアプリケーション開発者にとって辛いこと

  • Dockerfileを編集
  • docker build / push

これを Jibが解決

  • 使い慣れたビルドツール(Maven/Gradle)とプラグインだけでコンテナイメージが作成できる
  • コーディングが滞らない
    ファイルの変更内容に応じて必要なレイヤーを更新するだけなので高速

f:id:kabukawa:20190331153620p:plain:w500


個人メモ:

  • IDEとかのサポートができるようになれば、Java開発者にとってはあまり覚えることを増やさなくても対応できるのはいいかも。
  • 開発の流れをコンテナ周りの作業でぶった切らないように配慮されているところが開発者中心の考え方っぽくて好き。
  • とはいえ、Dockerfile相当のことを書くことになるのは変わらないようなので、標準的な手順を覚えておいたほうが後々困らないのでは?という意味で個人的にはDockerfile覚えて書くのも悪くないと思った。

LT2:明日、業務で使える Scheduler Extender

チェシャ猫(@y_taka_23) さん

speakerdeck.com


Scheduler Extender

  • Webhook による処理を追加
    • 指定した外部サーバと JSON をやり取り
  • 拡張できるポイント䛿 4 つ
    • Filter - Node の候補をさらに絞る
    • Prioritize - Node のスコアリング関数を追加
    • Preempt - 追い出される Pod の候補を絞る
    • Bind - Pod と Node の紐づけを委譲

f:id:kabukawa:20190331155604p:plain:w500

  • 拡張点 1 : Filter
    • Node のフィルタ条件を追加できる
    • その Pod を載せたくない Node を選べる
  • 拡張点 2 : Prioritize
    • Node のスコアリング関数を追加できる
    • スコアが大きい Node ほど選ばれやすい
  • 拡張点 3 : Preempt
    • Preempt の犠牲になる Pod を選択できる
    • Pod は自由に指定できず、候補から選択
    • Preempt Extender の重要性
      • Preemption で殺されない Pod
      • PodPriority だけでは制御できない
  • 拡張点 4 : Bind
    • Pod を Node に紐づける操作を委譲
    • Node 上で時間のかかる前処理ができる

f:id:kabukawa:20190331160447p:plain:w500


個人メモ:

  • Scheduler Extender、先月の Kubernetes meetup tokyoでも触りの話を聞いたけど、わかりやすい説明で「俺にもできるかも」という気持ちにさせるのはさすがだと思った。
  • 実際の現場で使う場面はありそうと思ったが、SESの現場にはそもそもKubernetesが採用されている可能性は低いので、当面は手元での勉強にとどまる可能性が大きい。

懇親会

懇親会、全体の写真や食べ物、飲み物の写真を取り忘れたので、自分の分を撮った写真を貼っておきます。

f:id:kabukawa:20190331002507j:plain


まとめ

こちらも久しぶりの参加でしたが、どの講演も新しいことを学ぶことができてとても参考になりました。 会場が広くなって、参加しやすくなったことは個人的にはとても嬉しかったです(最近抽選で漏れることが続いていたので)。

尚、名物(?)の名札については初めて参加した方も結構喜んでいる感じの話を耳にしたので、この試みは個人的に素敵だなぁと思います。 このツイートに主催者の想いがこもっていると思いますので貼っておきます。

また参加できればいいなと思います。 スピーカー、スタッフ、参加者の皆様、ありがとうございました!