KubeWeekly #188

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

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


## 2019 Steering Committee Election Results
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2019/10/03/2019-steering-committee-election-results/">2019 Steering Committee Election Results</a></td>
</tr>
<tr>
  
  <td>Authors: Bob Killen (University of Michigan), Jorge Castro (VMware), Brian Grant (Google), and Ihor Dvoretskyi (CNCF)
The 2019 Steering Committee Election is a landmark milestone for the Kubernetes project. The initial bootstrap committee is graduating to emeritus and the committee has now shrunk to its final allocation of seven seats. All members of the Steering Committee are now fully elected by the Kubernetes Community.
Moving forward elections will elect either 3 or 4 people to the committee for two-year terms.</td>
</tr>
</table>

KubernetesのSteering Committeeの選挙結果。初期メンバーからの初めての異動となる。

## Community and Contributor Experience, with Jorge Castro

<table>
<tr>
  <td colspan="2"><a href="https://kubernetespodcast.com/episode/074-community-and-contributor-experience/">Community and Contributor Experience, with Jorge Castro
</a></td>
</tr>
<tr>
  <td><img src="https://kubernetespodcast.com/_assets/images/Kubernetes-Podcast-Logo_1400x1400.png"></td>
</tr>
</table>

Kubernetes Podcast。今回のゲストはVMWare勤務のJorge Castro。Kubernetesのコミュニティマネージャ。
SIG  Contributer Experiecnceについて話しているようです。

# The Technical

## kubectl flags in your plugin
<table>
<tr>
  <td colspan="2"><a href="https://gianarb.it/blog/kubectl-flags-in-your-plugin">kubectl flags in your plugin</a></td>
</tr>
<tr>
  <td><img src="https://gianarb.it/img/gianarb.png"></td>
  <td>Develop cure custom kubectl plugins with friendly flags from the kubectl</td>
</tr>
</table>

kubectl pluginを作る時に引数のパーサをどうするかという話。
kubectlと同じような引数のパーサをゼロから作るのは骨が折れますが、Goで書く場合はKubernetesのライブラリであるkubernetes/cli-runtimeが利用できるそうです。サンプルコードも紹介されている。

## 12 Kubernetes configuration best practices · StackRox: Cloud-Native, Container, and Kubernetes Security
<table>
<tr>
  <td colspan="2"><a href="https://www.stackrox.com/post/2019/09/12-kubernetes-configuration-best-practices/">12 Kubernetes configuration best practices · StackRox: Cloud-Native, Container, and Kubernetes Security</a></td>
</tr>
<tr>
  <td><img src="https://res.cloudinary.com/stackrox/v1569543604/12-k8s-config-best-practices-blog-banner_bsb95m.jpg"></td>
  <td>Learn about Kubernetes configurations best practices in 12 areas: API server, kubelet, etcd, network policies, pod security policies, master node, worker node, and more</td>
</tr>
</table>

Kubernetesの設定の12のベストプラクティス

- 最新版を使おう
- PodSecurtyPolicyを使いリスクのあるコンテナが使われることを防ごう
- Namespaceを活用しKubernetesのリソースを適切に分離しよう
- NetworkPolicyを使いPod間の通信を隔離しよう
- ImagePolicyWebhookを使い、管理されたイメージだけを利用できるようにしよう
- Kubernetes APIサーバのセキュリティ設定を見直す（元記事には見るべき引数も列挙されています）
- Kubernetes Schedulerのセキュリティ設定を見直す（元記事には見るべき引数も列挙されています）
- Kubernetes Controller-managerのセキュリティ設定を見直す（元記事には見るべき引数も列挙されています）
- Master Nodeに存在するファイルの所有者・パーミッションを調べる（元記事には見るべきファイルも列挙されています）
- etcdの設定を見直す（元記事には見るべき引数も列挙されています）
- kubeletの設定を見直す（元記事には見るべき引数も列挙されています）
- Worker Nodeに存在するファイルの所有者・パーミッションを調べる（元記事には見るべきファイルも列挙されています）

