KubeWeekly #176

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

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


# The Headlines

## Last Week in Kubernetes Development
<table>
<tr>
  <td colspan="2"><a href="http://lwkd.info/">Last Week in Kubernetes Development</a></td>
</tr>
<tr>
  
  <td>Stay up-to-date on Kubernetes development in 15 minutes a week.</td>
</tr>
</table>

Kubernetesの開発状況を毎週紹介しているブログ

## zee-ahmed/kube-rclone
<table>
<tr>
  <td colspan="2"><a href="https://github.com/zee-ahmed/kube-rclone">zee-ahmed/kube-rclone</a></td>
</tr>
<tr>
  <td><img src="https://avatars0.githubusercontent.com/u/10401290?s=400&v=4"></td>
  <td>kube-rclone is a rclone mount solution for Kubernetes - zee-ahmed/kube-rclone</td>
</tr>
</table>

Kubernetesクラスタの各NodeにGoogle Driveなどのクラウドサービスのストレージをマウントするためのアプリケーション。

# The Technical

## Kubernetes at DH: A journey from YAML headaches to Helm bliss - Delivery Hero Tech
<table>
<tr>
  <td colspan="2"><a href="https://tech.deliveryhero.com/kubernetes-at-dh-a-journey-from-yaml-headaches-to-helm-bliss/">Kubernetes at DH: A journey from YAML headaches to Helm bliss - Delivery Hero Tech</a></td>
</tr>
<tr>
  <td><img src="https://tech.deliveryhero.com/wp-content/uploads/2019/06/ihor-dvoretskyi-1471315-unsplash.jpg"></td>
  <td>You must have been living under a rock if you haven’t heard the Kubernetes (k8s) hype over the last few years. It has quickly become the platform of choice for running applications for many modern tech companies and Delivery Hero is one of them. What is unique about DH, is that some of our tech …</td>
</tr>
</table>

Kubernetesで苦労するYAMLの管理の問題について、Helm, Helmfileを使った管理方法を紹介している。
また適用前に差分を見ることができるhelm-diffや、クラウドプロバイダのKMSからSecretを埋め込み得るhelm-secretsなどのプラグインについても紹介している。

## How to Set Up a Prometheus, Grafana and Alertmanager Monitoring Stack on DigitalOcean Kubernetes | DigitalOcean
<table>
<tr>
  <td colspan="2"><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-stack-on-digitalocean-kubernetes">How to Set Up a Prometheus, Grafana and Alertmanager Monitoring Stack on DigitalOcean Kubernetes | DigitalOcean</a></td>
</tr>
<tr>
  <td><img src="https://community-cdn-digitalocean-com.global.ssl.fastly.net/assets/tutorials/images/large/kubernetes_tutorials.png?1562792674"></td>
  <td>Along with tracing and logging, monitoring and alerting are essential components of a Kubernetes observability stack. Setting up monitoring for your Kubernetes cluster allows...</td>
</tr>
</table>

KubernetesクラスタにPrometheus,Grafana,AlertManagerをデプロイする方法の紹介。

## How To Set Up the code-server Cloud IDE Platform on DigitalOcean Kubernetes | DigitalOcean
<table>
<tr>
  <td colspan="2"><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-the-code-server-cloud-ide-platform-on-digitalocean-kubernetes">How To Set Up the code-server Cloud IDE Platform on DigitalOcean Kubernetes | DigitalOcean</a></td>
</tr>
<tr>
  <td><img src="https://community-cdn-digitalocean-com.global.ssl.fastly.net/assets/tutorials/images/large/kubernetes_tutorials.png?1562963863"></td>
  <td>With developer tools moving to the cloud, creation and adoption of cloud IDE (Integrated Development Environment) platforms is growing. code-server is Microsoft Visual Studio Code running on a remote server and accessible directly from your browser. I</td>
</tr>
</table>

code-server Cloud IDE Platform をKubernetes上にデプロイする方法の紹介
cert-managerをつかってTLSでサービスを公開する方法も紹介している。

## How To Do Canary Deployments With Istio and Kubernetes | DigitalOcean
<table>
<tr>
  <td colspan="2"><a href="https://www.digitalocean.com/community/tutorials/how-to-do-canary-deployments-with-istio-and-kubernetes">How To Do Canary Deployments With Istio and Kubernetes | DigitalOcean</a></td>
</tr>
<tr>
  <td><img src="https://digitalocean.cdn.prismic.io/digitalocean%2Ff7af7f25-db78-40d1-ad9f-7b1c23366b02_kubernetes.svg"></td>
  <td>When introducing new versions of a service, it is often desirable to shift a controlled percentage of user traffic to a newer version of the service in the process of phasing out the older version. This technique is called a canary deployment. In this</td>
