KubeWeekly #164

# はじめに
KubeWeeklyは毎週Kubernetesに関する興味深いニュースを提供しています。（http://bit.ly/kubeweekly ）この記事は 2019/03/13に発行された Kube Weekly #164 ( https://mailchi.mp/cncf/kubeweekly-164 ) を読んで、感じたことをメモ的にまとめたものです。
私の勘違いや説明不足による誤解もあるかと思いますので、この記事読んで「おっ」と思ったらURLを辿って本文を確認してください。

# The Headlines

## Cloud Native Computing Foundation Announces Schedule for KubeCon + CloudNativeCon Europe 2019
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/announcement/2019/03/13/cloud-native-computing-foundation-announces-schedule-for-kubecon-cloudnativecon-europe-2019/">Cloud Native Computing Foundation Announces Schedule for KubeCon + CloudNativeCon Europe 2019</a></td>
</tr>
<tr>
  <td><img src="https://www.cncf.io/wp-content/uploads/2019/03/cncf-icon-color.png"></td>
  <td>Foundation’s biggest European event to date will feature talks by Ant Financial, AT&T, Dyson, Etsy.com, GO-JEK, NTT Corporation, NVIDIA, Offerup, Spotify, Zalando, and more SAN FRANCISCO, Calif. – March 13,...</td>
</tr>
</table>

KubeCon + CloudNativeCon Europe2019のスケジュールが発表されました。
今回は10000人以上が参加する予定らしい。

最大で8Trackもあるようです。

## How Airbnb Simplified the Kubernetes Workflow for 1000+ Engineers 
<table>
<tr>
  <td colspan="2"><a href="https://www.infoq.com/news/2019/03/airbnb-kubernetes-workflow">How Airbnb Simplified the Kubernetes Workflow for 1000+ Engineers </a></td>
</tr>
<tr>
  <td><img src="https://cdn.infoq.com/statics_s2_20190312-0415/styles/i/logo-big.jpg"></td>
  <td>Melanie Cebula talked about the internal tooling and strategies Airbnb adopted to support over 1000 engineers concurrently configuring and deploying over 250 critical services to Kubernetes. One key enabler was a layer of abstraction and generation of Kubernetes configuration from higher level primitives using standardized environments and namespaces (and automated validations whenever possible).</td>
</tr>
</table>

AirbnbでどのようにKubernetesのワークフローを簡素化したのかという話。

1000人を超えるエンジニアが、250以上のサービスを運用し、一日平均500回デプロイしている。
`kube-gen`という社内ツールを作成した。これはhelm, kustomize, kaptanなどと似たようなツールだが、Airbnbのワークフローに特化した作りとなっているようだ。

また`k`というコマンドラインツールを作った、これはkubectlやdocker、kube-genのラッパーのようだ

## Raw Block Volume support to Beta
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2019/03/07/raw-block-volume-support-to-beta/">Raw Block Volume support to Beta</a></td>
</tr>
<tr>
  
  <td>Authors: Ben Swartzlander (NetApp), Saad Ali (Google)
Kubernetes v1.13 moves raw block volume support to beta. This feature allows persistent volumes to be exposed inside containers as a block device instead of as a mounted file system.
What are block devices? Block devices enable random access to data in fixed-size blocks. Hard drives, SSDs, and CD-ROMs drives are all examples of block devices.
Typically persistent storage is implemented in a layered maner with a file system (like ext4) on top of a block device (like a spinning disk or SSD).</td>
</tr>
</table>


Kubernetes v1.13にてRaw Block Bolumeがベータになりました。In-treeのいくつかの実装と、CSIで利用できるようです。

これによりデータベースやSDSなどのアプリケーションがサポートできるようになるようです。
注意点としてはSYS_RAWIOの権限をコンテナに持たせる必要があることが挙げられています。

## The Technical

## Automated canary deployments with Flagger and Istio
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/google-cloud/automated-canary-deployments-with-flagger-and-istio-ac747827f9d1">Automated canary deployments with Flagger and Istio</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*dwICVz1w04jIMDdx8u1rjg.png"></td>
  <td>Progressive delivery on Google Kubernetes Engine</td>
</tr>
</table>