後半の注意すべき引数やファイルの一覧が有用そうです。

## Kubernetes Patterns : Capacity Planning
<table>
<tr>
  <td colspan="2"><a href="https://www.magalix.com/blog/kubernetes-patterns-capacity-planning">Kubernetes Patterns : Capacity Planning</a></td>
</tr>
<tr>
  <td><img src="https://www.magalix.com/hubfs/Kubernetes%20Patterns%20-%20Capacity.jpg#keepProtocol"></td>
  <td>When using Kubernetes - especially at a large scale, we need to give due time and effort in anticipating our application resource requirements correctly.</td>
</tr>
</table>

Kubernetesのスケジューラ周りの挙動について述べている。
特にリソースのキャパシティ設定について詳しく紹介している。

KubeletでのQoSコントロール、Preemption priority、SchedulerでのQoSコントロール、Preemption priorityなど設定項目とそれが実施されるケースごとに様々な考慮が必要となる。

## conman - [the] container manager: inception
<table>
<tr>
  <td colspan="2"><a href="https://iximiuz.com/en/posts/conman-the-container-manager-inception/?z=1">conman - [the] container manager: inception</a></td>
</tr>
<tr>
  <td><img src="https://iximiuz.com/conman-the-container-manager-inception/bender.jpg"></td>
  <td>A deep dive into a container manager (aka container runtime) implementation</td>
</tr>
</table>

containerd, cri-o, dockerd, podmanなどのソフトウェアをContainer Managerとしてくくり、それらをさらに深く理解するためにオリジナルの Container Managerを作成し、その過程を記事にしている。

バックエンドとしてはruncを利用しているようだが、それでもちゃんと動くものを作るのは大変そうです。

## Get a LoadBalancer for your private Kubernetes cluster
<table>
<tr>
  <td colspan="2"><a href="https://blog.alexellis.io/ingress-for-your-local-kubernetes-cluster/">Get a LoadBalancer for your private Kubernetes cluster</a></td>
</tr>
<tr>
  <td><img src="https://blog.alexellis.io/content/images/2019/10/sat.jpg"></td>
  <td>Learn how to expose a Service of type LoadBalancer on your local Kubernetes cluster to the internet with inlets-operator.</td>
</tr>
</table>

