ローカルKubernetesクラスターを作成するためのユーティリティであるkube-spawnの紹介

ご注意 perev。 :kube-spawnは、ドイツの会社KinvolkがKubernetesクラスターをローカルで起動するために作成した、かなり新しい(8月に発表された)オープンソースプロジェクトです。 Goで書かれており、Kubernetesバージョン1.7.0以降で動作し、kubeadmとsystemd-nspawnの機能を使用し、GNU / Linuxオペレーティングシステムのみに焦点を当てています。 Minikubeとは異なり、Kubernetesの仮想マシンは起動しません。つまり、オーバーヘッドが最小限に抑えられ、コンテナー内で実行されているすべてのプロセスがホストコンピューターで表示されます(top / htopを含む)。 次の記事はこのユーティリティの発表であり、会社の従業員の1人(ChrisKühl)が企業ブログで公開しています。







kube-spawnは、Linuxマシン上の複数のノードからローカルKubernetesクラスターを簡単に起動するツールです。 最初は、Kubernetes自体の開発者向けに主に作成されましたが、時間が経つにつれてKubernetesの試行と学習に最適なユーティリティになりました。 この記事では、kube-spawnの一般的な紹介と、このツールの使用方法を示します。



復習



kube-spawnは、Linux上でKubernetesを使用してテストやその他の実験を実行する最も簡単な方法を目指しています。 このプロジェクトは、開発マシン上の多くのノードでKubernetesクラスターを起動するときに遭遇する困難のために生まれました。 通常、必要な機能を提供するユーティリティは、Kubernetesがその後起動される環境、つまり本格的なGNU / Linuxオペレーティングシステムを提供しません。



kube-spawnを使用したKubernetesクラスターの起動



それでは、クラスターを開始しましょう。 kube-spawnでは、1つのコマンドでContainer Linuxイメージを取得し、ノードを準備し、クラスターをデプロイできます。 これらの手順は、 machinectl pull-raw



およびmachinectl pull-raw



-spawnのsetup



およびinit



サブコマンドを使用して個別に実行できます。 ただし、 up



サブコマンドはすべてを行います。



 $ sudo GOPATH=$GOPATH CNI_PATH=$GOPATH/bin ./kube-spawn up --nodes=3
      
      





コマンドの実行が完了すると、3つのノードを持つKubernetesクラスターが取得されます。 ノードの使用準備が整うまで待つ必要があります。



 $ export KUBECONFIG=$GOPATH/src/github.com/kinvolk/kube-spawn/.kube-spawn/default/kubeconfig $ kubectl get nodes NAME STATUS AGE VERSION kube-spawn-0 Ready 1m v1.7.0 kube-spawn-1 Ready 1m v1.7.0 kube-spawn-2 Ready 1m v1.7.0
      
      





これで、すべてのノードの準備ができたことがわかります。 先に進みます。



デモアプリケーション



Weaveworksで作成した Sock Shopデモマイクロサービスアプリケーションをデプロイして 、クラスターの状態をテストします。 Sock Shopは、マイクロサービスで構成され、実際のインストールで通常見られる多くのコンポーネントを使用する複雑なアプリケーションです。 したがって、すべてが実際に機能することを確認でき、単純な「hello world」よりも研究のためのより実質的な基盤を提供します。



アプリケーションのクローニング



続行するには、 deploy/kubernetes



microservices-demo



リポジトリのクローンを作成してdeploy/kubernetes



移動する必要があります。



 $ cd ~/repos $ git clone https://github.com/microservices-demo/microservices-demo.git sock-shop $ cd sock-shop/deploy/kubernetes/
      
      





アプリケーションの展開



これで、すべての展開の準備が整いました。 ただし、最初に行う必要があるのは、 sock-shop



名前空間を作成することです-展開はその存在を前提としています。



 $ kubectl create namespace sock-shop namespace "sock-shop" created
      
      





これで、アプリケーションをデプロイする準備がすべて整いました。



 $ kubectl create -f complete-demo.yaml deployment "carts-db" created service "carts-db" created deployment "carts" created service "carts" created deployment "catalogue-db" created service "catalogue-db" created deployment "catalogue" created service "catalogue" created deployment "front-end" created service "front-end" created deployment "orders-db" created service "orders-db" created deployment "orders" created service "orders" created deployment "payment" created service "payment" created deployment "queue-master" created service "queue-master" created deployment "rabbitmq" created service "rabbitmq" created deployment "shipping" created service "shipping" created deployment "user-db" created service "user-db" created deployment "user" created service "user" created
      
      





