[3分で読める]『Managing Kubernetes』を最速でエクストリーム輪読して学んだこと #1

# はじめに
この記事はリファラル採用を促進する『MyRefer』を運営する『株式会社MyRefer』の有志のエンジニアによって書かれました。
**エクストリーム輪読会**を通して、得られた知見をできるだけ簡単にまとめて、
**『3分で読んだ気になれるような記事を書こう！』**という趣旨で書かれています。
エクストリーム輪読会について書かれている部分があるので、本の内容だけ把握したい人は下部のまとめパートまで読み飛ばして下さい。

## エクストリーム輪読会とは
一般的な輪読会は事前学習が必要な上に、発表者以外の人に知識が定着しずらいという想いがあり、それをどうにかしたいという発想から、**煩雑な準備を無しにして、活発な議論が行える輪読会を開催できないか**という趣旨で始まりました。
有志を募って、みんなでお昼ご飯を食べながら**『60分』でインプットとアウトプットを完結**させます。
今回も有志で4人のエンジニアが集まりました。

### 今回の参加者
 - @UEDAYUJI 
 - @eccyan 
 - @ybalexdp 
 - @fuou 

### エクストリーム輪読会の様子
![PA120639.JPG](https://qiita-image-store.s3.amazonaws.com/0/62961/36c190be-7547-c0d6-0991-ee89a51525e8.jpeg)

## エクストリーム輪読会の進め方
エクストリーム輪読会では『60分』というタイムフレームの中でいかに効率的に情報をインプット&アウトプットできるかということにフォーカスして輪読を進めていきます。

#### 1.まずは概要を調べる(10分)  
読む本と1時間でどこまで読むかを決めたら、まずは10分間で概要を把握します。
もちろん10分間で読み込むことはできないので、何が書かれているのかを大まかに把握して重要なポイントを洗い出します。

#### 2.概要について話し合う(10分)  
先の10分間で理解した内容をお互いにアウトプットします。
どのような内容が書かれているのか、重要な点はどこだと感じたか語ります。

#### 3.各センテンスを担当を交代しながら読んでいく(30分)  
30分間で各センテンスの内容を読みながらまとめていきます。
オススメはセンテンス毎に担当者を割り振って、担当者以外は話を聞きながらマークダウン形式で内容をまとめていくという方法です。
**こちらの記事もその内容を元に書かれました。**

#### 4.ラップアップ(10分)  
改めて書かれていた内容を議論します。
**読んでみて理解しきれなかった点、特に重要だと思った点など。**
誰かが口火を切って話すと、いろんな方向に飛び火しながら知識がつながっていくのが、エクストリーム輪読会のミソです。

## 書籍
今回は全章公開されたばかりのオライリーの**『Managing Kubernetes』**で輪読会を行いました。
エクストリーム輪読会のメリットは準備が要らないので、新しい情報をみんなで共有しやすくなるという点です。
該当の書籍はHeptioのサイトからFreeでダウンロードできます。
![スクリーンショット 2018-10-12 23.09.45.png](https://qiita-image-store.s3.amazonaws.com/0/62961/ab2aeef5-571f-974f-22b1-c855a5e6b0f1.png)
https://hello.heptio.com/managing-kubernetes-ebook
著者：Brendan Burns / Craig Tracey
kubernetesを運用するにあたって必要な知識が詰まっている本です。
ちなみに本の出だしで、『Kubernetes:Up and Running』を読んでないやつは先にそっちを読めと書いてあります。

それでは本題に入りましょう。

# 第一章 イントロダクション(Introduction)
イントロはイントロなのでKubernetesに関する概要がまとめられています。
簡単にサマると、下記のようなことが書かれています。

 - KubernetesはコンテナGoogleで開発されたオープンソースプロジェクトである
 - Kubernetesは単純な構文でオーケストレーションを定義できるAPIを提供する
 - Kubernetesはクラスタの障害発生時にも自己修復するためのアルゴリズムが定義されている
 - サービスの命名・発見に関するルールを提供し、疎結合のマイクロサービスアーキテクチャを構築できる
 - パブリッククラウドだけではなく、プライベートクラウドでも利用できる

知らないと把握しずらいKubernetesの全体像ですが、言語化してみると以外と単純ですね。
そして、k8sがオーケストレーションにおいて担う役割が以下の４つであることがわかります。

 - クラスタの動作
 - クラスタの調整、保護、チューニングの方法
 - クラスタを理解し、問題が起こったときに対応する方法
 - 新しいカスタム機能を使用してクラスタを拡張する方法

## クラスタの運用方法 (How the Cluster Operates)
k8sクラスタの管理者になるためにはk8sがどのように動いているかシステムの動作原理から理解することが重要だそうで、
これも必要なスキルが言語化できるようです。

 - k8sがどのようにクラスターを消費するか
 - k8sが日常的などのような業務の煩雑さから解消してくれるのか
 - k8sを使うことでエンドユーザーにはどういう価値が届けられるのか
 - クラスタを削除するのにどういう煩雑さが伴うか、そしてk8sが業務の煩雑さを取り除くためにどのような複雑性をシステムに持ち込む必要があったのか

Kubernetes仕事で使いたいなと思ったら、これだけできれば胸を張ってk8sできるよ！といえそうです。
この本を通して学びましょう。

## クラスタの調整、保護、チューニング (Adjust, Secure, and Tune the Cluster)
k8sの管理者はAPIの利用方法を知るだけではなく、クラスターを調整/保護/チューニングするためのさまざまなAPIと構成オプションを理解することが求められますが、同時に

 - 『開発者が参加し⇛チームを離れ⇛古いチームが壊され⇛新しいチームが形成される』という流れに合わせて、クラスタがどのようなライフサイクルで使用され、拡張されるかを理解する
 - クラスタを正常に管理するためにはさまざまな攻撃から保護されるようにクラスタを構成する

ようなことが求められます。
設定ミスによっては、あるチームが他のチームのサービスを誤って「攻撃」することもできるので、管理者にはそれを防ぐ知識が求められています。セキュリティ大事。

## 何か間違っているときの対応 (Responding When Things Go Wrong)
クラスタが壊れているときにまず管理者がすべきことは

 - 自動化とアラートで素早く気づく
 - できるだけ早くシステムに応答して復元する

ですが、そのために必要な機能が大きく2つk8sでは提供されています。

一つは

 - CPU、メモリ、ネットワーク、ディスク使用量などの基本メトリックを監視すること

コンテナ生成メトリックに加えて、Kubernetesコードベース自体には、かなりの数のアプリケーションメトリックが組み込まれています。
これには、さまざまなコンポーネントによって送信または受信された要求数や、それらの要求の待ち時間などが含まれています。
これらのメトリックは、プロメテウスのオープンソースプロジェクトで一般化されているフォーマットを使用して表現されるので、簡単に収集しGrafanaのような他のツールと一緒に使用して、Prometheusなどに簡単に集約することができます。

そしてもう一つは

 - システムの問題に対応して復旧すること

k8sはシステムに最小限の状態で分離されたモジュール式に構築されるので、いつでも、過負荷または誤動作する可能性があるシステム内のコンポーネントを再起動できます。
k8sのモジュール性と冪等不変性はシステムの復旧を、アプリケーションを再起動するのと同じぐらい簡単にしてくれます。
DR環境の準備が必要な場合は、クラスタ自体をDRバックアップから復元する必要があります。

## 新しいカスタム機能でシステムを拡張する (Extending the System with New and Custom Functionality)
k8sにはエコシステムが存在しサービス（FaaS）プラットフォームとして利用することができます。
多数の機能はKubernetesの上に構築され、簡単に利用することができます。
例えば

 - SpinnakerやJenkinsのようなツールが継続デリバリーの文脈で利用できる
 - Deisのようなプラットフォームで、Gitのプッシュスタイルの開発者ワークフローを使える
 - 無数のマイクロサービスのリンクやイントロスペクションを容易にするサービスメッシュテクノロジ
 - 証明書の作成とローテーションを自動化するツール

などがあります。
Gitプッシュしたらこんな感じにクラスタリングするよ とかも管理することができるんですね。
またKubernetesAPI自体にも、APIを拡張および拡張するための豊富なツールが含まれていて、新しいAPIを動的に追加および削除することができます。
Kubernetesクラスタの管理者は、クラスタを強化する新しいコードと新しい拡張機能を開発することができます。

管理者はこれらのツール、プラットフォーム、およびプロジェクトをどのタイミングでどのようにクラスタに追加すべきなのかを知っていなければいけません。
これは特定のプロジェクトが達成しようとしていることだけでなく、k8sの生態系に存在する他の解決策の探求と理解を必要としています。

## サマリ (Summary)
第一章ではk8sの概要と運用方法が第一章では述べられていました。
イントロダクションというだけあって内容はあまりないですが、この本がk8sの管理者を養成する目的で書かれたということはわかりました。

k8sの管理者としての責任を果たすために必要なことをサラっとおさらいすると、
クラスタを維持、調整、改善する方法を知る必要がありその方法は具体的には下記の4つ

 - 稼働中のクラスタの情報を監視する方法
 - クラスタが病気になったときに通知するためのアラートと、ダッシュボードを開発する方法
 - 壊れたクラスタを再び健全にする方法
 - Kubernetesクラスターをいつ、どのように拡張して他のツール群と連携するかを知る

が必要であることがわかります。

# 生まれた質問と回答
**Q:Kubernetesってそもそも何？**
**A:コンテナのクラスタを管理できるAPIを提供するGoogle謹製のOSS**
  Googleの社内プロダクトでBorgというのがあって、それをOSS化しました。
　グーグルの中の人的にはBorgは社外秘で運用されていたようです。
  このBorgで10年間培った教訓がKubernetesの設計に活かされていて、そして今ではMSの開発者によっても積極的に開発されています。

**Q:Kubernetesってなんて読むの？**
**A:クーバネーティスとかクーベルネイティスなど諸説ありますが、Google I/Oの発表を見た感じ『クバネティス』って感じで聞こえます。**
  ギリシャ語で航海長またはパイロットを意味します。

**Q:Docker Composeとはどういう違いがあるんだろう？**
**A:Kubernetesはコンテナ群をクラスタ管理するものなので、どちらかというとDocker SwarmやAmazon ECSと競合します**
  Docker Composeはクラスタを構築するだけなのに比べ、Kubernetesは運用とか監視とか、壊れたクラスタの復旧までできるというのが今の理解

**Q:Deisって何？**
**A:オープンソースのPaaSでプライベートに立てられるHerokuみたいなもの。**
2017年頃にMSに買収された。

[3分で読める]『Managing Kubernetes』を最速でエクストリームリーディングして学んだこと #2
に続きます。

それではまた。