</tr>
</table>

istioををつかってカナリーリリースを行う方法を紹介。

## Kubernetes Policy Management with Kyverno | nirmata
<table>
<tr>
  <td colspan="2"><a href="https://www.nirmata.com/2019/07/11/managing-kubernetes-configuration-with-policies/">Kubernetes Policy Management with Kyverno | nirmata</a></td>
</tr>
<tr>
  <td><img src="https://www.nirmata.com/wp-content/uploads/2018/08/img-logo.png"></td>
  <td></td>
</tr>
</table>

KyvernoというKubernetesのPolicyを管理するツールの紹介。
Admission-Controlを簡単に設定することができるツールのようだ。

## Kubernetes Pods 101: The Cluster Sailors
<table>
<tr>
  <td colspan="2"><a href="https://www.magalix.com/blog/kubernetes-pods-101-the-cluster-sailors">Kubernetes Pods 101: The Cluster Sailors</a></td>
</tr>
<tr>
  <td><img src="https://www.magalix.com/hubfs/containers%20in%20separate%20kubernetes%20pods-1.jpg#keepProtocol"></td>
  <td>A pod is the smallest building unit in a Kubernetes cluster. Learn how to create, manage and kill pods in your Kubernetes adoption journey. </td>
</tr>
</table>

Kubernetesで一番重要なリソースであるPodの説明。

## Fire Up Your VMs with Weave Ignite
<table>
<tr>
  <td colspan="2"><a href="https://www.weave.works/blog/fire-up-your-vms-with-weave-ignite">Fire Up Your VMs with Weave Ignite</a></td>
</tr>
<tr>
  <td><img src="https://www.weave.works/assets/images/bltb9209f1e83665854/ignite-banner.png"></td>
  <td>For the last few months we have been playing with a little side project called “Ignite”. Ignite is a GitOps-managed Virtual Machine (VM) with a container UX. A “container VM” that is both secure and lightning fast.</td>
</tr>
</table>

igniteというFireclackerをつかったVMをGitOpsで管理するためのツールの紹介。
高速にVMを作ることができるようです。

## Deploy Your Machine Learning Models with Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://blog.cnvrg.io/deploy-models-with-kubernetes">Deploy Your Machine Learning Models with Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://cnvrg.io/wp-content/uploads/2019/01/Copy-of-Copy-of-_itc_-5.png#keepProtocol"></td>
  <td>With just a single click, a data scientist can create a production-ready environment that can serve millions of requests to their model.</td>
</tr>
</table>

kerasを使った機械学習のアプリケーションをKubernetesにデプロイする方法の紹介。
また、これをさらに簡単にする自社製品の紹介。

## Internal and external connectivity in Kubernetes space
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@metaphorical/internal-and-external-connectivity-in-kubernetes-space-a25cba822089">Internal and external connectivity in Kubernetes space</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/1*kwzSoapGCmltYvOKW45-Yw@2x.jpeg"></td>
  <td>Services and networking — from ClusterIP to Ingress</td>
</tr>
</table>

ServiceやIngressといったKubernetes内外のPodへのアクセス方法のまとめ。
図解がわかりやすい。

## Kubernetes, etcd and disk throughput - Ricard Bejarano
<table>
<tr>
  <td colspan="2"><a href="https://blog.bejarano.io/kubernetes-etcd-and-disk-throughput.html">Kubernetes, etcd and disk throughput - Ricard Bejarano</a></td>
</tr>
<tr>
  
  <td>TL;DR: ensure sufficient disk read and write speeds for your etcd cluster nodes. Any minimally decent hard drive will do, but don't put /var/lib/etcd on a thumb drive.</td>
</tr>
</table>

Kubernetesクラスタを、勉強のために作っていた人が、詰まった箇所とその原因を記している。
NetworkPolicyなどで動かないなど、結構マイナーなケースに遭遇しており、最後のトラブルはetcdが利用しているディレクトリがUSBドライブとなっておりdisk I/Oが遅すぎてうごかない、というこれまたマイナーなケース。

# The Editorial

## Announcing Linkerd 2.4: Traffic Splitting and SMI
<table>
<tr>
  <td colspan="2"><a href="https://linkerd.io/2019/07/11/announcing-linkerd-2.4/">Announcing Linkerd 2.4: Traffic Splitting and SMI</a></td>