これらの操作を実行した後、すべてのポッドが表示されるまで待つ必要があります。



 $ watch kubectl -n sock-shop get pods NAME READY STATUS RESTARTS AGE carts-2469883122-nd0g1 1/1 Running 0 1m carts-db-1721187500-392vt 1/1 Running 0 1m catalogue-4293036822-d79cm 1/1 Running 0 1m catalogue-db-1846494424-njq7h 1/1 Running 0 1m front-end-2337481689-v8m2h 1/1 Running 0 1m orders-733484335-mg0lh 1/1 Running 0 1m orders-db-3728196820-9v07l 1/1 Running 0 1m payment-3050936124-rgvjj 1/1 Running 0 1m queue-master-2067646375-7xx9x 1/1 Running 0 1m rabbitmq-241640118-8htht 1/1 Running 0 1m shipping-2463450563-n47k7 1/1 Running 0 1m user-1574605338-p1djk 1/1 Running 0 1m user-db-3152184577-c8r1f 1/1 Running 0 1m
      
      





靴下店へのアクセス



すべての準備が整ったら、ストアにアクセスするためにどのポートとIPアドレスを入力するかを見つける必要があります。 ポートを見つけるために、フロントエンドサービスが転送される場所を見てみましょう。



 $ kubectl -n sock-shop get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE carts 10.110.14.144 <none> 80/TCP 3m carts-db 10.104.115.89 <none> 27017/TCP 3m catalogue 10.110.157.8 <none> 80/TCP 3m catalogue-db 10.99.103.79 <none> 3306/TCP 3m front-end 10.105.224.192 <nodes> 80:30001/TCP 3m orders 10.101.177.247 <none> 80/TCP 3m orders-db 10.109.209.178 <none> 27017/TCP 3m payment 10.107.53.203 <none> 80/TCP 3m queue-master 10.111.63.76 <none> 80/TCP 3m rabbitmq 10.110.136.97 <none> 5672/TCP 3m shipping 10.96.117.56 <none> 80/TCP 3m user 10.101.85.39 <none> 80/TCP 3m user-db 10.107.82.6 <none> 27017/TCP 3m
      
      





front-end



がポート30001と外部IPアドレスを使用していることがわかります。 つまり、ワーカーノードのIPアドレスとポート30001を介してサービスにアクセスできます。machinectlを使用して、すべてのクラスターノードのIPアドレスを確認できます。



 $ machinectl MACHINE CLASS SERVICE OS VERSION ADDRESSES kube-spawn-0 container systemd-nspawn coreos 1492.1.0 10.22.0.137... kube-spawn-1 container systemd-nspawn coreos 1492.1.0 10.22.0.138... kube-spawn-2 container systemd-nspawn coreos 1492.1.0 10.22.0.139...
      
      





最初のノードがマスターであり、残りはすべてワーカーであることを忘れないでください。 私たちの場合、ブラウザを開いて10.22.0.138:30001



または10.22.0.139:30001



アドレスに行くだけで十分です。ここで靴下を販売している店に迎えられます。



クラスター停止



靴下の購入が完了したら、クラスターを停止できます。



 $ sudo ./kube-spawn stop 2017/08/10 01:58:00 turning off machines [kube-spawn-0 kube-spawn-1 kube-spawn-2]... 2017/08/10 01:58:00 All nodes are stopped.
      
      





説明書付きデモ



「ガイドツアー」をご希望の場合は、YouTubeでビデオをご覧ください (英語で約7分-約Transl。)



ビデオで説明したように、kube-spawnは現在のディレクトリに.kube-spawnディレクトリを作成しdefault



。このディレクトリには、 default



いくつかのファイルとディレクトリがありdefault



。 各OSコンテナのサイズに制限されないように/var/lib/docker



各ノードの/var/lib/docker



ここにマウントします。 これにより、ホストマシンのディスク領域を使用できます。 最後に、現時点では、クリーンなコマンドはありません。 rm -rf .kube-spawn/



の痕跡を完全に隠したい場合は、コマンドrm -rf .kube-spawn/



実行できます。



おわりに



kube-spawnユーティリティも役に立つと思います。 私たちにとって、これはKubernetesの変更を確認したり、Kubernetesを学習するためにクラスターをデプロイしたりする最も簡単な方法です。



kube-spawnにはまだ多くの改善を加えることができます(それらのいくつかは非常に明白です)。 プルリクエストを歓迎します!



翻訳者からのPS 。 kube-spawnのインストールおよびその他の機能については、プロジェクトのGitHubリポジトリに記述されています 。 ブログもご覧ください。






All Articles