Kubernetesのエコシステムをまとめる(2018年5月時点)
日本のGW中(2018年)にデンマークではKubeConを開催しているようでして、現地で参加している方々は羨ましい限りです。
KubeConの情報が日本に届くのはGW明けだと思いますが、その前に昨今のKubernetesのエコシステムとかいろいろなことをまとめます。
<追記2018/05/13>
KubeCon 2018 EUで公表された情報も追加しました。
<追記2018/06/08>
チュートリアル、トレーニングを追加しました。
<追記2018/06/11>
プレイグラウンドを追加しました。
<追記2018/06/19>
MS Azure AKSがGAしました。
Kubernetesとは?
Kubernetesはコンテナのオープンソースのオーケストレーションツールです。Dockerを使ってアプリケーションをデプロイ、運用するための統合管理プラットフォームです。
もともとは2014年にGoogleのBorgをオープンソース・プロジェクトとして公開したのが始まりです。
誕生秘話
2017年10月にはDockerがKubernetesを公式サポートするとアナウンスし、一躍注目度があがった気がします。
参考
https://kubernetes.io/
https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
https://qiita.com/MahoTakara/items/85096f8b2632c802ab22
原義と発音と略称
Kubernetesの原義はギリシャ語で航海長(κυβερνετες)という意味だそうです。
ロゴもその由来で、船の舵のようです。
ロゴ一覧
発音は「クーバネティス」とか「クーベネイテス」とか「クーベルネティス」とか「クーバーネーテス」とか十人十色、多種多様です。私は「クーべ」と読んでます。
まあ似た発音の単語は日本語にも英語にも存在しないので、それっぽく言っておけば業界人には伝わると思います。
略称はk8sです。Kubernetesの「ubernete」(8文字)を抜き出して「k8s」だそうです。
英語では略称を読んで「ケイエイツ」でも通じるぽいです。
日本語だと「ケイハチエス」?
ソースコード
Githubのレポジトリで公開されています。
開発元はCloud Native Computing Foundation (CNCF)で、開発言語はGoです。
ライセンス
Apache2.0です。
Apache2.0は以下のとおり、使用、頒布、修正、修正版の再頒布を制限しない緩いライセンスなので、その企業法務とかには嬉しい規定だと思います。
参考
アーキテクチャ
Kubernetesの全体像は上記のようなイメージになります。
Master-Worker構成でKubernetes Cluster(クラスター)を組み、Worker NodeにDockerコンテナを配置します。
細かいコンポーネントは説明しきれないので、ここをご参照ください。
参考
https://github.com/kubernetes/kubernetes/blob/release-1.5/docs/design/architecture.md
https://kubernetes.io/docs/concepts/architecture/nodes/
使い始める
Kubernetesの利用方法は大きく2つあります。
- OSに直接インストールして使う
- クラウドのマネージドサービスを使う
1.は更に以下のように詳細化されます。
- OSに直接インストールして使う
- ローカルPCで使う
2. Minikube:MinikubeはKubernetesのミニ版で、ローカルPCの開発環境として使うものです。シングルノード構成が可能です。 - オンプレミスのサーバ(ベアメタル、仮想マシン)で使う
3. CloudStackを利用
3. Ubuntuを利用
4. CoreOSを利用
5. Kubeadmで好きなLinuxOSにインストールする:KubeadmはKubernetesのインストーラで、Ubuntu、Debian、CentOS、RHEL、Fedoraといった主なLinuxOSをサポートしています。 - クラウドの仮想マシンで使う
5. kops:AWS向けのKubernetes構築ツールです。最近はGCEやVMware Vsphereでも使えるようです。
4. Kubespray:Ansibleを使ってKubernetesクラスターを構築します。
5. Kubeadmを使う(上記参照)。
- ローカルPCで使う
2.は主なクラウドで以下の選択肢があります。
- クラウドのマネージドサービスを使う
3. GCP GKE:Google Cloud PlatformのKubernetesエンジンです。日本リージョンでも使えます。
4. Azure AKS:MS AzureのKubernetesサービスです。~~現時点(2018年5月)ではプレビューで、日本リージョンでは使えません。~~GAになりましたが、日本リージョン未対応です。
5. AWS EKS:AWSのKubernetesサービスです。~~2017年末に出たばかりで現時点(2018年5月)ではプレビューです。~~GAになりましたが、日本リージョン未対応です。
参考
構築方法
ローカルPCやサーバ、クラウドの仮想マシンにKubernetesクラスターを構築する方法です。
- ローカルPC:Minikube
- サーバ、クラウドの仮想マシン:
3. Kubeadm:Kubeadmというインストーラを使い、コマンドラインでKubernetesクラスターを構築します。
4. Rancher:GUIでKubernetesクラスターをデプロイし管理するツールです。
5. kops:AWS向けのKubernetes構築ツールです。最近はGCEやVMware Vsphereでも使えるようです。
4. Kubespray:Ansibleを使ってKubernetesクラスターを構築します。
ネットワーク
Kubernetesクラスターのネットワークを構成するツール:Cluster Networking
ネットワークはクラスター構築時に同時にインストールします。
networking design
GKE/Kubernetes でなぜ Pod と通信できるのか
Persistent Volume
Kubernetes Podsのディスクは基本的に揮発性です。データを永続化するにはPersistent Volumesを使います。
Persistent VolumeにはNFSやAWS EBS、AzureFile等々を設定可能で、同一クラスターに複数設定することができます。
API
Kubernetesは標準ではコマンドラインで操作しますが、各種言語でAPIを実行することも可能です。
クライアントライブラリ一覧
公式にサポートされているのはGo、Python、Java、C#、Javascriptで、それ以外にもRubyやElixir、Lisp等々があります。
Web UI
Kubernets DashboardでノードやリソースをGUIで管理することができます。
イメージは以下のようになっています。
Dashboard自体がKubernetes Deploymentとして稼働する仕組みになっています。
使い方の参考
パッケージマネージャ
Kubernetesでアプリケーションを可動させるための構成ファイルをまとめてデプロイするツールで、Helmというものがあります。
HelmではKubernetesのDeploymentやServiceのデプロイに使うymlファイルをChartsというパッケージにまとめてテンプレート化して提供します。
構成の決まっているアプリケーション(Nginx、Jenkins、Wordpressとか)をデプロイする際、公開済みのChartsを使えば自分でymlを書かずにデプロイできます。
CI/CD
Kubernetesと一緒に使えるCI/CDの便利なツールです。
-
Kubernetes専用:
-
Kubernetes専用ではないけど一緒に使える:
監視
Kubernetes向けに使える監視ツールです。
-
node-problem-detector:クラスター内の全ノードで稼働するDaemonSetとして動作するノード監視ツールです。
-
Prometheus:Kubernetesと同じCNCFプロジェクトの監視モニタリングツールです。監視情報はGrafanaで可視化するのが定番なようです。
-
Datadog:監視モニタリングSaaSです。
<追記2018/05/13>
- Stackdriver Kubernetes Monitoring:GCPの監視ツールであるStackdriverはKubernetes Clusterの監視サポートしています。GKEのみならず、オンプレミスのKubernetes Clusterでも利用可能です。
セキュリティ
Kubernetesのセキュリティ対策です。
重要なことはここに書いてありますので、それ以外のものをリストします。
- aqua:コンテナ向けのセキュリティ対策ソフトウェアです。
- Trend Micro Deep Security:DockerやKubernetesをサポートしているようです。
<追記2018/05/13>
- gVisor:Dockerコンテナをセキュアにアイソレートするためのツールです。ホストOS上のコンテナだとセキュリティが心許ないため、仮想マシン上でコンテナを動かすことでマルチポスト環境でも個々のアプリケーションを分離独立する方法があります。しかしこれだと仮想マシンのオーバーヘッドがパフォーマンスに影響します。gVisorは仮想マシンを代替としてホストOSとアプリケーション間で、仮想マシンよりも軽量に動作する仕組みです。
ディザスタリカバリ
KubernetesのDRとしてHeptio Arkがあります。
Heptio Arkを使うことで、クラスターやPersistent Volumeのバックアップ、リカバリが可能になります。
バックアップ先にはAWS S3やAzure Blobが設定できます。
HeptioはDR以外にもKubernetes向けのコンフィグ審査やIngress Controllerを提供しています。
あとCloud Native Infrastructureという本を無料でダウンロードさせてくれます。
マイクロサービス
Kubernetesでマイクロサービスを管理するためのツールとしてIstioがあります。
Istioのイメージは以下のようになっており、トラフィック管理やアクセスコントロール、ユーザ認証の機能を提供します。
Istio入門 その1 -Istioとは?-
Istio入門 その2 - Istio構築とサンプルアプリのデプロイ -
Istio入門 その3 -Blue/Greenデプロイメントによるカナリアリリース-
管理
<追記2018/05/13>
Dockerコンテナを管理するKubernetesを管理するツールです。
Kubernetes自体がいろいろと複雑なツールなので、Kubernetesをもっと楽に管理したいというニーズはありますよね。
- Rancher:GUIでKubernetesクラスターをデプロイし管理するツールです。
- kublr:エンタープライズレベルでKubernetesを管理するための有償の統合ツールです。
- Kontana Pharos:Kubernetesの構築、運用管理を行う統合ツールです。こちらでOSSで公開されており、サポートやコンサルティング、トレーニングが有償になります。使い方
デザインパターン
KubernetesやDockerのデザインパターン(日本語)
Kubernetesのデザインパターンは今後に期待だと思います。
書籍
Kubernetesを勉強するための書籍です。日本語のもののみ列挙します。
英語の本はたくさんあるのですが、日本語だと少ないですね。
コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤
プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで
チュートリアル、トレーニング
<追記2018/06/08>
Kubernetesを使い始めるためのチュートリアルです。
- Kubernetes tutorials:Kubernetes本家のチュートリアルです。ブラウザ上でコンソールを使い、実際にコマンドを実行できます。まずはここから始めるのが良いと思います。このチュートリアルのオリジナルはKatacondaで、こちらでも同じものを学習可能です。
- Introduction to Kubernetes:Linux Foundationが提供するKubernetesの入門チュートリアルです。
- scalable-microservices-with-kubernetes:UdacityにあるGoogle提供のチュートリアルです。上記よりも実践的で、Kubernete向けのアプリケーション開発ができます。
- Magic Sandbox:ブラウザ上のコンソールでコマンドを実行しながら学習できるチュートリアルです。以下のようなインターフェイスで現在アルファ版公開中です。
プレイグラウンド
<追記2018/06/11>
ブラウザ上でKubernetesで遊ぶことができます。
サポート
<追記2018/05/13>
Kubernetesを活用するためのサポートプログラムです。
この辺りのラインナップが増えてくると、企業ユースも盛んになってくると思います。
- jetstack:Kubernetesのリファレンス・アーキテクチャやオンライントレーニング、サポートを提供しています。
- weaveworks:こちらはKubernetesのサポートに特化しているようです。
Meetup
日本ではKubernetes Meetup Tokyoが隔月に1回くらいのペースで開催されています。
このMeetupは昨年くらいまでは抽選なしでほぼ必ず参加できていたのですが、年末以降すごい人気が出てしまい、2倍くらいの倍率になっています。
たとえ参加できなくてもYoutubeにチャンネルがあるので、過去の開催分ふくめて閲覧することも可能です。
資格
<追記2018/05/13>
Kubernetesの資格はCNCFが提供しています。
- Certified Kubernetes Administrator(CKA):Kubernetesの運用管理者向け資格です。
- Certified Kubernetes Application Developer (CKAD):Kubernetesのアプリケーション開発者向け資格です。
最後に
ほぼリンク集になってしまいました。
個人的な今後の期待はGPU正式サポートとTFXです。
Kubernetesとディープラーニングのライフサイクルって親和性高いと思うんですよね。
<追記2018/05/13>
機械学習、ディープラーニング関連でTensorflowをKubernetesで動かすKubeflowも0.1がリリースが公表されています。
Kubeflowは昨年末くらいにさわってみたのですが、0.1はそのうちあらためて遊んでみようと思います。