</tr>
<tr>
  <td><img src="https://linkerd.io/uploads/highway-split.jpg"></td>
  <td>Today we’re happy to announce the release of Linkerd 2.4. This release adds traffic splitting and Service Mesh Interface (SMI) support, graduates high-availability support out of experimental status, and includes a tremendous list of other improvements, performance enhancements, and bug fixes.
(And did I mention Linkerd recently passed its third party security audit with flying colors?)
Linkerd’s new traffic splitting feature allows users to dynamically control the percentage of traffic destined for a service.
</td>
</tr>
</table>

Linkerd 2.4で実装されたTraffic SplittingとSMIのの紹介。
FlaggerもLinkerdを扱えるようになり、自動カナリーリリースなども実現できるようになった。
HAモードもProduction Readyのステータスとなった。

## 33 Kubernetes security tools. | Sysdig
<table>
<tr>
  <td colspan="2"><a href="https://sysdig.com/blog/33-kubernetes-security-tools/">33 Kubernetes security tools. | Sysdig</a></td>
</tr>
<tr>
  <td><img src="https://sysdig.com/wp-content/uploads/2019/07/33_kubernetes_security_tools_header.png"></td>
  <td>The ultimate Kubernetes security tools list: Image scanning, container compliance, runtime security, e2e commercial platforms, network security and more</td>
</tr>
</table>

33個ものKubernetesのセキュリティ周りのツールを紹介している。

- イメージスキャナ
- ランタイムのセキュリティ 
- ネットワークのセキュリティ
- コンテナイメージの配布と秘密データの管理
- セキュリティ監査
- 全部入りのE2Eのセキュリティソリューション

## How to work with container backups
<table>
<tr>
  <td colspan="2"><a href="https://www.techrepublic.com/article/how-to-work-with-container-backups/">How to work with container backups</a></td>
</tr>
<tr>
  <td><img src="https://tr3.cbsistatic.com/hub/i/r/2017/07/27/100670af-5972-461f-aad2-7af841b008a6/thumbnail/770x578/340c6171fa5eeda8f30dd0ec2d892929/olm26250istock-516764040.jpg"></td>
  <td>Containers require different backup procedures than traditional servers or even virtual machines, but it's going to take a while for the new ways to be sorted out.</td>
</tr>
</table>

コンテナ時代に新たなバックアップ手段が求められており、そういうベンチャーも出てきているよという話。

## Preserve Kubernetes API Objects While They Are in Use
<table>
<tr>
  <td colspan="2"><a href="https://www.ibm.com/cloud/blog/new-builders/preserve-kubernetes-api-objects-while-they-are-in-use">Preserve Kubernetes API Objects While They Are in Use</a></td>
</tr>
<tr>
  <td><img src="https://1.cms.s81c.com/sites/default/files/styles/ibm_cloud_wide_background/public/2019-05-15/Leadspace-903139806%20%281%29.jpg?itok=N0b4aK4T"></td>
  <td></td>
</tr>
</table>

Kubernetesのコントローラを自作する際に、依存関係のある2つのリソースを扱う方法について紹介している。

2つのリソース`Provider`と`Dependent`があり、DependentはProviderに依存している。
Providetが指し示すDependentは必ず存在することを保証したい。というようなシチュエーションを実現するためにどうすれば良いかという話。

admission-controllerでDependant作成時に依存しているProviderが存在するかをチェックし、かつ、Providerの削除時に依存されているDependantが存在しないかをチェックするという方法が真っ先に思いつくが、これは特定のシナリオでうまく動かない。

そこで、この記事が紹介しているのはFinalizerを利用する方法である。
Kubernetesの仕組みでは複数のリソースの操作に関するトランザクションを生成することができないので、2つ以上のリソースについてつじつまが合うように更新する際には工夫が必要である。

## Demystifying Containers – Part II: Container Runtimes - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.suse.com/c/demystifying-containers-part-ii-container-runtimes/">Demystifying Containers – Part II: Container Runtimes - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://www.suse.com/c/wp-content/uploads/2019/06/cncf-landscape.png"></td>
  <td>  This blog post was first published on suse.com by Sascha Grunert. This series of blog posts and corresponding talks aims to provide you with a pragmatic view on containers from...</td>
</tr>
</table>

歴史的な流れを含めてクラウドのアーキテクチャをレイヤーごとに紹介していくブログ記事のPart2

今回はコンテナランタイム。LXC,docker そしてOCIとその実装であるrunc、さらにそれより高いレイヤーのインターフェースであるCRIとその実装であるCRI-Oについて、実際の使い方を含めて紹介している。