KubeWeekly #185

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

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


# The Headlines

## Kubernetes 1.16: Custom Resources, Overhauled Metrics, and Volume Extensions
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/">Kubernetes 1.16: Custom Resources, Overhauled Metrics, and Volume Extensions</a></td>
</tr>
<tr>
  <td><img src="https://kubernetes.io//images/blog/2019-09-18-kubernetes-1-16-release-announcement/mascot.png"></td>
  <td>Authors: Kubernetes 1.16 Release Team
We’re pleased to announce the delivery of Kubernetes 1.16, our third release of 2019! Kubernetes 1.16 consists of 31 enhancements: 8 enhancements moving to stable, 8 enhancements in beta, and 15 enhancements in alpha.
Major Themes Custom resources CRDs are in widespread use as a Kubernetes extensibility mechanism and have been available in beta since the 1.7 release. The 1.16 release marks the graduation of CRDs to general availability (GA).</td>
</tr>
</table>

Kubernetes 1.16がリリースされました。
その概要について紹介しています。

- Custom ResourcesがGAとなった
- metricsのオーバーホールが完了
- ボリューム拡張がベータに昇格
- Windows向けの機能追加
- Endpoint Slicesというスケール問題に対応したEndpointの代替となる機能がAlphaリリース
- Topology ManagerというあたらしいKubeletのコンポーネントが追加されました。
- PodやServiceにIPv4とIPv6のDual-stackのアドレスを使うことができるようになりました。
- 古いAPIVersionが廃止されました。extensions/v1beta1, apps/v1beta1, apps/v1beta2

## Kubernetes veteran, Tim Hockin: In software, people are always wrong • DEVCLASS
<table>
<tr>
  <td colspan="2"><a href="https://devclass.com/2019/09/13/kubernetes-veteran-in-software-people-are-always-wrong/">Kubernetes veteran, Tim Hockin: In software, people are always wrong • DEVCLASS</a></td>
</tr>
<tr>
  <td><img src="https://devclass.com/wp-content/uploads/2019/08/shutterstock_322134125.jpg"></td>
  <td>Kubernetes' Tim Hockin sits down with DevClass to talk about being always wrong and the day to day business of one of the most popular open source projects.</td>
</tr>
</table>

Kubernetesの開発者の一人であるTim Hockinへのインタビュー記事。
Kubernetesに拡張性を持たせている理由や、今後Kubernetesをどのように改善していくか　といった話について述べている。

# The Technical

## Announcing Istio 1.3
<table>
<tr>
  <td colspan="2"><a href="https://istio.io/blog/2019/announcing-1.3/">Announcing Istio 1.3</a></td>
</tr>
<tr>
  <td>Istio 1.3 release announcement.</td>
</tr>
</table>

Istioの1.3がリリースされました。

- 実験的な機能として、プロトコルの自動判別機能や、Mixerを介さずにメトリクスを取得する方法などが実装されました。
- containerPortを明示する必要がなくなりました。
- Envoyをより柔軟に設定できるようになりました。
- などなど

## Docker Security 101: Risks and 33 Best Practices · StackRox: Security for Containers and Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://www.stackrox.com/post/2019/09/docker-security-101/">Docker Security 101: Risks and 33 Best Practices · StackRox: Security for Containers and Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://res.cloudinary.com/stackrox/v1568398512/docker-security-101-blog-banner_ffue3d.jpg"></td>
  <td>Learn about Docker container security challenges as well as best practices for hardening Docker and protecting containers during runtime</td>
</tr>
</table>

- Dockerのセキュリティを強化するために気を気を配るべき8項目
- Dockerのセキュリティのための26のベストプラクティス
- Kubernetesのセキュリティのための7つのベストプラクティス
- セキュリティ監査に役立つ11のセキュリティに関する質問

## Setting up a CI/CD pipeline w/ Jenkins, Nexus, Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://kublr.com/blog/cicd-pipeline-with-jenkins-nexus-kubernetes/">Setting up a CI/CD pipeline w/ Jenkins, Nexus, Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://kublr.com/wp-content/uploads/2019/09/Setting-up-a-CICD-pipeline-with-Jenkins-Nexus-and-Kubernetes-1.png"></td>
  <td>This tutorial walks you through the steps needed to set up a comprehensive CI/CD pipeline with Jenkins, Nexus and Kubernetes.</td>
</tr>
</table>

Kubernetesクラスタ上にJenkinsとNexusを構築しCI/CDを実現する方法の紹介。

## Monitoring Prow Resources with Prometheus and Grafana
<table>
<tr>
  <td colspan="2"><a href="https://www.loodse.com/blog/monitoring-prow-resources-with-prometheus-and-grafana/">Monitoring Prow Resources with Prometheus and Grafana</a></td>
