KubeCon + CloudNativeCon NA 2020 Virtual レポート

執筆者 : 岩本 俊弘


概要

KubeCon + CloudNativeCon North America 2020 Virtual が 2020 年 11 月 17 日から 20 日の日程で行われた。初日は Co-Located Event と Sponsored Session と Lightning Talk (Graduated Project と Sponsored の 2 種類で、今までの Lightning Talk とはちょっと異なる) で、メインプログラムが 2 日目からなのはいつもと同様である。システム的には 8 月に Virtual で開催されたものと同様であったが、前回 (レポート) とはタイムゾーンが違っていて日本時間で午前 3 時頃から始まったのでその点では夜型の私にはちょっときつかった。

トラック毎のセッション数の比較を下に示す。 Sponsored Session が目立つが、それ以外はセッション数がいままでより少ないようにも見える。

f:id:iwamotoo:20210205135237p:plain
sessions

なお、セッション動画は既に YouTube で公開されていて、 https://kccncna20.sched.com/ からも辿ることができる。

CNCF Graduated Projects Lightning Talks

Improved TiKV Observability: How We Trace Events under Nanoseconds Latency

TiKV という key-value store の性能分析をしたくて、write jitter を調べたいから tracing を使うという話である。 key-value store の処理はとても速くて通常 1us 程度なので軽量な tracing である必要があって、 minitrace (https://github.com/tikv/minitrace-rust) というものを作ったとのことである。 span あたり 20ns で処理できて、 rusttracing や tokio tracing よりずっと速いと言っていた。

チューニングの例として、 CLOCK_MONOTONIC は vDSO でも 25ns かかるから遅すぎてだめだから rdtscp instruction を使っているとか、 tracing 出力を batch write してると話していた。

containerd: Rootless Containers 2020

脆弱性やユーザの設定ミスの影響を軽減する手段として rootless container が有用だと言っている。 rootless は 2012 年頃からやっているが 2018 年ころから人気がでてきたそうである。 Docker, usernetes (https://github.com/rootless-containers/usernetes), k3s, BuildKit での対応状況を説明したあと、rootless container を実現する技術を順に説明していた。 seccomp user notification を使って container の socket fd を差替えることで現状の slirp を使った実装よりずっと速くなると言っていた。(https://github.com/rootless-containers/bypass4netns)

Keynote

#TeamCloudNative: Diversity-Powered Resilience

昨年 11 月に Dan Kohn 氏が急逝されたそうで、CNCF にとって如何に重要な存在だったかということを述べる追悼メッセージから始まった。まだ小さい子供がいらっしゃるそうで、家族をサポートする基金の情報などが thankdan.cncf.io にある。

いつもの流れであるが、初日の Keynote でまず diversity の話をしてから end user の話をしていて、これらを重視していることがわかる。 CNCF に新規参加した end user として ByteDance (TikTok の提供元) と Cox Communications (米国でケーブルテレビやインターネットを提供) が紹介されていた。

また、新しい資格として CKS (Certified Kubernetes Security Specialist) が始まったそうである。

The Cloud Native Journey @Apple

Apple は去年 CNCF に参加していた。 Apple がどんなものを使っているかといった話である。 Kubernetes の前から Mesos を使っていたけど scalability 等に問題が起きたと言っていた。 詳細は不明だが namespace-as-a-service などと言っていて、multi-tenant で利用しているようである。 KubeVirt とか OPA とか Falco も使っていると言っていた。

microvm (untrusted workload を動かしたい) とか virtual cluster (共有 control plane の下で data plane を分けることで maturity と セキュリティの問題を解決する (分離して影響範囲を限定するということだと思われる) ) が現状の優先課題だとのことであった。

映像配信の調子が良くなくて止まったりする。昨日の OpenShift Commons は参加者 2,500 - 3,000 人でうまく動いてたのにと Red Hat の人が Slack で言っていた。

CNCF Projects Update

TiKV, TUF, Harbor, Helm がこの1年で Graduate したそうである。 ハイライトされていたプロジェクトは以下の通り。

Falco

人気があるみたいで、 contributors も今年 60 人も増えたと言っていた。 user の例としては前回の Keynote を見てねと言っていた。

pdig という userspace tracing (ptrace を使っている) で fargate にも対応したと言っていた。

Thanos

今年 4 月に Incubation になって、 native responses caching を Cortex プロジェクトと協調してやったとか言っていた。

Rook

PRP (the Pacific Research Platform; UCSD や UCB などの研究機関から構成される) が PB 級の Ceph を運用してるとのことである。

Vitess

Slack が Vitess を使っていて、7 割まで移行できていたけど残り 3 割の移行に数年かかる予定で、ところが VReplication という機能を使ったら 99% まで移行できて、残りももうすぐ完了するとのことであった。

Keynote: Moving Cloud Native Beyond HTTP: Adding Protocols to Unlock New Use Cases

2日目のキーノート内のセッションで、 HTTP 以外のプロトコルもサポートしていこうという話である。 例として IoT protocol として MQTT とかいろいろ出てきた。

https://docs.google.com/document/d/13wFFC7vIdB2hkxdyT0dSiGgkZTXCDDBeW_GBPqy9Jy0/edit#heading=h.hoz14t7zfu08 に提案文書としてまとまったものがある。

具体的には Envoy が web assembly で拡張できるようになっているので、それを使って http 以外の通信を扱えるといった話や、 Service Mesh Interface という各種 service mesh 実装で使える API に HTTP 以外の protocol のサポートを足していこうといった話をしていた。

他に NSM は L2/L3 thing だと言って話していた。ちょっとレイヤ違いで一緒に扱う意図があまり理解できなかったが、どうも統一的に扱いたいようであった。

Slow Down: Releasing Deliberately

Stephen Augustus @vmware がリリース頻度の話をしていた。SIG release のエンジニアらしい。資料のないプレゼンであった。

2020 年はリリースを意図的に 3 回にしたが、2021 年はどうなるのかよく聞かれるとか言っている。release team の作業量の問題とか releasing tool が古いままだと言っている。

release team や end user や downstream contributor などいろいろなステークホルダーがいることを意識したうえでうまく意見を集約したいといった感じであった。 意見があったら声をあげてくれとまとめていた。

リリース頻度についての議論は以下で行われているようである。

https://github.com/kubernetes/sig-release/issues/1290

SIG-Honk AMA Panel: Hacking and Hardening in the Cloud Native Garden

タイトルの AMA は "ask me anything" の略のようである。全員リモート参加の収録であったが、画像を合成して panel session っぽく机に横に並んでいるようにみせている。

honk はガチョウの鳴き声だが、goose game のガチョウがありふれた物を使っていたずらをするのが hacker に似ているから、 hacking を honking と言うようになったなどと説明していた。

いくつかのお題にそれぞれが回答する流れで、うまくまとめるのは難しいが、セキュリティに詳しくなるには以下のようなことをするといいといった内容の話をしていた。

  • どういう見方でものをみるといいとか curiousity が大事だとか
  • security.stackexchange の質問に答えてみると勉強になるとか
  • get your hands dirty. いろいろ試してみろとも言っていた

Strategies for Multi-Cluster Routing

Weaveworks のエンジニアの発表である。 最初にいろんな例を挙げて様々な理由で multi cluster が必要になると言っていた。そして、パケット通すために Ingress を使う必要があるが cloud provider のと self-hosted ingress はどっちがいいとか話していた。

Ingress に頼らずに Pod 間を直接 routable にする方法として route sharing があって、例えば ready pod を全部 advertise すれば ECMP で load-balance/failover できると言っている。 実際には BGP か OSPF を使って route を配っていて、 BGP そんなに怖くないよとか (当然ながら) クラスタの pod subnet とかが重なってると動かないよ、実装としては Calico, Kube-router, Romana などがあると言っていた。

bgp で route を共有して coredns も設定をちょっといじってクラスタ間で query をフォワードするようにして 2 つのクラスタの Pod 間で通信が普通にできるといったデモをしていた。

実際には何らかの方法で暗号化する必要がある。 そのような node network overlays の例として、 CNI では Weave Net, Cilium、また 2-way UDP hole punching (NAT 越えするためのかっこいい技術) を使うものとして tailscale, slackhq/nebula, ZeroTier などがあって、それらの多くが wireguard を使っていて、また どれが multicast 使えるとか説明していた。

今後の作業として、 KEP-1645: kubernetes-sigs/mcs-api で multi-cluster services API を作っている。 Flagger kStatus が実装されたら inter-cluster orchestration ができるようになると言っていた。

cross cluster NetworkPolicy はできるかという質問がでていて、Cilium ならできるかもと回答していた。

Notary v2: Redesigning the Secure Supply Chain for Containers

Docker と Microsoft のエンジニア方の発表である。 最初に supply chain attack の話をしていて、前回聞いた NotPetya もまた出てきた。

Notary v1 は TUF をコンテナに適用したもので、 2015 年に始めたものであるが、 design mistake があったと言っている。具体的には、レジストリ間で署名を移動できないとか、ユーザビリティの問題とか、うまく動かないときのデバッグが難しいとか、 TOFU (trust on first use) があまり意味がないといった話をしていた。

v2 は去年始めて team (初期は Docker, Microsoft, Amazon で、その他大勢) で合意をとるのが大変と言っている。

Notary v2 のシナリオとして、W 社の image を A 社の developer がもってきて署名を検証して運用用のイメージを作って A 社の鍵で署名する。A 社の運用チームはA 社の鍵で署名されたものだけ使って運用するといったものを説明していた。

signature をどこに置くかで長い議論があったそうで、レジストリ内に署名を置きたいものの、イメージ内部におくと content hash が変わってしまうので使い勝手がよくないので、registry API を足して署名を扱うようにするとのことである。

最後にプロトタイプを使って docker notary --enabled とかやってデモをしていた。

今後のスケジュールは、2020 年はプロトタイプ作成を進めて、方針の合意と threat model 分析を待って、2021 に production にしたいとのことである。

Owned by Statistics: Using Kubeflow to Defend vs Attacks on Your ML Models

ML モデルの作成は全体のごく一部でしかなくて MLOps が重要である。 ML モデルへの攻撃に対処するために MLOps を活用しろという話であった。

最初の攻撃は加工されたデータ (adversarial inputs)で ML モデルに誤判定させる話で、調べてみたら狼とハスキー犬を区別するモデルが実は雪を検出していたなどと話していた。モデルはすぐ古く (stale) なってしまうので繰り返し測定して敵にやられる前に検出して更新することが大事である (そのために MLOps を使え) とのことである。 https://www.kaggle.com/c/stanford-covid-vaccine/ を例題として Kubeflow ML pipeline のデモをしていた。 Katib によるハイパーパラメータチューニングも使っていた。

次の攻撃はモデルを盗むもので、 distillation と model extraction があって、すごく少ないクエリを実行することでモデルを盗むことができる。ML モデルに対する API アクセスを許すことはソースコードを公開することと一緒なので、 MLOps を使って怪しいクエリを検出して防げといっていた。

最後の話題は secret memorization で、予測入力から隠したいもの (住所とかクレジットカード番号とか) が漏れてしまうといったものである。 canary input をつかって秘密が漏れてないかチェックするといった対処が示されていた。

Building a Global Supercomputer with Virtual Kubelet

Pacific Research Platform の話をしている。初期はカリフォルニアの研究機関を10G-100Gbpsのネットワークで繋ぐものであった。現在はヨーロッパやアジア太平洋にも広がっている。 数千-数万 CPU で数百 GPU の scientific clusters がたくさんあって federation して使っているようである。大学は自分の cluster をコントロールしたいという条件があり、また cloud bursting のためにも federation を使いたいといった需要もあるようである。 デモでは、 metadata.annotation に記述することで multicluster で deploy されるといった話をしていた。

後半では https://admiralty.io/ の内部の話をしていた。 Virtual Kubelet を proxy として使って multicluster を実現しているようである。 scheduler にも admiralty の plugin を追加していて、 mutating webhook で proxy pod に書きかえてから schedule するといった図で動作を説明していた。

Building Linux Distributions for fun and profit

アルゼンチン出身で 15 年間 Debian developer をやっている Margarita Manterola 氏の発表である。家族が経営する会社から Google に移ってそこでも distribution 担当をしていたとか経歴を話している。 Google では Gubuntu という Ubuntu LTS ベースのものを使っていて LTS を 2 年毎にバージョンアップして使っていたが、移行作業があまりに大変なので Gubuntu を止めて Debian testing を track するように変えたなどと言っていた。

今は Kinvolk で Flatcar Container Linux をやっているそうである。 usability と security のトレードオフはいつも難しい問題だが、 Flatcar は container 用なので割り切った判断ができて、 /usr も readonly になっていて新しいパッケージの追加はできないようになっているとのことである。

distro の栄枯盛衰の話では、 Mandriva Linux がなくなった話とか、2004 年に Ubuntu の最初のアイデアを聞いたときはうまく行くとは思わなかったといったエピソードを話していた。

他に、ほとんどのユーザはデフォルトの設定のまま使うので、 distro が good security default を指定することが重要であるとか、 container で distro の意味がかわってきていて server の世界ではもう数年で気にされなくなるのではないかと言っていた。

質疑では server side では attack surface を減らせるというメリットが大きいので distro less image が近いうちに主流になるのではないかなどと答えていた。

Scalable and Multitenant Networking in XDP and Kubernetes Operators

Futurewei のエンジニア方 (うち一人は Microsoft に移った?) の発表である。 www.centauruscloud.io を構成するものとして Arktos と Mizar があると言っている。

Arktos は Kubernetes を元にしていて unified vm/container orchestration ができると言っていて、そういえばそんな話をサンディエゴの KubeCon で聞いたなと思いだした。 Arktos はネットワークがテナント分離されてる。

Mizar はネットワーク control plane, data plane の実装で、 Arktos の requirement にこたえるためのもののようである。 Kubernetes の flat L3 network で network policy で分離するのはよくないとか話している。

Mizar はいくつかの XDP program でできていて、一方 flow based network (ovs/ovn) は 10k logical ports で scale しないとのことである。 Mizar の CRD と operator がどう動くかはわりと細かく話していた。

network provision time が ovn は O(n2) だけど Mizar は constant time であるといったグラフがでてきた。

tunnelling protocol は geneve で、 XDP program でどうやってパケットを書きかえて通信を通したりとか Kubernetes の service が実装されてるかといった細かい話をしていた。 kube-proxy も不要になるようである。

最後にデモをしていた。 yaml を食わせて Pod を作って packet を流して、tcpdump の出力とパケットの流れの図を対応させて表示していてかっこよかった。

Stress and Mental Health in Technology

Lancet と OSMI (osmihelp.org) のデータを引用して tech industry では mental health disorder を抱える人の割合が一般人口に比べてずっと多いと言っている。 その理由として、常にストレスに晒されているからではないかと仮説を述べていた。 ストレスの原因として、長時間労働や仕事の人間関係などおなじみのものの他に global pandemic も挙げられていた。 OSMI の調査では気分障害と不安障害が多いけど医学的に診断されてないものが含まれてるので過剰診断ではないかとも言っていた。

ストレスといっても熊に追いかけられて逃げているわけではなく (アザラシ (?) が熊に追いかけられる動画が繰り返し出てきた)、現代のストレスは走って逃げて解決するものではない。不安と恐怖がずっと続く状態にずっといつづけると結局 burn-out してしまうのでとにかく休憩をとって一時的にそれらの感情から離れろと言っていた。

後半は具体的な対処方法の話になって、 休憩 (break) はとても重要なので、重要な会議と同様にちゃんとスケジュールに入れて 15 分でもいいからストレスをもたらすものから離れて注意を他に向けるようにするといい (言うより実際には難しく練習する必要がある) と言っていた。 他に、睡眠の重要性 (もしよく眠れてないならすぐに対処する必要がある) やストレッチや深呼吸 (呼吸に集中することで他のことを忘れられる) といったことも述べていた。

最後の質疑でもいいことを言っていたのだが、文字起こしは残っているものの録画は残っていないようである。

SIG Scheduling Deep Dive

3部構成で、Kubernetes の scheduler がどう動作するか、scheduler の設定のやり方、scheduler の拡張のやり方の話を順にしていた。

最初の話題では、hard constraint は AND されるが soft constraint は score を付けて一番いいノードを選ぶとか話していた。 https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/ の scheduling の流れの絵もでてきた。(この絵はこの後の話題でも繰り返し登場する)

次に、KubeSchedulerConfiguration で scheduler を設定することができて、 1.18 から plugin based な新しい書き方ができるようになったとか、複数の scheduler profiles を定義できるといった話をしていた。config を書くにはどのプラグインがどのステージで動くか理解することが大事だそうである。

最後は拡張の話であるが、 kube-scheduler は plugin 構成ではあるものの single binary にする必要があって、多少敷居が高いので scheduler-plugins プロジェクトで out-of tree の plugin を扱うようにして SIG の人が手伝っているといった話をしていた。

https://github.com/kubernetes-sigs/scheduler-plugins

まとめ

前回に続き Virtual 開催となった KubeCon + CloudNativeCon であった。 知り合いと近況を情報交換したり、どのセッションに人が集まって注目されているかなど、現地にいかないと得られない情報もあり、お祭り騒ぎがないのはちょっと寂しいが、最新の動向をまとめてチェックできるのはありがたいものである。

次回も Virtual 開催であり、2 月 14 日までは $10 で登録できる。その次は、ロサンゼルスの会場と Virtual のハイブリッド開催と Keynote で発表していた。その時点 (11 月) では感染力の強い変異株の話題もなく小康状態だったものの、今は COVID の件数も増えて世界的に大変なことになっていて、果たしてリアル開催があるのだろうかと思う。 イベントを計画する側にとっては先が見通せず難しい情勢だとは思うが、開催形態はともかくこの嵐が過ぎるまでどうにか続けていってほしいと願うばかりである。