My External Storage

Nov 23, 2017 - 4 minute read - Comments - report kubernetes

Cloud Native Developers JP 第1回勉強会 参加メモ #cndjp1

Cloud Native Developers JP(cndjp)のハンズオンに参加し、Kubernetesについて勉強してきた。 クラウド素人の自分でもローカルにクラスター構成を作成、アプリのスケールイン、スケールアウトまで試せたので良かった。

URL https://cnd.connpass.com/event/69971/
会場 日本オラクル青山センター
日時 2017/11/22(水) 19:00 〜 22:00
資料 https://www.slideshare.net/charlier-shoe/kubernetes-serverless-cndjp1/
ハッシュタグ #cndjp1

TL;DR

だいぶ基礎的なところからフォローしてくださっていた。「クラウド勉強してみたいけど、どこから手をつければ/どう手をつければいいんだろう?」と言った状態の自分にとってちょうどいいレベル感だったので、次回も参加したい。

Cloud Native Developers JPはClound NativeなOSSスタック(以下の図)の勉強会とのこと。
https://github.com/cncf/landscape

Cloud Native Landscape

以下メモ


Kubernetesとは

https://kubernetes.io/

Kubernetes(k8s)はgoogleが公開しているDockerを使った自動デプロイ、スケーリングなどのコンテナの運用自動化のためのオープンソースのプラットフォーム。最近はAzureがフルマネージドを言及したり、Docker本体が統合を発表したり、オーケストレーションツールのデファクトスタンダードになりつつある。

K8sの基本的な用語

今回のハンズオンで意識できるようになったのは以下。DaemonSetとかも用語説明のときにでてきたが、手を動かすとき関係なかった(はず)

kubectl

k8sを操作するためのコマンドラインツール。コマンドをk8sのREST API呼び出しに変換する。k8sの操作は基本REST APIベースになっているのかな?いかにもWebツールだ。

Node

クラスターに属するマシンを表すオブジェクト。クラスターの管理を担当するマスターノードとアプリケーションを稼働させるメンバーノードがある。今回で言うとVagrant上のVMになる。

Pod

Node内で稼働するコンテナのセット。今回で言うとサンプルアプリ。ライフサイクルを操作するときの単位になるため、複数コンテナでひとつのPodを構成するときもある。

Deployment

Podのライフサイクルを制御するオブジェクト。Podを起動したり、スケールするときに指定する。

Service

Podへのアクセスの制御を行うオブジェクト。各DeploymentのPodへのルーティング、ロード・バランシングの役割を持つ。スケール操作したPodへのアクセスはServiceがよしなにしてくれるらしい。

Label/Label Selector

k8sオブジェクトを管理。jsonで書ける。メタデータ、タグとして使う。Labelベースで操作すればPodが増減したときもいい感じにロードバランスなどが働く。

その他クラスター要素について深く知りたいならば、以下などを参考にすれば良いとのこと。

Creating a Custom Cluster from Scratch
https://kubernetes.io/docs/getting-started-guides/scratch/

Fn Project

http://fnproject.io/
https://github.com/fnproject/fn

サーバレスアプリを作るためのフレームワーク。今年のJavaOneで発表された。Open & Easy。 マルチ言語サポートでDockerがあれば動く。Fn Server上に各Functionが乗るDocker in Dokcer構成。 トリガーがキックされるたびに対応するファンクションのコンテナを立ち上げる。 コンテナ管理はCLIで隠蔽される。 Fn Flowを使うと、複数のファンクションの連結を手続き的記述で実現(現状Javaのみ コンテナで全部動いているので、k8sと相性が良いはずらしい。

stern

https://github.com/wercker/stern

複数のPodのログを簡単に確認できるツール。色分けとかもしてくれるし確かに見やすかった!

kubernetes使いは全員 stern を導入すべき


その他

  • 練習問題は kubectl describe pods | egrep "Node:|^Name:"って感じで確認できた。
  • kubectlはzsh(とbash)使いならば source <(kubectl completion zsh)を実行しておけば補完もかなり効く。
  • Podを削除するときはkubectl delete pod $POD_NAME
  • 終わるときはkubectl delete pods --allしてvagrant haltでよいかな?