KubeWeekly #158

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

# The Headline

## How our kubernetes journey saved us $1 million dollars
<table>
<tr>
  <td colspan="2"><a href="https://hackernoon.com/how-our-kubernetes-journey-saved-us-1-million-dollars-cede771f1f2b">How our kubernetes journey saved us $1 million dollars</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*te5fg01CzSyPPAC8eew8ug.jpeg"></td>
  <td>Early in 2018 our engineering team embarked on a journey to revamp our infrastructure and tooling. In essence our developer experience was…</td>
</tr>
</table>

kubernetesを活用して1億円コスト削減した話。
導入前はデプロイに平均45分かかっていた。導入後は4分になった。
1億円というのはこのビルドの短縮時間を人件費換算したもの。（$50/hour）

## Kubernetes Authorization via Open Policy Agent – Stefan Büringer – Medium
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@sbueringer/kubernetes-authorization-via-open-policy-agent-a9455d9d5ceb">Kubernetes Authorization via Open Policy Agent – Stefan Büringer – Medium</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*-s7y7xbncJB7Fqy0Zuxe4A.png"></td>
  <td>In a best-practice Kubernetes cluster every request to the Kubernetes APIServer is authenticated and authorized. Authorization is usually…</td>
</tr>
</table>

RBACでは表現できない認可機構をOPAで実現する。
例えば kube-system以外のnamespaceにはフルアクセスを許可したい、PSPでrootで動くコンテナを抑制したり、hostPathの使用を不許可にしたい など。
初めはRBACを生成するオペレータを作った。
その後OPAを使ってMutatingWebhookとして実装するようにした。実装にあたっては [GitHub - open-policy-agent/kubernetes-policy-controller: kubernetes-policy-controller](https://github.com/open-policy-agent/kubernetes-policy-controller) を利用している。

## Monitoring Kubernetes, part 1: the challenges + data sources - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/01/09/monitoring-kubernetes-part-1-the-challenges-data-sources/">Monitoring Kubernetes, part 1: the challenges + data sources - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://blog.sensu.io/hubfs/Stock%20images/Container%20ship.jpeg"></td>
  <td>Originally published here by Sean Porter, CTO of Sensu Our industry has long been relying on microservice-based architecture to deliver software faster and safer. The advent and ubiquity of microservices naturally...</td>
</tr>
</table>

Kubernetes時代になぜモニタリングが重要か、という話と、典型的なモニタリングのデータソース

- ホストのメトリクス node-exporter
- kubernetesのコントローラとkubeletのメトリクス
- cAdvisorのメトリクス
- kube-state-metrics

当然アプリケーションのメトリクスも取る必要があるが、それは次回以降のテーマ  らしい

# The Technical

## Getting started with Knative Serving - My personal blog - Björn Wenzel
<table>
<tr>
  <td colspan="2"><a href="https://koudingspawn.de/knative-serving/">Getting started with Knative Serving - My personal blog - Björn Wenzel</a></td>
</tr>
<tr>
  <td><img src="https://koudingspawn.de//assets/img/knative/image-webhook.png"></td>
  <td>This Tutorial demonstrates how to get started with Knative Serving a platform to build, deploy and mangage modern serverless workloads</td>
</tr>
</table>

Knativeは他のFaaSと違って、RedHatやPivotal、Googleによって使われているという点で他のFaaSと違う。
KnativeにはBuild,Serving,Eventsの3つの部分がある。この記事ではServingについて扱う。
minioにファイルがアップロードされるのをトリガにして、イメージのリサイズを実行するアプリケーションをKnativeで作る。
minionにはもともとWebHookの機能があり、それを使ってServingでデプロイしたリサイズのサービスを呼び出している。

## Writing custom Kubernetes schedulers · Banzai Cloud
<table>
<tr>
  <td colspan="2"><a href="https://banzaicloud.com/blog/k8s-custom-scheduler/">Writing custom Kubernetes schedulers · Banzai Cloud</a></td>
</tr>
<tr>
  <td><img src="https://banzaicloud.com//img/m-logo-inverse.png"></td>
  <td>Bringing cloud native to the enterprise, simplifying the transition to microservices on Kubernetes</td>
</tr>
</table>

KubernetesのSchedulerの動作の解説と、実際のカスタムSchedulerであるRandomScehdulerの実装方法の紹介。

## Kubernetes Federation Evolution
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2018/12/12/kubernetes-federation-evolution/">Kubernetes Federation Evolution</a></td>
</tr>
<tr>
  <td><img src="https://kubernetes.io//images/blog/2018-12-11-Kubernetes-Federation-Evolution/concepts.png"></td>
  <td>Authors: Irfan Ur Rehman (Huawei), Paul Morie (RedHat) and Shashidhara T D (Huawei)
Deploying applications to a kubernetes cluster is well defined and can in some cases be as simple as kubectl create -f app.yaml. The user’s story to deploy apps across multiple clusters has not been that simple. How should an app workload be distributed? Should the app resources be replicated into all clusters, or replicated into selected clusters or partitioned into clusters?</td>
</tr>
</table>

Federation v2の紹介。
基本的な考え方はKubernetesのオブジェクトをクラスタ間で同期するもののようで、Template,Placement,Override,TypeConfigなどでそれらを定義するようだ。
さらに高度な振る舞いとして、レプリカ数の合計をクラスタ全体で調整する機能や、クラスタをまたいだServieの名前解決などがあるらしい。

## Deploy your first scaleable PHP/MySQL Web application in Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/devopslinks/deploy-your-first-scaleable-php-mysql-web-application-in-kubernetes-33ed7ab66595">Deploy your first scaleable PHP/MySQL Web application in Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*ba7Zix9HY6jHgUnxqVCbEA.jpeg"></td>
  <td>Introduction</td>
</tr>
</table>

Kubernetesの説明と、PHP＋MySQLのサービスのデプロイ方法の紹介。minikubeの`--mount-string`オプションを使いhostPathでマウントしたボリュームを簡単に編集できるようにするテクニックを紹介。
MySQLはDeploymentでDeployしてPVCを使っていた。

## Application metrics in Istio – Google Cloud Platform - Community – Medium
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/google-cloud/application-metrics-in-istio-3949d81c5508">Application metrics in Istio – Google Cloud Platform - Community – Medium</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/0*LoATqvpqp_Cy0OkO"></td>
  <td>The default metrics sent by Istio are useful to get an idea on how the traffic flows in your cluster. However, to understand how your…</td>
</tr>
</table>

istioを利用している環境でアプリケーションのメトリクスはどのように取るのが良いか？という話。
この記事ではistioに同梱されているprometheusを使う方法を紹介している。
PrometheusのPodを一度再起動しないとmTLSの有効なPodのメトリクスが収集できないようです。（Istio有効前にPrometheusがデプロイされるからだろうか？）
今行われているMixerの改修が終わると、もっとシンプルになるらしい。（よくわかっていないです）

## Developing microservices with Kubernetes and Telepresence
<table>
<tr>
  <td colspan="2"><a href="https://blog.softwaremill.com/developing-microservices-with-kubernetes-and-telepresence-c390d3ca9fcb">Developing microservices with Kubernetes and Telepresence</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*DJVZF7T-RIohsJUQfX38rA.jpeg"></td>
  <td>Telepresence can speed up developing microservices running on Kubernetes cluster. And save you a lot of time and money.</td>
</tr>
</table>

時間と予算を節約する開発フローを紹介。
docker-composeだと、全ての依存関係をローカルPCに作るはめになる。
port-forwardで、この問題は解決できるが、複数のサービスを使うとなると煩雑になる。
そこでTelepresence。ローカルで動かしているアプリケーションとk8sクラスタのサービスを透過的に通信できるようにしたり、既存のPodとローカルで開発しているアプリケーションを入れ替えたりする方法を紹介。

## Horizontal Pod Autoscale with Custom Prometheus Metrics
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/horizontal-pod-autoscale-with-custom-metrics-8cb13e9d475">Horizontal Pod Autoscale with Custom Prometheus Metrics</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*6hiO1WxZpt7uPCWjx_kFGw.png"></td>
  <td>In the last paper, I explored how to create custom metrics of the application and present the result in the Grafana dashboard. In this…</td>
</tr>
</table>

カスタムメトリクスでHPAを制御する方法の紹介。
[GitHub - DirectXMan12/k8s-prometheus-adapter: An implementation of the custom.metrics.k8s.io API using Prometheus](https://github.com/DirectXMan12/k8s-prometheus-adapter) を使っている。
IBMのKubernetes環境だとPrometheusに証明書認証がかかっているので、その対処方法を紹介している。

## Distributed load testing with Gatling and Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/de-bijenkorf-techblog/https-medium-com-annashepeleva-distributed-load-testing-with-gatling-and-kubernetes-93ebce26edbe">Distributed load testing with Gatling and Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*U-1LFGNq9WtAf2PVpi-D0g.png"></td>
  <td>It has been more than a year since we moved part of our workloads to Kubernetes and in this particular post I’m going to share some…</td>
</tr>
</table>

[Gatling Load and Performance testing - Open-source load and performance testing](https://gatling.io/) というツールを使ってKubernetes上でWebアプリケーションの負荷テストを行う方法の紹介。
KubernetesのJobオブジェクトの並列数を上げることで複数クライアントからのテストを実現。
GCP上なのでGoogleCloudStorageに結果をアップロードし、全てのテスト終了後にそれらをサマリする。

## Using S3 As a Helm Repository – Hacker Noon
<table>
<tr>
  <td colspan="2"><a href="https://hackernoon.com/using-s3-as-a-helm-repository-a76b504d494e">Using S3 As a Helm Repository – Hacker Noon</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/0*j5qOv3O6AE-xnUGD.png"></td>
  <td>Simplify your Kubernetes deployments</td>
</tr>
</table>

S3をHelmリポジトリにする方法の紹介。
[GitHub - hypnoglow/helm-s3: Helm plugin that allows to use AWS S3 as a [private] chart repository.](https://github.com/hypnoglow/helm-s3.git) をつかう。
S3はterraformでセットアップする。

# Tooling Soptlight
## cyberark/KubiScan
<table>
<tr>
  <td colspan="2"><a href="https://github.com/cyberark/KubiScan">cyberark/KubiScan</a></td>
</tr>
<tr>
  <td><img src="https://avatars1.githubusercontent.com/u/30869256?s=400&v=4"></td>
  <td>A tool to scan Kubernetes cluster for risky permissions - cyberark/KubiScan</td>
</tr>
</table>

RBACにまずい設定がないかをスキャンしてくれる。

まずいRBACの設定は下記ドキュメントを参照。
[Securing Kubernetes Clusters by Eliminating Risky Permissions - CyberArk](https://www.cyberark.com/threat-research-blog/securing-kubernetes-clusters-by-eliminating-risky-permissions/)

## windmilleng/tilt
<table>
<tr>
  <td colspan="2"><a href="https://github.com/windmilleng/tilt">windmilleng/tilt</a></td>
</tr>
<tr>
  <td><img src="https://avatars1.githubusercontent.com/u/26349925?s=400&v=4"></td>
  <td>Local Kubernetes development with no stress. Contribute to windmilleng/tilt development by creating an account on GitHub.</td>
</tr>
</table>

ファイルが変更されたら自動的にクラスタにデプロイしてくれるようなツールのようだ。
CUIだがグラフィカルなUIが良い。[GitHub - GoogleContainerTools/skaffold: Easy and Repeatable Kubernetes Development](https://github.com/GoogleContainerTools/skaffold)っぽい？

# The Editorial

## Kubernetes Podcast from Google
<table>
<tr>
  <td colspan="2"><a href="https://kubernetespodcast.com/episode/035-cloud-native-computing-foundation/">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>

CNCFのExecutive DirectorによるCNCFについてのインタビュー（PodCast）

## Practicing what we preach, benefiting from a move to Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://engineering.bitnami.com/articles/practicing-what-we-preach-benefiting-from-a-move-to-kubernetes.html">Practicing what we preach, benefiting from a move to Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://engineering.bitnami.com/images/twitter-card-default.png"></td>
  <td>During 2018, Bitnami has been changing how we approach and utilize infrastructure to deliver our services, moving from a "single server per project" approach to one where we use Kubernetes. Doing so not only makes management easier, but also allows us to respond more quickly to infrastructure vulnerabilities...</td>
</tr>
</table>

プロジェクトをKubernetesへ移行するさい考えるべきこと
どういう手順で移行すべきか

## Enterprise Kubernetes: 5 Insights from KubeCon 2018 - Platform9
<table>
<tr>
  <td colspan="2"><a href="https://platform9.com/blog/enterprise-kubernetes-5-insights-from-kubecon-2018/">Enterprise Kubernetes: 5 Insights from KubeCon 2018 - Platform9</a></td>
</tr>
<tr>
  <td><img src="https://platform9.com/wp-content/uploads/2017/12/blog-austin-skyline-kubecon.jpg"></td>
  <td>Enterprise Kubernetes: 5 insights from >200 practitioners from KubeCon 2017 on use cases, challenges and plans for use of Kubernetes and containers.</td>
</tr>
</table>

KubeCon + CloudNativeCon 2018でPlatform9が実施したサーベイの結果

- どういう立場の人がKubernetesに関心を持っているか？
- ユースケースは何か？
- どのクラウドプロバイダで動かしているか？
- どのようなクラウドネイティブ技術を使っているか？
- Kubernetesやクラウドネイティブ導入の上での懸念は何か？

## Cloud infrastructure for the Internet of Things: Kubernetes on solar plants
<table>
<tr>
  <td colspan="2"><a href="https://learnk8s.io/blog/kubernetes-on-solar-plants">Cloud infrastructure for the Internet of Things: Kubernetes on solar plants</a></td>
</tr>
<tr>
  <td><img src="https://learnk8s.io/blog/kubernetes-on-solar-plants/solar_panel.png"></td>
  <td>Solar panels are getting cheaper, and are becoming an economically viable source of renewable energy in many parts of the world. For solar panels to operate efficiently, they need to be kept clean and pointed at an optimal angle to the sun that balances power generation and prevents overheating. An embedded computer is in charge of monitoring metrics and driving the actuators. But when you have thousands of solar panels and embedded computers how do you orchestrate software updates, monitor uptime and secure communications?</td>
</tr>
</table>

最近のソーラーパネルは複雑な制御が必要で、また制御のための通信は無線を用いることもある。
この記事ではソーラーパネルのコントローラをKubernetesで管理する方法について紹介している。
各パネルの制御ボードをNodeとし、DaemonSetでファームウェアの更新などを実施することができる。

## The State of Kubernetes 2019
<table>
<tr>
  <td colspan="2"><a href="https://blog.giantswarm.io/the-state-of-kubernetes-2019/">The State of Kubernetes 2019</a></td>
</tr>
<tr>
  <td><img src="https://blog.giantswarm.io/assets/2019/01/the-state-of-kubernetes-2019.jpg"></td>
  <td>Last year I wrote a post entitled A Trip From the Past to the Future of Kubernetes. In it, I talked about the KVM and AWS versions of our stack and the imminent availability of our Azure release. I also...</td>
</tr>
</table>
2019年のKubernetesについて予想

- 大企業がKubernetesを使い始める
- セキュリティやアップデートなどDay2オペレーションにフォーカスするようになる
- Kubernetes上でビッグデータを扱う事例が増える
- ClusterAPIなどのコントロールプレーン技術が盛り上がる
- KubernetesAPIの拡張が進む
  - Operatorで自社製品をうまくKubernetes上にデプロイできるようにする
  - Kubernetesの仕組みを使って何か他のものを制御する ML/AI　PlatformやPaaSやCI/CDなど

## How Epic Games Uses Kubernetes to Power Fortnite Application Servers
<table>
<tr>
  <td colspan="2"><a href="https://www.serverwatch.com/server-news/how-epic-games-uses-kubernetes-to-power-fortnite-application-servers.html">How Epic Games Uses Kubernetes to Power Fortnite Application Servers</a></td>
</tr>
<tr>
  <td><img src="https://www.serverwatch.com//images0/serverWatch_logo.gif"></td>
  <td>At KubeCon + CloudNativeCon NA 2018, an Epic Games engineer explains why the world's most popular game is now running on Kubernetes.</td>
</tr>
</table>


Epic GamesのKubernetes事例 EKSを使っているらしい。

## From kitchens to Kubernetes: Bringing tech to the consumer at Williams-Sonoma
<table>
<tr>
  <td colspan="2"><a href="https://www.ciodive.com/news/from-kitchens-to-kubernetes-bringing-tech-to-the-consumer-at-williams-sono/544141/">From kitchens to Kubernetes: Bringing tech to the consumer at Williams-Sonoma</a></td>
</tr>
<tr>
  <td><img src="https://www.ciodive.com/user_media/cache/a7/e4/a7e49bbc043511838b254048e3a60055.jpg"></td>
  <td>CTO and CDO Yasir Anwar has led successful pilots of Kubernetes and AI and ML-based tools at the company. Looking ahead to 2019, even more innovation is on his agenda. </td>
</tr>
</table>

台所洋品店？Williams-SonomaでのAIの活用とKubernetesの利用について。

## Containers are a work in progress for some telcos | FierceTelecom
<table>
<tr>
  <td colspan="2"><a href="https://www.fiercetelecom.com/telecom/despite-hype-containers-are-a-work-progress-for-telcos">Containers are a work in progress for some telcos | FierceTelecom</a></td>
</tr>
<tr>
  <td><img src="https://qtxasset.com/fiercetelecom/1546963891/container-3754438_1280.jpg/container-3754438_1280.jpg?hGHL5O4iJT7ABxbEXB93onNfiU.jKz9w"></td>
  <td>Last year, Kubernetes took center stage in the telecommunications industry as the primary means for managing containers, but there's still work to do. The use of containers is already underway by telcos such as AT&T and BT, and there's no doubt more service providers will use them going forward.</td>
</tr>
</table>

電話会社でもコンテナ技術やKubernetesを使い始めているという話。

## Containers Killed The Virtual Machine Star
<table>
<tr>
  <td colspan="2"><a href="https://www.nextplatform.com/2019/01/09/containers-killed-the-virtual-machine-star/">Containers Killed The Virtual Machine Star</a></td>
</tr>
<tr>
  <td><img src="https://3s81si1s5ygj3mzby34dq6qf-wpengine.netdna-ssl.com/wp-content/uploads/2019/01/container-cloud-1024x1024.jpg"></td>
  <td>We predict new enterprise application development will pass a tipping point in 2019 and shift away from legacy virtual machines (VMs) and strongly toward</td>
</tr>
</table>

Kubernetesやクラウドネイティブにまつわる最近の各社の動き
（よく読んでいない）

## Kubernetes: Scaling up solution of multiple services
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/failing-fast/kubernetes-scaling-up-solution-of-multiple-services-cf7c227afd91">Kubernetes: Scaling up solution of multiple services</a></td>
</tr>
<tr>
  <td><img src="https://cdn-images-1.medium.com/max/1200/1*2n7a_9paxCGgdTzaKqqJtA.png"></td>
  <td>Since the inception of Docker and OCI(Open Container Initiative), the landscape for Operating-system-level virtualization has changed. So…</td>
</tr>
</table>

Kubernetesの役割と、利点の紹介。