Kubernetesの公式チュートリアルをやってみる その1

## モチベーション

昨今はサーバーレス・エコシステムが熱い、と思いながらもコンテナ系とかオーケストレーションを
全然触れてないので、改めてチュートリアルをやってみてどんなものかを把握していきたいと思います。
要はやってみたメモと要所を日本語で説明する(したい)メモです。

#### 注意 && disclaimer

翻訳・意訳が主目的ではないのでいろいろ端折ったりすることがあります。
明らかな間違いはしないつもりですが、何かあれば優しくツッコんであげてください。


## 目次

ちゃんと更新できますように(ぁ
※チュートリアル内容も日に日に変わる可能性があるため、実施した日付も合わせて記載しています。

- その1(本記事) (2018-09-12時点)
- [その2][tutorial-2] (2018-09-12時点)
- [その3][tutorial-3] (2018-09-13時点)
    - 初回操作のあとでいろいろいじって記載したので日付更新
- [その4][tutorial-4] (2018-09-26時点)
    - 記事投稿時に再度チュートリアルを実施
- [その5][tutorial-5] (2018-09-28時点)
- [その6][tutorial-6] (2018-09-28時点)
- [その7][tutorial-7] (2018-09-28時点)


## 筆者の立ち位置

この記事の補足するために、この記事を書いた当時の筆者の立ち位置を簡単に記載しておきます。

- 業務で過去にオンプレシステムを扱っていた経験あり、ただし当時はインフラはノータッチ
    - この頃から bash 関連はいじっていたのでシェル操作はそれなりにできた
- ここ4年ほどクラウド(国内サービスやAWS)でIaaSやマネージドインスタンスを用いた開発・運用がメイン
- 仮想コンテナは docker を開発環境でイメージからrunかけるぐらいしか使ったことがない
    - Dockerfile もまともに覚えてないので docker run して中身の構築はシェルでゴリゴリしていたほど
- オーケストレーションは Vagrant 上で Vagrantfile をいじって一式環境を用意するぐらいしか触ってない
    - Rubyも聞きかじり程度なのでオーソドックスに制御していない、結構力技でマルチインスタンスを操作してた
- 最近になって検証や調査目的だがGCPを触る機会が増えてきた
    - GAEとか周辺が便利だし第2世代とか今後すごく熱そうですよね
    - Knativeとかk8s上でサーバーレスに近い感覚で可用性あるらしいですね(語弊あり？)
        - そういえばk8s自体全然触ってない…　→　この記事の発足に至りました


## チュートリアル

[公式サイト][kubernetes] のトップにある [Learn Kubernetes Basics][tutorials] のリンクからアクセスできる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75716/28596d30-2a5e-4fdc-0de0-60babfbb90f6.png)

各章ごとに内容の説明と Interactive Tutorial ということでハンズオンを織り交ぜて勉強することができます。
ターミナルとかDockerとかはWEBページから直接使えるので用意する必要なし。
Minikubeが動くのでその中で操作します。

全英語だがきっとそこまで難しくはないはず。
ノー英会話、だけどシステム系で働いていて調べ物はちょっと英語も触る程度な筆者が十分に斜め読みできる程度。
Kubernetesの固有単語だけは日本語サイトを織り交ぜて調べた方が齟齬がなくてよいかも。

## 本記事の取り扱う範囲

[Learn Kubernetes Basics][tutorials] (オーバービュー)の内容を扱います。
内容と言っても何が書いてあるか、ぐらいの噛み砕きです。
※一応半分ぐらいはえいやで一日で進めたので、随時記事にまとめてアップ予定で。

## Learn Kubernetes Basic

チュートリアル自体の概要ページ。
各モジュールのチュートリアルへのリンクもあるので途中と飛ばして個別にアクセスすることも可能。

### このチュートリアルについて

- クラスタへのコンテナのデプロイ → スケール → ソフトウェアのアップデート → デバッグ の内容を扱う。
- KatacodaでMinikube環境へ繋いで操作するのでブラウザだけで進められる。

### Kubernetesは何ができる？

- コンテナ化することでアプリのリリース・更新をダウンタイムなく行うことが容易になる。
- Kubernetesはコンテナアプリの作成や必要なツール・リソースを探し出す手助けをしてくれる。

----

## 【追記】Learn Kubernetes Basic を一通り実践して

基本を一通りやってみての感想とか。

Kubernetesを構成する要素については概ね把握はできた(つもりだ)けど、実際に運用するとなると課題は山積みな感じで。

- コマンドオプションの深掘り
    - チュートリアル進める中でヘルプはちょこちょこ見ていたけどまだ触ったのはほんの一部。
    - オプション覚えることで各コマンド・要素でできることも深掘りしていきたい。
    - 本筋はずれるが go-template 覚えたほうが手法調査とかも円滑になりそう。
- 各要素のコード化
    - チュートリアルでは設定系はすべてコマンド・オプションで行っていたのでyamlでまとめてとかやってない。
    - これはオプション辺りまで覚えれば定義構造は使いながら覚えるでよいかも。
- サービス連携
    - app => dbなどの連携をする際の、宛先の制御は？
        - kube-dns で制御できる？
    - サービスディスカバリは？
        - マイクロサービス化するなら必須な気がする
        - Knative以前の作法とかある？
- 永続ストレージ
    - DBとかはPod切り替わってもストレージは永続化必要
    - その周りの外部リソース連携の理解
- ベストプラクティスの模索
    - Deployment はどういう単位で定義するべき？
        - `containers` に複数のアプリを入れられるがサービス全体でまとめる？
        - マイクロサービス単位で分ける？
        - それぞれのメリットデメリットは？
    - オートスケールの運用
        - IaaSベースだとメモリ・CPU・ネットワークのメトリクスでやること多いけど違いは？
        - 死活監視のカスタマイズは？デフォルトパスに死活要素まとめて放り込んだ方がよい？
        - フェイルセーフは扱える？
    - 監視系はどうやる？
        - オートスケールと組み合わせるとある程度勝手に正常Podに切り替わりそう
            - サービス継続的にはよいがエラーは把握しておきたい

一旦は先にサーバーレス系とか進める予定なのでしばらく本格的には触れる機会はないと思うけど、
今後構築とかする際は上の辺りから勉強し直しで。

----

## 参考リンク

- [Kubernetes公式][kubernetes]
- [Kubernetes公式チュートリアル][tutorials]

[kubernetes]:https://kubernetes.io/
[tutorials]:https://kubernetes.io/docs/tutorials/kubernetes-basics/
[tutorial-2]:https://qiita.com/kitamin/items/c4902edba777f4bf4826
[tutorial-3]:https://qiita.com/kitamin/items/c2fb850bbf0397acd9c2
[tutorial-4]:https://qiita.com/kitamin/items/a7657db9689111c9e4dc
[tutorial-5]:https://qiita.com/kitamin/items/7b56d1c40824414ec768
[tutorial-6]:https://qiita.com/kitamin/items/b675cbdeb06c97fcb5fa
[tutorial-7]:https://qiita.com/kitamin/items/be9a9dab79207337ae17