Docker
クラウド
kubernetes
microservices
コンテナ

Kubernetesのエコシステムをまとめる


Kubernetesのエコシステムをまとめる(2018年5月時点)

kubernetes

日本の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をオープンソース・プロジェクトとして公開したのが始まりです。

誕生秘話

kubenetes

2017年10月にはDockerがKubernetesを公式サポートするとアナウンスし、一躍注目度があがった気がします。

dockerandkube


参考

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は以下のとおり、使用、頒布、修正、修正版の再頒布を制限しない緩いライセンスなので、その企業法務とかには嬉しい規定だと思います。


参考

https://ja.wikipedia.org/wiki/Apache_License


アーキテクチャ

arch

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つあります。

1. OSに直接インストールして使う

2. クラウドのマネージドサービスを使う

1.は更に以下のように詳細化されます。


  1. OSに直接インストールして使う


    1. ローカルPCで使う



      1. Minikube:MinikubeはKubernetesのミニ版で、ローカルPCの開発環境として使うものです。シングルノード構成が可能です。



    2. オンプレミスのサーバ(ベアメタル、仮想マシン)で使う


      1. CloudStackを利用

      2. Ubuntuを利用

      3. CoreOSを利用


      4. Kubeadmで好きなLinuxOSにインストールする:KubeadmはKubernetesのインストーラで、Ubuntu、Debian、CentOS、RHEL、Fedoraといった主なLinuxOSをサポートしています。



    3. クラウドの仮想マシンで使う



      1. kops:AWS向けのKubernetes構築ツールです。最近はGCEやVMware Vsphereでも使えるようです。


      2. Kubespray:Ansibleを使ってKubernetesクラスターを構築します。

      3. Kubeadmを使う(上記参照)。





2.は主なクラウドで以下の選択肢があります。


  1. クラウドのマネージドサービスを使う



    1. GCP GKE:Google Cloud PlatformのKubernetesエンジンです。日本リージョンでも使えます。


    2. Azure AKS:MS AzureのKubernetesサービスです。現時点(2018年5月)ではプレビューで、日本リージョンでは使えません。GAになりましたが、日本リージョン未対応です。


    3. AWS EKS:AWSのKubernetesサービスです。2017年末に出たばかりで現時点(2018年5月)ではプレビューです。GAになりましたが、日本リージョン未対応です。




参考

https://kubernetes.io/docs/setup/pick-right-solution/


構築方法

ローカルPCやサーバ、クラウドの仮想マシンにKubernetesクラスターを構築する方法です。


  1. ローカルPC:Minikube

  2. サーバ、クラウドの仮想マシン:



    1. Kubeadm:Kubeadmというインストーラを使い、コマンドラインでKubernetesクラスターを構築します。


    2. Rancher:GUIでKubernetesクラスターをデプロイし管理するツールです。


    3. 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

Dashboard自体がKubernetes Deploymentとして稼働する仕組みになっています。

使い方の参考


パッケージマネージャ

Kubernetesでアプリケーションを可動させるための構成ファイルをまとめてデプロイするツールで、Helmというものがあります。

HelmではKubernetesのDeploymentやServiceのデプロイに使うymlファイルをChartsというパッケージにまとめてテンプレート化して提供します。

構成の決まっているアプリケーション(Nginx、Jenkins、Wordpressとか)をデプロイする際、公開済みのChartsを使えば自分でymlを書かずにデプロイできます。

ドキュメント

公開されているCharts


CI/CD

Kubernetesと一緒に使えるCI/CDの便利なツールです。


監視

Kubernetes向けに使える監視ツールです。

<追記2018/05/13>


セキュリティ

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という本を無料でダウンロードさせてくれます。


マイクロサービス

Istio

istio

Kubernetesでマイクロサービスを管理するためのツールとしてIstioがあります。

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を勉強するための書籍です。日本語のもののみ列挙します。

英語の本はたくさんあるのですが、日本語だと少ないですね。

入門 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:ブラウザ上のコンソールでコマンドを実行しながら学習できるチュートリアルです。以下のようなインターフェイスで現在アルファ版公開中です。

MagicSandbox


プレイグラウンド

<追記2018/06/11>

ブラウザ上でKubernetesで遊ぶことができます。

image.png


サポート

<追記2018/05/13>

Kubernetesを活用するためのサポートプログラムです。

この辺りのラインナップが増えてくると、企業ユースも盛んになってくると思います。



  • jetstack:Kubernetesのリファレンス・アーキテクチャやオンライントレーニング、サポートを提供しています。


  • weaveworks:こちらはKubernetesのサポートに特化しているようです。


Meetup

日本ではKubernetes Meetup Tokyoが隔月に1回くらいのペースで開催されています。

このMeetupは昨年くらいまでは抽選なしでほぼ必ず参加できていたのですが、年末以降すごい人気が出てしまい、2倍くらいの倍率になっています。

たとえ参加できなくてもYoutubeにチャンネルがあるので、過去の開催分ふくめて閲覧することも可能です。


資格

<追記2018/05/13>

Kubernetesの資格はCNCFが提供しています。


最後に

ほぼリンク集になってしまいました。

個人的な今後の期待はGPU正式サポートTFXです。

Kubernetesとディープラーニングのライフサイクルって親和性高いと思うんですよね。

<追記2018/05/13>

機械学習、ディープラーニング関連でTensorflowをKubernetesで動かすKubeflow0.1がリリースが公表されています。

Kubeflowは昨年末くらいにさわってみたのですが、0.1はそのうちあらためて遊んでみようと思います。