</tr>
<tr>
  <td><img src="https://www.loodse.com/images/blog/2019-09-10/image5.png"></td>
  <td>

At Loodse we’re making extensive use of Prow, Kubernetes’ own CI/CD framework, for our public and private projects. Prow is responsible for managing …</td>
</tr>
</table>

Prowを動かしているKubernetesクラスタをPrometheusでメトリクス収集し、Grafanaで可視化する方法を紹介。
PrometheusのデプロイにはPrometheus Operatorを利用している。

また可視化により、適切なResourceのRequestやLimitの設定について得られた知見などが紹介されている。

## How to Release Faster with Continuous Delivery for Google Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://semaphoreci.com/blog/continuous-delivery-google-kubernetes">How to Release Faster with Continuous Delivery for Google Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://semaphoreci.com/wp-content/uploads/2019/09/sem-kubernetes.png"></td>
  <td>In this tutorial, we’ll learn how to set up a continuous delivery pipeline for Google Kubernetes using Semaphore CI/CD.</td>
</tr>
</table>

GKEに対して[Semaphore CI/CD](https://semaphoreci.com/)をつかってアプリケーションをデプロイする方法を紹介。

## How I passed my CKAD with 97%
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@kgamanji/how-i-passed-my-ckad-with-97-6b54dcffa72f">How I passed my CKAD with 97%</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/0*Ed9RtUdDsw9wAVs1"></td>
  <td>In August 2019, I have undergone the Certified Kubernetes Application Developer (CKAD) examination. I have scored an astonishing 97%! As a…</td>
</tr>
</table>

CKADを97%という成績でクリアした人による攻略法についての記事

## Kubernetes and Python
<table>
<tr>
  <td colspan="2"><a href="https://srcco.de/posts/kubernetes-and-python.html">Kubernetes and Python</a></td>
</tr>
<tr>
  <td><img src="https://srcco.de/galleries/python-logo.png"></td>
  <td>While Go is the language-of-choice in the cloud-native world, Python has a huge community and makes it really easy to extend Kubernetes in only a few lines of code.
This post is a follow-up to a talk </td>
</tr>
</table>

"Kubernetes + Python = ❤" というテーマの記事

- PythonのWebサービスを作る際のGraceful Shutdownについてのやり方
- PythonからKubernetesのAPIを呼び出すライブラリの紹介
- PythonでのOperatorの作り方
- PytestとKindを使ったテストのやり方

## containers/podman-compose
<table>
<tr>
  <td colspan="2"><a href="https://github.com/containers/podman-compose">containers/podman-compose</a></td>
</tr>
<tr>
  <td><img src="https://avatars1.githubusercontent.com/u/5874934?s=400&v=4"></td>
  <td>a script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.</td>
</tr>
</table>

[podman](https://podman.io/)を利用してdocker-composeを実現するためのスクリプト。

## [An Introduction to Kustomize](https://blog.scottlowe.org/2019/09/13/an-introduction-to-kustomize/)

kustomizeの紹介。

## Unleash the power within your Kubernetes Helm Charts
<table>
<tr>
  <td colspan="2"><a href="https://itnext.io/unleash-the-power-within-your-kubernetes-helm-charts-7651b052fd52">Unleash the power within your Kubernetes Helm Charts</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/488/1*sVQgily0GYs-ZxKzzd3v2Q.png"></td>
  <td>A few chart tricks I wish I knew when I get started with K8S. They completely changed our infrastructure automation philosophy.</td>
</tr>
</table>

Kubernetesを使ったオペレーション作業の自動化を段階別に紹介している。
Helmとタイトルにはあるが、あまりHelmに特化した内容は見られない。

- サードパーティのオペレータとCRDを使った方法
- Init-Containerを使った方法
- Jobを使った方法
- オペレータを作る方法

## What's new in Kubernetes 1.16? | Sysdig
<table>
<tr>
  <td colspan="2"><a href="https://sysdig.com/blog/whats-new-kubernetes-1-16/">What's new in Kubernetes 1.16? | Sysdig</a></td>
</tr>
<tr>
  <td><img src="https://sysdig.com/wp-content/uploads/2019/09/1019.09_Kubernetes_1.16.jpg"></td>
  <td>What's new in Kubernetes 1.16: Ephemeral containers for easy pod debugging, support for dual-stack network, new options for the scheduler and much more.</td>
</tr>
</table>

恒例のSysdig社によるKubernetes 1.16 変更点紹介
重要な機能変更についてPRのリンク付きで紹介されており、さっと変更点を確認する上で非常に有用そうです。

ざっと見出しだけ並べると↓のような感じです。　興味のあるトピックはぜひ、原文やPRを辿ってみてください。

- (alpha) debug目的でコンテナをPodに後付けできる Ephemeral containers (CLIから利用できるようになるのはもう少し先)
- (alpha) PodのIPv4/IPv6のデュアルスタック対応
- (alpha) 新しいEndpoint APIである　”EndpointSlice API”
- (alpha) Podが利用するリソースのうち、ランタイムにより発生する部分について指定することができる ”Pod overhead”
- (alpha) failure domainにまたがってPodを散らして配置できるようになる "topologySpreadContainers"
- (alpha) liveness-proveの前のチェック "startupProbe"
- (alpha) より細かいリソース要求に応じたスケジュールリング指示を出すための "RequestedToCapacityRatioPriority"
- (beta) RuntimeClassによるスケジューリング。
- (alpha) kubeadm for Windows
- (alpha) RunAsUserName for Windows
- (beta) Support GSMA for Windows workloads
- (stable) Admission webhookで他のWebhookでリソースが変更された場合に再実行をする機能
- (beta) watch bookmark
- (alpha) Node topology manager
- (alpha) kubeadmでkustomizeが利用できるように
- (beta) Server-side apply
- (beta) LoadBalancerリソースにFinalizer
- (beta) AzureのAZラベルが付与されるようになった
- (stable) [Azure] Cross resource group nodes
- (alpha) Support CSI plugins in Windows
- (beta) PVCDataSourceによるクローン
- (beta) CSI Volumeのリサイズ
- (beta) CSI inline volume
- (stable) CustomResoureceDefinitions
- (stable) Subresources for custom resoureces
- (stable) Defaulting and pruning for custom resources
- (stable) Webhook converson for custom resoureces
- (stable) Publish CRD OpenAPI Schema
- Deprecations
  - SelfLinkフィールド
  - in-tree cloud-provider
  - metrics overhaul

# The Editorial

## [Amazon EKS Security Best Practices](https://www.stackrox.com/post/2019/09/amazon-eks-security-best-practices/)

EKSを使う上でのセキュリティベストプラクティス。
EKS独自のネットワークプラグインのセキュリティ上の問題点や、Metadata APIへのアクセスを制限するなど。

## An Inside Look at GitOps - DevOps.com
<table>
<tr>
  <td colspan="2"><a href="https://devops.com/an-inside-look-at-gitops/">An Inside Look at GitOps - DevOps.com</a></td>
</tr>
<tr>
  <td><img src="https://devops.com/wp-content/uploads/2019/09/Inside-Look-GitOps.jpg"></td>
  <td>In its most basic form, GitOps is infrastructure and operational procedures defined as code, and living in a source control system, such as Git.</td>
</tr>
</table>

GitLabの社員によるGitOpsの紹介。本番環境を直接操作することは、GitOpsよりも簡単でついついやりがちですが、そういう“cowboy engineering”を減らすことがGitOps導入においては重要とのこと。

## Tips for Using Kubernetes in Large Enterprises - insideBIGDATA
<table>
<tr>
  <td colspan="2"><a href="https://insidebigdata.com/2019/09/13/tips-for-using-kubernetes-in-large-enterprises/">Tips for Using Kubernetes in Large Enterprises - insideBIGDATA</a></td>
</tr>
<tr>
  <td><img src="https://insidebigdata.com/wp-content/uploads/2019/03/big-data-science_SHUTTERSTOCK.jpg"></td>
  <td>In this contributed article, technology writer Gilad David Maayan provides a clear and concise overview of Kubernetes, the darling of the DevOps community. He then offers a number of useful tips for using Kubernetes on an enterprise scale.</td>
</tr>
</table>

エンタープライズでKubernetesを導入するためのTips

- マネージドサービスを検討する
- セキュリティに気を配る
- ログとモニタリング
- カスタムコントローラを利用する

## Mistake that cost thousands (Kubernetes, GKE)
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@gajus/mistake-that-cost-thousands-kubernetes-gke-2212ea663e1f">Mistake that cost thousands (Kubernetes, GKE)</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/880/0*lMcvOzgXTglVXS78.png"></td>
  <td>Lessons learned scaling Kubernetes cluster</td>
</tr>
</table>

GKEでの筆者の失敗談の共有。

600vCPU程度を利用するKubernetesクラスタで、ピーク時は倍ほどリソースを使い、また0に近くなるような時間帯も存在するようなクラスタです。
また、HPAやCluster Autoscaleも利用しています。

このようなクラスタを構成するときに1vCPUの小さなマシンをつかっていたようですが、これがよくなかったようです。
急なバースト時にNodeの増加が間に合わない事象が起きてしまい、結果PodのResource Requestを増やす羽目になり、そのためにidle状態の小さなVMに対してお金を払う羽目になってしまっていました。

対策としてはv16CPUの少し大きなVMを使うことにしたようです。これにより全体のコストを抑えることができたそうです。