edX の Introduction to Kubernetes を受講した

## TLDR;
[Introduction to Kubernetes](https://www.edx.org/course/introduction-to-kubernetes) を受講したお話。
非常にわかりやすくまとまっているので、これから勉強し始める人や、今一度全体像を掴みたい人は受講すると良いと思う。

## 受講前の知識レベル

以下の通り、kubernetes の deploymentとかservice、podなどの基本的な要素の概念がわかっている程度。

* minikubeのインストールしたことある
* docker-compose.yaml を kompose を使って k8s用のyamlに変換して設定ファイルを作成
* kubectl コマンドでコンテナをデプロイしたり削除したりした

## コースについて

LinuxFoundationが提供しているkubernetesの導入教材。
文章やビデオは全て英語、無料で受講可能。（受講後の試験や証明書をもらうにはお金がかかる）
特に手元に開発環境を用意する必要もなく、読み進めるだけなので、スマホのアプリでも受講することができる。
週に２〜３時間程度の時間を使って２ヶ月で終わったので、おそらく**集中すれば２、３日で終わる。**
受講期間は多分３ヶ月。

**2018年 ２月に作成されており、1.9がベースに書かれている。**
（2019/2/28 時点の最新は 1.12.6）

## 目次
どんなことを学べるのか、感覚を掴んでもらうために目次だけ載せておく。
コンテナの話から始まり、kubernetesのアーキテクチャーやコンポーネントをわかりやすく説明してくれている。

* Chapter 1. Container Orchestration
* Chapter 2. Kubernetes
* Chapter 3. Kubernetes Architecture
* Chapter 4. Installing Kubernetes
* Chapter 5. Setting Up a Single-Node Kubernetes Cluster with Minikube
* Chapter 6. Accessing Minikube
* Chapter 7. Kubernetes Building Blocks
* Chapter 8. Authentication, Authorization, Admission Control
* Chapter 9. Services
* Chapter 10. Deploying a Stand-Alone Application
* Chapter 11. Kubernetes Volume Management
* Chapter 12. Deploying a Multi-Tier Application
* Chapter 13. ConfigMaps and Secrets
* Chapter 14. Ingress
* Chapter 15. Advanced Topics - Overview
* Chapter 16. Kubernetes Community   

### いくつかポイント
#### Replication Controllers と ReplicaSets の違い

A ReplicaSet (rs) is the next-generation ReplicationController. ReplicaSets support both equality- and set-based selectors, whereas ReplicationControllers only support equality-based Selectors. Currently, this is the only difference.

#### Jobs
A Job creates one or more Pods to perform a given task. 
The Job object takes the responsibility of Pod failures. 
It makes sure that the given task is completed successfully. 
Once the task is over, all the Pods are terminated automatically.

Starting with the Kubernetes 1.4 release, we can also perform Jobs at specified times/dates, such as cron jobs.

#### Quota Management

When there are many users sharing a given Kubernetes cluster, there is always a concern for fair usage. 
A user should not take undue advantage. 
To address this concern, administrators can use the ResourceQuota object, 
which provides constraints that limit aggregate resource consumption per Namespace.

We can have the following types of quotas per Namespace:

* Compute Resource Quota  
We can limit the total sum of compute resources (CPU, memory, etc.) that can be requested in a given Namespace.
* Storage Resource Quota  
  We can limit the total sum of storage resources (PersistentVolumeClaims, requests.storage, etc.) that can be requested.
* Object Count Quota  
  We can restrict the number of objects of a given type (pods, ConfigMaps, PersistentVolumeClaims, ReplicationControllers, Services, Secrets, etc.).

#### Monitoring and Logging 
In Kubernetes, we have to collect resource usage data by Pods, Services, nodes, etc., to understand the overall resource consumption and to make decisions for scaling a given application. 
Two popular Kubernetes monitoring solutions are Heapster and Prometheus.

* Heapster  
  Heapster is a cluster-wide aggregator of monitoring and event data, which is natively supported on Kubernetes.
* Prometheus  
  Prometheus, now part of CNCF (Cloud Native Computing Foundation), can also be used to scrape the resource usage from different Kubernetes components and objects. Using its client libraries, we can also instrument the code of our application.

Another important aspect for troubleshooting and debugging is Logging, in which we collect the logs from different components of a given system. In Kubernetes, we can collect logs from different cluster components, objects, nodes, etc. 
The most common way to collect the logs is using Elasticsearch, which uses fluentd with custom configuration as an agent on the nodes. fluentd is an open source data collector, which is also part of CNCF.

## 受講画面
PCでの受講もできるし、スマホのアプリもある。
どちらで進めたとしても進行状況は同期される、当たり前の昨日だけど、ありがたい。
ただ、翻訳のために文字を選択すると、edXのメモ機能が動くのがちょっとうざい。

### ブラウザ
基本的に画面に収まる程度の内容でまとめてくれている。
英語でダラダラとスクロールが必要な感じで書かれているとかなり辛いものがあるけど、これは非常に助かる。
<img width="1663" alt="スクリーンショット 2019-02-28 23.02.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/48738/4f300d48-2d6a-f4d3-d06a-46f2370f85b7.png">

### iPhoneアプリ
個人的にオススメ。PC版よりも画面幅が短いので英語を読むときに迷子にならない。
なんていうのかな、３〜５単語くらいで折り返されてくれるのが助かるんだ、英語が苦手な私には。
<img width="375" alt="IMG_4275.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/48738/5ee5ddcc-4e63-18b4-8b7c-f125ba2046b9.png">

## まとめ

自分で環境作って手を動かしながら勉強するのも良い。
kubernetesはドキュメントもしっかりしているので、読み進めるのも良い。

でも、体系的に学ぶのにはこういう教材はわかりやすくて良い感じだと思う。