FlaggerとIstioを使って自動的にCanaryデプロイメントを実現方法のチュートリアル。
Istioだけではリクエストの振り分けの割合を指定できるだけで、自動的にCanaryデプロイメントを実現することはできません。
そこでこの記事では[Flagger](https://github.com/stefanprodan/flagger)というツールを使ってそれを自動化しています。

Flaggerでは`Canary`というCRDを定義しており、これに従って、Istioのリクエスト振り分け設定を更新していく。
切り替えがうまくいっているかの判定も行い、まずいことが起きているようなら、リリースを中止し切り戻すことも行ってくれるようだ。

## Under the 🔬 with Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/yld-engineering-blog/under-the-with-kubernetes-c1ea1a82c61f">Under the 🔬 with Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/0*_KXf6_zBUdCH85tK"></td>
  <td>Ever wanted to know what a field does in your Kubernetes yaml definitions?</td>
</tr>
</table>

Kubernetes のリソースの一覧は`kubectl api-resources`で得ることができ、各フィールドの意味は`kubectl explain`で知ることができるよ。という話

## How we designed retries in Linkerd 2.2 - blog.linkerd
<table>
<tr>
  <td colspan="2"><a href="https://blog.linkerd.io/2019/02/22/how-we-designed-retries-in-linkerd-2-2/">How we designed retries in Linkerd 2.2 - blog.linkerd</a></td>
</tr>
<tr>
  <td><img src="https://blog.linkerd.io/wp-content/uploads/sites/3/2019/02/image-15.png"></td>
  <td>Retries are a fundamental mechanism for handling partial or transient failures in a distributed system. But retries can also be dangerous—if done poorly, they c</td>
</tr>
</table>

Linkerd2.2でリトライをどのように実装しているかという話

リトライの制御にはRetry badgetsという設定を用いる。単なるMaxRetriesなどでは、設定値を勘で決めることになる上に、システム障害を引き起こすこともある。
RetryBadgetではリトライリクエストの占める最大の割合を指定することで、この問題に対応している。

## Optimizing Open Policy Agent-based Kubernetes Authorization via Go Execution Tracer
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/optimizing-open-policy-agent-based-kubernetes-authorization-via-go-execution-tracer-7b439bb5dc5b">Optimizing Open Policy Agent-based Kubernetes Authorization via Go Execution Tracer</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*89wTn6BsehrC-zrZ0zzsHA.png"></td>
  <td>This blog post explains how OPA and Kubernetes Policy Controller can be fine-tuned for production usage.</td>
</tr>
</table>

OPAを使ってKubernetesのAPIに認可の機能を実装する際の最適化の方法を紹介。

- フックするオブジェクトやverbを正しく指定する
- oldObjectに対するルールを削除する
- GoのGC間隔を長くする
- OPAのルールのネストを浅くする
- Server Side Applyが実現されるとリクエストが減るためよりパフォーマンスが良くなる

## GraphQL in a Microservices Architecture
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/graphql-in-a-microservices-architecture-d17922b886eb">GraphQL in a Microservices Architecture</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*S6sI4vnB5o4ktXzrY3Orkg.png"></td>
  <td>GraphQL stitching increases developer agility and productivity</td>
</tr>
</table>

マイクロサービスへのアクセスのインターフェースとしてGraphQLを使う場合、1つのGraphQLのエンドポイントを管理する方法では、マイクロサービスごとに細かい事情に対応できないという問題がある。
この記事では schema stitchingという機能（？）を使って、それぞれのマイクロサービスごとにGraphQLを定義する方法を紹介している。

## Deploying React.js Apps to Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://blog.usejournal.com/deploying-react-js-apps-to-kubernetes-863b468b9785">Deploying React.js Apps to Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/0*6-7YxZnbJoIeri2L.png"></td>
  <td>The fastest way to containerize and deploy React applications using Kubernetes and DevSpace.</td>
</tr>
</table>

[DevSpace CLI](https://github.com/devspace-cloud/devspace)をつかってReact製のアプリケーションをKubernetesにデプロイする方法を紹介。
DevSpace CLIを使うことで、プロジェクトのテンプレートを作ることができ、そこにDockerfileやKubernetesのマニフェストも含まれている。

そしてSaaSであるDevSpace Cloudにデプロイすることもできる。
`devspace analyze`というのが関連するリソースのエラーっぽい項目を自動的にフィルタして表示してくれるコマンドで、とても便利そう。

## Deploying a scalable web application with Docker and Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/postman-engineering/deploying-a-scalable-web-application-with-docker-and-kubernetes-a5000a06c4e9">Deploying a scalable web application with Docker and Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*VZf19QtcEYsMaA912V0pkQ.jpeg"></td>
  <td>Learn how to test and deploy a Node.js app using containers and an orchestration engine</td>
</tr>
</table>

コンテナ、Docker, Kubernetesの紹介と[PostMan](https://www.getpostman.com/)を使ったテスト方法の紹介。

## Routing in a Multi-Platform Data Center: From VMs to Kubernetes, via Ambassador
<table>
<tr>
  <td colspan="2"><a href="https://blog.getambassador.io/routing-in-a-multi-platform-data-center-from-vms-to-kubernetes-via-ambassador-47bbe658683c">Routing in a Multi-Platform Data Center: From VMs to Kubernetes, via Ambassador</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/0*N3rzMF2wZJqHPzeP"></td>
  <td>At Datawire, we are seeing more organizations migrating to their “next-generation” cloud-native platform built around Docker and…</td>
</tr>
</table>

Ambassadorを使って旧来のVMの環境を徐々にKubernetesに以降する際に便利な設定を行う方法の紹介。

[pro-ref-arch/cloud-infrastructure/google-cloud-platform](https://github.com/datawire/pro-ref-arch/tree/master/cloud-infrastructure/google-cloud-platform)ここにサンプル構成とそれを作るためのスクリプト類がまとめてある。

## Continuous Delivery Pipeline for Kubernetes using Spinnaker
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/devopslinks/continuous-delivery-pipeline-for-kubernetes-using-spinnaker-225fe9c9a6e6">Continuous Delivery Pipeline for Kubernetes using Spinnaker</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*E2KgHQqkoZ7WBT53uqwqUw.jpeg"></td>
  <td>Kubernetes is now the de-facto standard for container orchestration. With more and more organizations adopting Kubernetes, it is essential…</td>
</tr>
</table>

KubernetesへのCD敏江tSpinnakerを利用する方法を紹介。
GKE,Jenkins,Github Webhookの組み合わせ。

CIはJenkinsでやって、CDはSpinnakerでやるという構成のようだ。

## Kubernetes-based Microservice Observability with Istio Service Mesh: Part 1
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@GaryStafford/kubernetes-based-microservice-observability-with-istio-service-mesh-part-1-bed3dd0fac0b">Kubernetes-based Microservice Observability with Istio Service Mesh: Part 1</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*uSdUHacddypjAQQ3eueMmQ.png"></td>
  <td>In this two-part post, we will explore the set of observability tools which are part of the latest version of Istio Service Mesh.</td>
</tr>
</table>

Istioに含まれるobservabilityツールの紹介。最新のIstioにはZipkin, Jaeger, Kiali, Service Graph, Prometheus, Grafanaが同梱されている。

図にあるように6種類のサービスをデプロイし、また外部のMongoDBやRabbitMQのSaaSを使うようにしている。
実際のObservabilityツールについてはPart2で扱うとのこと。

# The Editorial

## Certifying Kubernetes with Sonobuoy - Cloud Native Apps
<table>
<tr>
  <td colspan="2"><a href="https://blogs.vmware.com/cloudnative/2019/02/21/certifying-kubernetes-with-sonobuoy/">Certifying Kubernetes with Sonobuoy - Cloud Native Apps</a></td>
</tr>
<tr>
  <td><img src="https://blogs.vmware.com/cloudnative/files/2019/02/Screen-Shot-2019-02-21-at-10_opt.png"></td>
  <td>By Steve Sloka, Sr. Member of Technical Staff, and  John Schnake, Systems Engineer   There are many ways to create Kubernetes clusters and many environments that can host them. As a result, platform operators find it difficult to determine whether a cluster is properly configured and whether it is working as it should. Sonobuoy is</td>
</tr>
</table>

VMWareによるSonobuoyを使ったKubernetesクラスタの検証について紹介。
コミュニティによるプラグインとして[bgeesaman/sonobuoy-plugin-bulkhead](https://github.com/bgeesaman/sonobuoy-plugin-bulkhead) を紹介している。これはCIS Benchmarkを実行するためのプラグイン。

今後の予定についても述べられている。

## 7 Key Considerations for Kubernetes in Production - The New Stack
<table>
<tr>
  <td colspan="2"><a href="https://thenewstack.io/7-key-considerations-for-kubernetes-in-production/">7 Key Considerations for Kubernetes in Production - The New Stack</a></td>
</tr>
<tr>
  <td><img src="https://cdn.thenewstack.io/media/2019/02/073fac13-hand-2111445_1280.jpg"></td>
  <td>Today Enterprise IT does not question the value of containerized applications anymore. Given the move to adopting DevOps and cloud native architectures, it is critical to leverage container capabilities in order to enable digital transformation. Google’s Kubernetes (K8s), an open source container orchestration system, has become the de facto standard — and the key enabler …</td>
</tr>
</table>

本番環境向けのKubernetesを考える際の7つのポイントについて紹介。

- Managed KubernetesサービスはSLAや簡単なオペレーションを提供してくれます
 - 各社SLAが違うのでよく検討すること
- クラスタのモニタリングとロギング
- コンテナレジストリ、パッケージマネージメント Helm/Terraform
- CI/CDツール
- クラスタのプロビジョニング・ロードバランス
- セキュリティ
- ガバナンス

## 6 tips for transitioning to Kubernetes - JAXenter
<table>
<tr>
  <td colspan="2"><a href="https://jaxenter.com/kubernetes-transition-tips-156557.html">6 tips for transitioning to Kubernetes - JAXenter</a></td>
</tr>
<tr>
  <td><img src="https://jaxenter.com/wp-content/uploads/2019/03/shutterstock_169402166.jpg"></td>
  <td>As Kubernetes continues to dominate, you may be looking to switch over to it. Don't know where to start? Here are six helpful tips.</td>
</tr>
</table>

Kubernetesに移行する際の6つのTips

- 最高のマシンを求めてお金を払い過ぎない
  - オートスケールなどもある
- セッションスティッキーなLBを使わない 
  - コネクションが偏る
- 永続ストレージに一時ファイルを置かない
  - 永続ストレージソリューションは高いので無駄な用途に使わない
- GoogleCloudではログをOFFにする
  - 期待した通り動かない（とかかれている？）
- スケールをさせる前に、CDNを使うことを検討する
- Kubernetes自身の設定を作り込むより、アプリケーション設定しよう
  - DevOpsのメンバーにボトルネックを解消させるよ入り、アプリケーションの作りやせって艇を見直すほうが良いことが多い

日本語翻訳記事がありました→ [Kubernetesに移行するための6つのヒント
](http://k8s.jp/2019/03/14/kubernetes-transition-tips/)

## What's next for Kubernetes and hybrid cloud
<table>
<tr>
  <td colspan="2"><a href="https://enterprisersproject.com/article/2019/3/kubernetes-hybrid-cloud-whats-next">What's next for Kubernetes and hybrid cloud</a></td>
</tr>
<tr>
  <td><img src="https://enterprisersproject.com/sites/default/files/cio_kubernetes.png"></td>
  <td>Meet Knative, Istio, KubeVirt, and Kubeflow – four emerging technologies to watch if you’re using Kubernetes and hybrid cloud</td>
</tr>
</table>

Kubernetesを活用したクラウドネイティブなアプリケーションの例を紹介。

- Knative
- Istio
- KubeVirt
- Kubeflow

## The Leading Open Source Serverless Solutions for Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://gravitational.com/blog/serverless-on-kubernetes/">The Leading Open Source Serverless Solutions for Kubernetes</a></td>
</tr>
<tr>
  
  <td>The universe of serverless-wielding software architects and Kubernetes cluster operators has started to collide and, yet again, Google is in the driver's seat. In this article we'll wander down the CNCF's Serverless Landscape in chronological order, quickly discovering that Knative is the sweet mamba jamba of open source lambda competitors.</td>
</tr>
</table>

Serverlessのソリューションについてそれぞれのサービスを詳しく紹介

開発開始時期や、コミュニティの勢い、ライセンス、ステータス、ソースコード規模、インストール方法、主な機能、セキュリティ・マルチテナンシー、などの観点でまとめられている。

それぞれの紹介文も詳しく書かれている。

- OpenWrisk
- fission
- Knative
- Kubeless
- OpenFaaS

## Introducing Quarkus: a next-generation Kubernetes native Java framework - Red Hat Developer Blog
<table>
<tr>
  <td colspan="2"><a href="https://developers.redhat.com/blog/2019/03/07/quarkus-next-generation-kubernetes-native-java-framework/">Introducing Quarkus: a next-generation Kubernetes native Java framework - Red Hat Developer Blog</a></td>
</tr>
<tr>
  <td><img src="https://developers.redhat.com/blog/wp-content/uploads/2019/03/Quarkus.png"></td>
  <td>Quarkus is a Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot, crafted from the best of breed Java libraries and standards.</td>
</tr>
</table>

QuarkusというKubernetesを前提としたJavaのフレームワークの紹介。

日本でも話題になっていたQuarkusの紹介

- 起動が早い
- メモリ消費が少ない
- 容量も少ない
- ImperativeとReactiveの統合
- 厳選されたライブラリ

などなど特徴盛りだくさん

## Kubernetes Pipelines: Hello, New World - Container Journal
<table>
<tr>
  <td colspan="2"><a href="https://containerjournal.com/2019/03/12/kubernetes-pipelines-hello-new-world/">Kubernetes Pipelines: Hello, New World - Container Journal</a></td>
</tr>
<tr>
  <td><img src="https://i0.wp.com/containerjournal.com/wp-content/uploads/2019/03/Kubernetes-Pipelines-World.jpg?fit=770%2C330&ssl=1"></td>
  <td>Kubernetes and the new Kubernetes pipeline is ushering in a much better way than the traditional monolithic pipeline.</td>
</tr>
</table>

Kubernetesを用いたマイクロサービスの開発フローと従来のモノリシックなアプリケーションの開発フローの違いを説明している。


## Kubernetes for IoT gets lighter than ever with k3s - JAXenter
<table>
<tr>
  <td colspan="2"><a href="https://jaxenter.com/kubernetes-gets-lighter-ever-k3s-156295.html">Kubernetes for IoT gets lighter than ever with k3s - JAXenter</a></td>
</tr>
<tr>
  <td><img src="https://jaxenter.com/wp-content/uploads/2019/03/shutterstock_778146544.jpg"></td>
  <td>Kubernetes is looking lighter than air with k3s, weighing in with a tiny binary of 40 MB. k3s needs just 512 MB of RAM to run, making it perfect for IoT.</td>
</tr>
</table>


k3sの紹介

IoTやEdgeコンピューティングをターゲットとしたKubernetes互換のソフトウェア。40MBでメモリは512MBあれば動作する。
その秘密は、レガシーな機能やAlphaな機能、デフォルトではない機能を削ぎ落とした点にあります。またetcdではなくsqliteを使うようになっています（etcd3を選ぶこともできます）

## Happy graduation day, Containerd! Canonical has something for you
<table>
<tr>
  <td colspan="2"><a href="https://www.theregister.co.uk/2019/03/01/containerd_canonical/">Happy graduation day, Containerd! Canonical has something for you</a></td>
</tr>
<tr>
  <td><img src="https://regmedia.co.uk/2016/11/04/graduates.jpg"></td>
  <td>Support due in Microk8s and Charmed Kubernetes</td>
</tr>
</table>

ContainerdがCNCFでGraduatedに認定されたことについて。

## Kubernetes Podcast from Google
<table>
<tr>
  <td colspan="2"><a href="https://kubernetespodcast.com/episode/043-borg-omega-kubernetes-beyond/">Kubernetes Podcast from Google</a></td>
</tr>
<tr>
  <td><img src="https://kubernetespodcast.com/_assets/images/Kubernetes-Podcast-Logo_1400x1400.png"></td>
  <td></td>
</tr>
</table>

PodCast(聞いていない)

元Borgチームで、OmegaとKubernetesのコファウンダーのBrian Grantのインタビュー