KubeWeekly #143

KubeWeeklyは毎週Kubernetesに関する興味深いニュースを提供しています。この記事は 2018/08/01に公開された https://kubeweekly.com/kubeweekly-143/ を読んで、感じたことをメモ的にまとめたものです。
私の勘違いや説明不足による誤解もあるかと思いますので、この記事読んで「おっ」と思ったらURLを辿って本文を確認してください。

# The Headlines
## [KubeVirt: Extending Kubernetes with CRDs for Virtualized Workloads - Kubernetes](https://kubernetes.io/blog/2018/07/27/kubevirt-extending-kubernetes-with-crds-for-virtualized-workloads/)

KubeVirtというKubernetesを使ってVMを作る仕組について、 Kubernetesをどのように拡張したかを説明した記事。

- CRD
  - VMをPodと同じように扱えるように設計できる
- ValidatingAdmissionWebhook
  - CRD生成時のバリデーション
- CRD OpenAPIv3 Validation
  - 同じくバリデーション
- MutatingAdmissionWebhook
  - デフォルト値の自動埋め込み
- Subresources for CRD
  - ワークアラウンドでaggregated APIを使っている
- CRD Finalizers
  - CRD削除時の処理
- API Versioning for CRDs
  - バージョン変換周りが未実装なので、実装待ち

## [CNCF to Host Harbor in the Sandbox - Cloud Native Computing Foundation](https://www.cncf.io/blog/2018/07/31/cncf-to-host-harbor-in-the-sandbox/)

CNCFがコンテナレジストリのHarborをSandboxとして承認した。
HarborはVMWareが Docker Distributionを拡張して作ったもの

中国の企業が多く使っているからか、中国語が併記されているのが印象的な記事でした。

## [Edge Computing at Chick-fil-A – Chick-fil-A Tech Blog – Medium](https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2)

