KubeWeekly #191

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

(過去のKubeWeekly読書メモは[こちら](https://qiita.com/tags/kubeweekly))

※この記事は、[Z Lab](https://qiita.com/organizations/zlab)の業務の一環として作成したものです。

# The Headlines

## Kubernetes Documentation Survey
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2019/10/29/kubernetes-documentation-end-user-survey/">Kubernetes Documentation Survey</a></td>
</tr>
<tr>
  <td><img src="https://d33wubrfki0l68.cloudfront.net/53fa288ed65b59b93133919b94ebb2bdaa17bfd8/0569f/images/blog/2019-sig-docs-survey/q9-k8s-docs-use.png"></td>
  <td>Author: Aimee Ukasick and SIG Docs
In September, SIG Docs conducted its first survey about the Kubernetes documentation. We’d like to thank the CNCF’s Kim McMahon for helping us create the survey and access the results.
Key takeaways Respondents would like more example code, more detailed content, and more diagrams in the Concepts, Tasks, and Reference sections.
74% of respondents would like the Tutorials section to contain advanced content.</td>
</tr>
</table>

SIG Docsが行ったKubernetesのドキュメンテーションに関するアンケート結果。
アンケート期間が短かったようだが、99人が答えたようだ。
どのドキュメントを見にきているのか、今後どういう改善を期待するか　といった問いについてグラフで結果が示されている。

さらに細かい結果は[こちら](https://github.com/kubernetes/community/blob/master/sig-docs/survey/2019SIGDocsSurveyResultsCharts.pdf)

## How to write a Cluster API provider for running Kubernetes cluster on baremetal
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/kubernetes-cluster-creation-on-baremetal-host-using-cluster-api-1c2373230a17">How to write a Cluster API provider for running Kubernetes cluster on baremetal</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1126/1*bwrbghRAwtf6lEVvoJCbyQ.png"></td>
  <td>This blog post is summary of the talk we presented in Open Source Summit Japan 2019.</td>
</tr>
</table>

[先週紹介しました](https://qiita.com/inajob/items/cea1ccbd4b1d422d6f31#how-to-write-a-cluster-api-provider-for-running-kubernetes-cluster-on-baremetal)

> Cluster APIの紹介と、libvertを利用する簡単なプロバイダのコードを紹介。
> 実際に動作するCluster APIのプロバイダの実装を見ることで、Cluster APIの理解を深めることができます。

# The Technical

## Don't Put Fat Jars in Docker Images
<table>
<tr>
  <td colspan="2"><a href="https://phauer.com/2019/no-fat-jar-in-docker-image/">Don't Put Fat Jars in Docker Images</a></td>
</tr>
<tr>
  <td><img src="https://phauer.com/blog/2019/08-no-fat-jar-docker-image/featured-image-large.png"></td>
  <td>Why fat jars in a Docker container is not a good idea and how we can easily do better</td>
</tr>
</table>

Javaのアプリケーションをコンテナ化する際に大きな一つのjarにしてしまうと非常にコストがかかるという話。
うまくビジネスロジックのコードと、単なる依存ライブラリのコードを分割できればDockerのレイヤーの恩恵を受けることができます。

これを簡単に実現するツールとして[Jib](https://github.com/GoogleContainerTools/jib)を紹介しています。

## A Kubernetes crime story
<table>
<tr>
  <td colspan="2"><a href="https://engineering.prezi.com/https-engineering-prezi-com-a-kubernetes-crime-story-2e8d75a77630">A Kubernetes crime story</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/1*L9MIqztQONHdZaSLz6SutQ.png"></td>
  <td>The crime</td>
</tr>
</table>

実際の障害事例を通したKubernetesでの障害調査方法の紹介。
Kubernetesクラスタへの通信が非常に遅くなる現象の発見から、トレースを仕込み、原因を特定するまでの流れが紹介されている。

この記事での原因はクラスタから外部に通信する際にSYNパケットをドロップしてしまうというLinuxカーネルのSNAT処理の問題を踏んでしまっていたようです。
ちょうど1秒通信が待たされるというのが象徴的な障害なので、覚えておくと良さそうです。 この問題については[この記事](https://tech.xing.com/a-reason-for-unexplained-connection-timeouts-on-kubernetes-docker-abd041cf7e02)が詳しいそうです。


## Kubernetes Service Mesh: A Comparison of Istio, Linkerd and Consul
<table>
<tr>
  <td colspan="2"><a href="https://platform9.com/blog/kubernetes-service-mesh-a-comparison-of-istio-linkerd-and-consul/">Kubernetes Service Mesh: A Comparison of Istio, Linkerd and Consul</a></td>
</tr>
<tr>
  <td><img src="https://platform9.com/wp-content/uploads/2019/10/service-mesh-kubernetes.png"></td>
  <td>Learn what is service mesh and how the 3 leading open source solutions for service mesh on Kubernetes compare across 16 factors.</td>
</tr>
</table>

サービスメッシュについての紹介と、Consul Connect, Istio, Linkerdの特徴の紹介。

- Consul ConnectはVMとKubernetesクラスタを連携したいときなどに有用
- Istioは機能豊富だがその分複雑
- Linkerdはシンプルだが柔軟性に欠ける CNCF Incubating Project

## ClusterAPI — A Guide on How to Get Started
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/condenastengineering/clusterapi-a-guide-on-how-to-get-started-ff9a81262945">ClusterAPI — A Guide on How to Get Started</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/1*aOXWJ9O1x2hYDCZNO6wc4g.jpeg"></td>
  <td>In the past years, Kubernetes has been the nucleus of container orchestration frameworks. With the growing number of microservices…</td>
</tr>
</table>

Cluster APIの紹介とその実例。
kindでmanagement clusterを作成し、その後AWS上にtarget clusterを作成する。

## How to autoscale apps on Kubernetes with custom metrics
<table>
<tr>
  <td colspan="2"><a href="https://learnk8s.io/autoscaling-apps-kubernetes">How to autoscale apps on Kubernetes with custom metrics</a></td>
</tr>
<tr>
  <td><img src="https://learnk8s.io/a/c4beabbc0e974fd220dd5f132fb7f428.png"></td>
  <td>Deploying an app to production with a static configuration is not optimal. Traffic patterns can change quickly and the app should be able to adapt to them. Kubernetes provides excellent support for autoscaling applications in the form of the Horizontal Pod Autoscaler. In this article, you will learn how to use it.</td>
</tr>
</table>

Horizontal Pod Autoscalerでカスタムメトリクスを利用する方法の紹介。
このサイトは図が多く使われていて非常にわかりやすい。

## Kubernetes Operator for API Management
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/swlh/kubernetes-operator-for-api-management-4f0e56150da6">Kubernetes Operator for API Management</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/1*k-5hehiWl_wGhz3itUjuMg.png"></td>
  <td>In two prior posts, API Microgateway and API Management and Service Mesh, I discussed how API management has evolved with…</td>
</tr>
</table>

WSO2と呼ばれるオープンソースのAPI管理ソリューションをKubernetes上でうまく扱うためのオペレータである[APIM Operator](https://github.com/wso2/k8s-apim-operator)の紹介
API定義をCustomResourceとしてデプロイすると、必要なコンテナのビルドや、Kubernetesのリソースのデプロイなどを行ってくれるもののようです。

## Kubernetes: How to write a kubectl plugin · Jonas-Taha El Sesiy

<table>
<tr>
  <td colspan="2"><a href="https://elsesiy.com/blog/how-to-kubectl-plugin">Kubernetes: How to write a kubectl plugin · Jonas-Taha El Sesiy</a></td>
</tr>
<tr>
  <td><img src="https://elsesiy.com//assets/Jonas-TahaElSesiy.jpg"></td>
</tr>
</table>

kubectl pluginの仕組みやkrewの紹介。
またオリジナルのプラグインの開発方法も詳しく紹介している。
特にGo言語を用いたkubectl pluginの開発について、便利ツールやディレクトリ構成、Makefileなどが紹介されているのが役に立ちそう。

# The Editorial

## Distributed Systems Explained for Business Leaders
<table>
<tr>
  <td colspan="2"><a href="https://thenewstack.io/primer-distributed-systems-and-cloud-native-computing/">Distributed Systems Explained for Business Leaders</a></td>
</tr>
</table>

分散システムについての概略をビジネスリーダー向けに記事した記事。

CPU速度、コア数の増加とネットワークの高速化に伴い・・・　から始まり、クラウドコンピューティング、Kubernetesまで解説されている。

記事にもあるようにクラウドネイティブテクノロジーのオープン化というのはその名前からは想像しづらいですが、オンプレミス環境でクラウドっぽいことを行うために利用できるものである、という話は確かにこの業界の人でないとわからない話かもしれません。

## GKE usage metering is GA, adds tools to tackle overprovisioning | Google Cloud Blog
<table>
<tr>
  <td colspan="2"><a href="https://cloud.google.com/blog/products/containers-kubernetes/use-gke-usage-metering-to-combat-over-provisioning/">GKE usage metering is GA, adds tools to tackle overprovisioning | Google Cloud Blog</a></td>
</tr>
<tr>
  <td><img src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/GCP_Containers_Kubernetes.jpg"></td>
  <td>GKE usage metering is GA, and now allows you to track down over-provisioned resources.</td>
</tr>
</table>

GKEの新機能であるusage mentringの紹介。今年の初めに発表されたものだがこの度GAとなったようです。

仕組みとしては各PodのRequest/Limit、リソース消費量を収集しBigQueryに流し込み、分析するというもののようです。
Data Studioに専用のダッシュボードが用意されており、簡単にリソース消費の実態を把握することができます。

こういう機能があると不必要にRequestの大きなPodや、逆にリソースがギリギリのPodなどを知ることができて、クラスタ運用者にとって非常に有用そうです。

## cert-manager, with James Munnelly

<table>
<tr>
  <td colspan="2"><a href="https://kubernetespodcast.com/episode/075-cert-manager/">cert-manager, with James Munnelly</a></td>
</tr>
<tr>
  <td><img src="https://kubernetespodcast.com/_assets/images/Kubernetes-Podcast-Logo_1400x1400.png"></td>
</tr>
</table>

Kubernetes Podcast。今回のゲストはcert-managerのメンテナのJames Munnelly

## With Cloud Native, Intuit Brings ‘Lightning Fast’ Deployment to Thousands of Developers - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/10/22/with-cloud-native-intuit-brings-lightning-fast-deployment-to-thousands-of-developers/">With Cloud Native, Intuit Brings ‘Lightning Fast’ Deployment to Thousands of Developers - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://www.cncf.io/wp-content/uploads/2017/12/icon_cncf_twitter.png"></td>
  <td>In 18 months, Intuit went from zero to 2,000 services running on Kubernetes. And here’s why: Cloud native technology has enabled “lightning fast” deployment, says Jeff Brewer, Chief Architect, Small...</td>
</tr>
</table>

[先週紹介しました](https://qiita.com/inajob/items/cea1ccbd4b1d422d6f31#with-cloud-native-intuit-brings-lightning-fast-deployment-to-thousands-of-developers---cloud-native-computing-foundation)

> Insuitという会社のKubernetes導入のケーススタディ
> Argoプロジェクトに従事しているApplatix社を買収し、Kubernetesの導入を促進したようです。
> 多くのクラスタを管理するために[keiko](https://github.com/keikoproj/keiko)をつくり、オープンソースにしています。