[inlets-operator](https://github.com/alexellis/inlets-operator/)というKubernetesクラスタの外のVMにKubernetes内のPodにトンネリングできる通信を提供するアプリケーションの紹介。

Serviceのtype=LoadBalancerを作成すると、このオペレータがそれに対応するVMをあらかじめ登録しておいたクラウドプロバイダで払い出してくれる。そのVMにアクセスすることで、結果的にKubernetes内のPodにアクセスができるようになる。

DigitalOceanのVMの使用料がAWSのELBやGCP LoadBalancerよりも安いところに、これを使うモチベーションがあるようだ。

## Using Hashicorp Vault on Kubernetes | Caylent
<table>
<tr>
  <td colspan="2"><a href="https://caylent.com/using-hashicorp-vault-on-kubernetes">Using Hashicorp Vault on Kubernetes | Caylent</a></td>
</tr>
<tr>
  
  <td>Now that you've installed Hashicorp Vault on Kubernetes it's time to create an example using mutual TLS and provision some secrets to our app.</td>
</tr>
</table>

Kubernetesクラスタ上にVaultとConsulを構築し、VaultにKubernetesのServiceAccountの認証を登録することで、Podから簡単にVaultのSecretを取得できるようにする例。
またこの設定をした上でconsul-tamplateを利用することで、シークレット情報を含む設定ファイルを配布する例が紹介されている。

(とはいえ、結構複雑だなと思いました、initConatinerでvault agentを実行し、サイドカーとしてconsul-templateを実行する必要あり。)

## Getting Started with the PLONK Stack and Serverless 2.0
<table>
<tr>
  <td colspan="2"><a href="https://blog.alexellis.io/getting-started-with-the-plonk-stack-and-serverless/">Getting Started with the PLONK Stack and Serverless 2.0</a></td>
</tr>
<tr>
  <td><img src="https://blog.alexellis.io/content/images/2019/10/drop.jpg"></td>
  <td>You've heard of LAMP, JAM, and MEAN, but what is the PLONK stack? And why should you be considering it for your Cloud Native Applications?</td>
</tr>
</table>

PLONKスタックの紹介。
PLONKとはPrometheus, Linkerd, OpenFaaS, NATS, Kubernetesにより構成されるアプリケーションスタックのことです。

この記事ではこれらを解説したプレゼン動画を紹介しています。
（みていない）

## Multitenancy on Kubernetes with Istio, External Authentication Server and OpenID Connect (Part 2— Authorization)
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/hal24k-techblog/multitenancy-on-kubernetes-with-istio-external-authentication-server-and-openid-connect-db1d8d9932eb">Multitenancy on Kubernetes with Istio, External Authentication Server and OpenID Connect (Part 2— Authorization)</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1115/1*qVvCKsTqMRrwj8BPdCUDkw.png"></td>
  <td>Part 2 — Authorization</td>
</tr>
</table>

[先週紹介した記事](https://qiita.com/inajob/items/1d9a797e341a2032740c#multitenancy-on-kubernetes-with-istio-external-authentication-server-and-openid-connect-part-1--authentication)の続き

Kubernetesクラスタ上に複数のサービスを立ち上げて、利用者ごとに認証・認可を設定したい、いわゆるマルチテナントとしての使い方のチュートリアルです。
複数回に分かれて説明されており、今回は認可部分です。

Istioを用いて、認証時に付与されたJWTトークンを元にバックエンドのサービスが期待するHTTPヘッダを挿入ています。
さらに、もう一つの方法としてユーザに応じてURLを変更し、そのURLにアクセスできる権限をIstioで制御する方法も紹介しています。

## Firekube - Fast and Secure Kubernetes Clusters Using Weave Ignite
<table>
<tr>
  <td colspan="2"><a href="https://www.weave.works/blog/firekube-fast-and-secure-kubernetes-clusters-using-weave-ignite">Firekube - Fast and Secure Kubernetes Clusters Using Weave Ignite</a></td>
</tr>
<tr>
  <td><img src="https://www.weave.works/assets/images/blt80be362b7bd724bb/firekube-k8s-minutes.png"></td>
  <td>Weave Firekube is a new open source Kubernetes distribution that enables secure clouds anywhere.   Firekube uses Weave Ignite to run Kubernetes on Firecracker. It pulls everything from Git and boots up a secure cluster in 2.5 minutes.</td>
</tr>
</table>

Weave FirekubeというKubernetesディストリビューションの紹介。
これはWeave Igniteを利用して、Firecrackerを使ってPodを実行するという動作をするKubernetesです。

## salesforce/sloop
<table>
<tr>
  <td colspan="2"><a href="https://github.com/salesforce/sloop">salesforce/sloop</a></td>
</tr>
<tr>
  <td><img src="https://avatars1.githubusercontent.com/u/453694?s=400&v=4"></td>
  <td>Kubernetes History Visualization. Contribute to salesforce/sloop development by creating an account on GitHub.</td>
</tr>
</table>


Kubernetesで何が起きているの履歴をわかりやすく可視化してくれるツール。

こんな感じです↓
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/52deb205-34c1-4c31-6124-821d14150b08.png" width="50%">

## How to use custom Storage Classes in Kubernetes?
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/how-to-use-custom-storage-classes-in-kubernetes-edc568acfdfe">How to use custom Storage Classes in Kubernetes?</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/freeze/max/480/0*UPA5ZdBKXoDJkwqM.gif"></td>
  <td>Most Kubernetes offerings provide default Storage Classes out of the box to ease the process of dynamic storage provisioning.</td>
</tr>
</table>

Azure Kubernetes Serviceを例にStorageClassの設定方法を紹介。
reclaimPolicy, volumeBindingModeなどについて説明している。

# The Editorial

## Kubernetes Operators and Helm — It takes Two to Tango
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@cloudark/kubernetes-operators-and-helm-it-takes-two-to-tango-3ff6dcf65619">Kubernetes Operators and Helm — It takes Two to Tango</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/961/0*spEs8R1ITswI-baZ"></td>
  <td>When it comes to running complex application workloads on Kubernetes two technologies standout — Helm and Kubernetes Operators. In this…</td>
</tr>
</table>

Helm, とKubernetes Operator について紹介し、特にHelmで扱いやすいKubernetes Operator の設計の指針について紹介している。

- Helm chartとしてCRDを作ること（Operatorの中でCRDを作らない）
- Operator のインストールの前にCRDをインストールする
- CRDのYAMLにバリデーションを定義する
- 設定はvalues.yamlまたはConfigMapを使う
- Platform-as-Codeの流儀に従ったannotationをつける
  - これは生成するリソースの種類と、オペレータの利用方法についてをannoationに書いておくという方法のようです。

## What is Kubernetes?
<table>
<tr>
  <td colspan="2"><a href="https://www.techrepublic.com/article/what-is-kubernetes/">What is Kubernetes?</a></td>
</tr>
<tr>
  <td><img src="https://tr4.cbsistatic.com/hub/i/r/2019/01/11/a4895b2a-18cc-41f1-9884-37f68723f7b5/thumbnail/770x578/22bc068684dfa880e7a8c4996fb13466/kubernetes.jpg"></td>
  <td>What makes Kubernetes so special that businesses are clamoring to get their hands around it?</td>
</tr>
</table>

Kubernetesについての紹介。

## "A wild Demogorgon just wrecked your Kubernetes cluster"
<table>
<tr>
  <td colspan="2"><a href="https://engineering.q42.nl/production-incidents-training/">"A wild Demogorgon just wrecked your Kubernetes cluster"</a></td>
</tr>
<tr>
  <td><img src="https://engineering.q42.nl/content/images/2019/10/A-fun-way-of-training-for-production-incidents.png"></td>
  <td>How we introduced a tabletop role-playing game as a fun training method for new team members at our Philips Hue project.</td>
</tr>
</table>

チームメンバーの教育のためにプロダクション環境での障害をロールプレイすることで理解を深めるという勉強法を紹介している。
まるでテーブルトークRPGのような形式で、トラブルシューティングする方法で、それっぽいシナリオは[専用のTwitterアカウント](https://twitter.com/badthingsdaily)でも紹介されているようです。

（問題を出す方の能力が問われそうです・・）

## Announcing Envoy Project Journey Report - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/10/02/announcing-envoy-project-journey-report/">Announcing Envoy Project Journey Report - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://www.cncf.io/wp-content/uploads/2019/10/charts2-07-300x198.jpg"></td>
  <td>Today we are very excited to release our Project Journey Report for Envoy. This is the second reports we have issued  for CNCF graduated projects (the first was Kubernetes). Envoy...</td>
</tr>
</table>

EnvoyのProject Journey Reportの紹介
このレポートはCNCFのgraduated projectについて書かれるもので、初回のKubernetesに続き2回目となっています。

レポート本体は[こちら](https://www.cncf.io/cncf-envoy-project-journey/)

## Announcing Kubernetes Community Days - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/10/03/announcing-kubernetes-community-days/">Announcing Kubernetes Community Days - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://www.cncf.io/wp-content/uploads/2019/10/image1.png"></td>
  <td>We are excited to announce that we’re now accepting applications to run Kubernetes Community Days around the world.  Kubernetes Community Days are community-organized events that gather adopters and technologists from...</td>
</tr>
</table>


Kubernetes Community Daysの紹介。
Kubernetes Community Daysという枠組みでのカンファレンスを開いてみてはどうか？という記事のようです。

より詳しい内容は[こちら](https://kubernetescommunitydays.org/)に記載されています。直近ではノルウェー・オランダで開催されるようです。