チキンサンドイッチ店 Click-fil-Aは各店舗にコンピュータを配備して、それらを使って多数のKubernetesクラスタを作っている。（詳細は別記事 [Bare Metal K8s Clustering at Chick-fil-A Scale – Chick-fil-A Tech Blog – Medium](https://medium.com/@cfatechblog/bare-metal-k8s-clustering-at-chick-fil-a-scale-7b0607bd3541)）
なぜそのようなことをしているのか？　という記事

レストランで動作するIoT機器のEdgeComputing基盤としてKubernetesを使おうという話のようです。PoSと連携して、ML技術を用いて適切な指示を出すなどして、レストランのサービス品質を向上したり、細かいメトリクスを収集して、中央に集約するなどの用途を想定しているらしい。

GKE On-Premにも興味があるというところで、EdgeComputing基盤としてのKubernetesの事例として面白いと感じた。

# The Technical

## [NFS Persistent Volumes with Kubernetes — A Case Study](https://medium.com/platformer-blog/nfs-persistent-volumes-with-kubernetes-a-case-study-ce1ed6e2c266)

GCPにてReadWriteManyの要件を満たすNFSを用意するテクニックについて。GCPのPersistentVolumeはReadWriteManyに対応していない。
Google Filestoreは1TBがミニマムでしかも高い。

ということでNFSサーバを立てる。
GCPのPersistentVolumeをマウントしたNFSサーバをPodとしてKubernetesクラスタにデプロイする。

データを共有したいPodは上記NFSサーバをマウントする。これでReadWriteManyが実現できる。

## [Build a Machine Learning Testbed Based on Kubernetes and Nvidia GPU - The New Stack](https://thenewstack.io/build-a-machine-learning-testbed-based-on-kubernetes-and-nvidia-gpu/)

GPUが使える、シングルNodeのKubernetes作成方法のチュートリアル。
nvidia-docker、nvidia-kubernetsをセットアップする。

作り方はnvidia-kubernetesのkubeadmを使うだけなので、普通のKubernetesクラスタとほとんど同じ。

## [Introduction to Knative – Paul Czarkowski – Medium](https://medium.com/@pczarkowski/introduction-to-knative-b93a0b9aeeef)

knativeの説明。
Build,Serving,Eventing に分けて、簡単な使い方の説明

Buildでは、dockerコンテナのビルドの指示が出せます。例ではKanicoを使っているため特権は必要なくイメージをビルドできるとのことです。

ServingではIstioを使って、ワークロードをうまいこと動かすようです。負荷に応じたスケーリングや、リクエストが来ない場合は0にスケールするなどもやってくれます。

Eventingでは、生産者消費者モデルで、処理を実現することができます。PivotalのRiffというプロジェクトがベースになっているようです。

（Eventを定義できるのはわかったが、これがどのようにServingしているサービスと連携するのかはこの記事からはよくわからなかった。）

## [Deploying a Stateful Application on Google Cloud Kubernetes Engine | @RisingStack](https://blog.risingstack.com/deploying-a-stateful-application-on-google-cloud-kubernetes-engine/)

先週読んだ

## [Creating Kubernetes clusters using kubeadm – Nikita Kokitkar – Medium](https://medium.com/@nikkikokitkar/creating-kubernetes-clusters-using-kubeadm-f46d331a2405)

EC2上にkubeadmでクラスタを作るチュートリアル。極めて普通のチュートリアル。ファイアーウォールの設定例が書いてあるのは参考になりそう。

## [Kubernetes API proxy with Pipeline · Banzai Cloud](https://banzaicloud.com/blog/pipeline-kube-proxy/)

Banzai Cloudというmanaged kubernetesサービスで、kubedashboardなどの認証を実現するためのプロキシを用意する方法。
Kubernetesクラスタの外にOAuth認証をするプロキシを設置する機能があるようだ。そこで権限管理や、Auditログを残すなどの処理もできる。

## [Connecting to a kafka cluster running in kubernetes](https://medium.com/@valercara/connecting-to-a-kafka-cluster-running-in-kubernetes-7601ae3a87d6)

kubernetes上にデプロイしたkafkaにラップトップからアクセスする方法。単にkubectl proxyをするだけではだめで、iptablesにDNATの設定を入れる必要がある。
kafkaのクライアントが、kafka brokerにアクセスしに行こうとするがそのIPがk8sの内部のものとなっているからということらしい。

もう一つの方法としてTelepresenceを使う方法も紹介されている。

## [Synchronizing Kubernetes Secrets with LastPass – Upside Engineering Blog](https://engineering.upside.com/synchronizing-kubernetes-secrets-with-lastpass-584d564ba176)

LastPassにいれたSecretをKubernetsのSecretとしてデプロイするためのワークフローの紹介。
kexpand [GitHub - kopeio/kexpand](https://github.com/kopeio/kexpand) というテンプレートのためのCLIとLastPassのCLIであるlpassを利用している。

家のKubernetesクラスタのSecretなどはこの方法で管理するのはありかな、と思った。

## [How to deploy Laravel Application to Kubernetes – Playa Unimatrix Zero – Medium](https://medium.com/iplaya/how-to-deploy-laravel-application-to-kubernetes-9bc81d46eedf)

PHPのフレームワークであるLaravelを使ったアプリケーションをKubernetesにデプロイするチュートリアル

ark([GitHub - richdynamix/arc: Production ready docker based development environment for your Laravel project.](https://github.com/richdynamix/arc)) というLaravelのアプリケーションをコンテナ化するユーティリティを使う。

## [Configuring permissions in Kubernetes with RBAC – Containerum – Medium](https://medium.com/containerum/configuring-permissions-in-kubernetes-with-rbac-a456a9717d5d)

KubernetsのRBACの紹介。Role, RoleBinding, ClusterRole,ClusterRoleBinding

## [A Deep Dive into Kubernetes Metrics — Part 5: etcd metrics](https://blog.freshtracks.io/a-deep-dive-into-kubernetes-metrics-part-5-etcd-metrics-6502693fa58)

A Deep Dive into Kubernetes Metrics シリーズのPart5
etcdのメトリクスに関しての説明。

- Leaderの存在確認、Leaderの入れ替わり頻度の確認
- 書き込み（Proposal）の失敗数が多いかどうか
- ディスク書き込みの待ち時間が多いかどうか
- GRPCの失敗割合が多いかどうか

PromQLでアラートの設定が載っているので非常に参考になる。
他のPartも見ておきたい

# The Editorial

## [Is it time to start climbing the ladder to Kubernetes? | Network World](https://www.networkworld.com/article/3290462/linux/is-it-time-to-start-climbing-the-ladder-to-kubernetes.html)

Kubernetesの紹介
そろそろ使っておいた方が良いよ みたいなことが書いてある

## [Deploy a Distributed AI Stack to Kubernetes – Jay Johnson – Medium](https://medium.com/@jay.p.h.johnson/deploy-a-distributed-ai-stack-to-kubernetes-6b81bf6ebb0)

オンラインゲームのハッキングやチートを検出するためのAI基盤をKubernetes上に作っている話。

[GitHub - jay-johnson/deploy-to-kubernetes: Set up your own Kubernetes cluster on Ubuntu and deploy a distributed AI stack - works locally and on AWS](https://github.com/jay-johnson/deploy-to-kubernetes)

これを使えば、誰でも同じようなAI基盤が作れるようだ。

## [Celebrating Istio service mesh project at 1.0 and what it means for the Kubernetes community | CoreOS](https://coreos.com/blog/celebrating-istio-service-mesh-1-0-kubernetes-community)

Istioが1.0になったよ！という記事
RedHatとしてはまだproduction readyではない みたいなことが書いてある。

## [MultiCloud — It’s just the beginning – Lawrence Manickam – Medium](https://medium.com/@lawrence143/multicloud-its-just-the-beginning-6ed1b1d279ce)

マルチクラウドについて、気にすべき点など
(あまりちゃんと読んでない)

## [Continuous Integration and Deployment in Kubernetes - The New Stack](https://thenewstack.io/continuous-integration-and-deployment-in-kubernetes/)

PodCastの紹介。
（聞いていない）

## [Orchestrating production-grade workloads with Azure Kubernetes Service | Blog | Microsoft Azure](https://azure.microsoft.com/en-us/blog/orchestrating-production-grade-workloads-with-azure-kubernetes-service/)

AzureのKubernetes環境の紹介

- Azure Dev Spaces
- ACI Coonector (virtual kubelet)
- Azure Container Registry
- Supporting Istio , Linkerd

さらに、IoT Edgeとしての活用方法として

IoT Edge connector (virtual kubelet implementation)の紹介をしている。

最後に機械学習基盤としてのAKSの紹介をしている。

virtual kubeletを使って、なんでもKubernetesで制御しようとしているのは面白いアプローチだと感じた。

## [Container Attached Storage (CAS)— A video primer – MayaData – Medium](https://medium.com/mayadata/container-attached-storage-cas-a-video-primer-1917bf05855d)

CASの実装の一つであるOpenEBSをという仕組みを紹介している。

CASについては [Container Attached Storage: A Primer - Cloud Native Computing Foundation](https://www.cncf.io/blog/2018/04/19/container-attached-storage-a-primer/) に説明があるとのこと

 Container Attached Storageの対義語はshared storageのようだ。コンテナが利用するボリュームごとにストレージのコントローラが存在するようなタイプの共有ストレージのことを指しているようだ。

## [Introducing a 'Security Mesh' to Protect Kubernetes - Container Journal](https://containerjournal.com/2018/07/27/introducing-a-security-mesh-to-protect-kubernetes/)

Security Meshという考え方について。
Service Meshのレイヤーでセキュリティ関係の処理をすることをこう呼んでいるのだろうか？

## [Evolution of PaaSes to Platform-as-Code in Kubernetes world](https://itnext.io/evolution-of-paases-to-platform-as-code-in-kubernetes-world-74464b0013ca)

Kubernetesを利用して caastle（[GitHub - cloud-ark/caastle: Full-stack microservices development & deployment tool for Google Kubernetes Engine and Amazon Elastic Container Service](https://github.com/cloud-ark/caastle) ）というPlatform as Code を実現した話。
さらに Kubernetes Operatorを利用したKubePlus ([GitHub - cloud-ark/kubeplus: Purpose-built Platforms on Kubernetes](https://github.com/cloud-ark/kubeplus))というPlatform as Codeを作った話。
今後はこのようなKubernetesのためのPlatform as Codeが増えてくるだろうと言っている。

記事には書いてないがknativeなどもまさにPlatform as Codeなのだろうと感じた。

## [PlanGrid’s migration from Heroku to Kubernetes – PlanGrid Technology – Medium](https://medium.com/plangrid-technology/plangrids-migration-from-heroku-to-kubernetes-3a01ed6a942f)

HerokuからKubernetesに移行した話。
EC2とHerokuの併用がきつい、HerokuのHTTP Routerが遅い、リージョンまたぎの通信をもっと細かく制御したい、などの理由でKubernetesへの移行を検討。
Spinnakerを使っている。kubectlよりも使いやすいと言っている（give developers a better experience）
Herokuからの移行だとするとkubectlは使い勝手が違いすぎる、とのこと

## [Kubernetes: Core Concepts – YLD Engineering Blog – Medium](https://medium.com/yld-engineering-blog/kubernetes-core-concepts-324ea7028c29)

Kubernetesのコアコンポーネントを図入りで紹介。飾らない図が良い。

# バックナンバー

- KubeWeekly #142 https://qiita.com/inajob/items/6eac1a856e95f18cd2ca
- KubeWeekly #141 https://qiita.com/inajob/items/7771e5a5a4409f433042