- 環境構築
- Minikubeクラスタの作成
- 単純なNode.jsアプリをkubernetes上で動作させる
$ brew install xhyve
$ brew install docker-machine-driver-xhyve
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
docker-machine
がインストールされますが気にせずに
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
brew cask install minikube
でもインストールできます。
- 公式チュートリアルだと上記を推奨しています。
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
brew install kubectl
でもインストールできます。
- 公式チュートリアルだと上記を推奨しています。
$ minikube start --vm-driver=xhyve
作成したクラスタと通信できることを確認します(設定の表示)
$ kubectl cluster-info
-
hellonode
ディレクトリを作成
-
以下のJavaScriptを server.js
として保存
-
サーバーを起動
$ mkdir hellonode
$ vim hellonode/server.js
$ node hellonode/server.js
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
hellonode/Dockerfile
を作成します
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
Minikubeホストを使用しているため、環境変数をexportします。
$ eval $( minikube docker-env )
Minikube Dockerデーモンを使用して、Dockerイメージをビルドします。
$ docker build -t hello-node:v1 .
Kubernetes Podは、1つないし複数のコンテナのグループであり、管理およびネットワークの目的で一緒に結び付けられています。このチュートリアルのPodには1つのコンテナしかありません。
Kubernetes Deploymentは、ポッドの正常性をチェックし、ポッドのコンテナが終了した場合は再起動します。ポッドの作成とスケーリングを管理するには、デプロイメントをお勧めします。
$ kubectl run hello-node --image=hello-node:v1 --port=8080
$ kubectl get deployments
$ kubectl get pods
$ kubectl get events
$ kubectl config view -o yaml
デフォルトでは、PodはKubernetesクラスタ内の内部IPアドレスによってのみアクセス可能です(EXPOSEするまで、外部には公開されていない状態)。
hello-nodeコンテナにKubernetesの仮想ネットワークの外部からアクセスできるようにするには、PodをKubernetesサービスとして公開する必要があります。
$ kubectl expose deployment hello-node --type=LoadBalancer
--type=LoadBalancer
フラグは、サービスをクラスタ外に公開することを示します。
- ロードバランサをサポートするクラウドプロバイダでは、サービスにアクセスするために外部IPアドレスがプロビジョニングされます。
$ kubectl get services
$ minikube service hello-node
$ kubectl logs <POD-NAME>
https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/