ちょっと話題の記事

ブラウザでKubernetes!Kubernetesプレイグラウンドでクラスタを構築してみた

2018.10.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。城岸です。

最近社内ではKubernetesもくもく会が開催されており、Kubernetesチョットデキルおじさん(言葉の通り)が日に日に増えています。 本日はそんなもくもく会の中で出会ったKubernetesプレイグラウンドについて紹介したいと思います。

Kubernetesプレイグラウンドとは

Docker,Inc.が提供するKubernetesを手軽に試すことのできるサイトです。 表示された手順を実行することでKubernetesクラスタを簡単に構築することができ、また、クラスタ上で任意のコンテナを起動させることができます。

ただし、以下の制限事項もあります。

  • インスタンスは5つまで
  • 制限時間は4時間
  • 機能制限あり

このような制限事項はありますが、研修やハンズオンなどでは十分利用できるのではないかと思います!

ということで早速試してみました。

やってみた

Kubernetesプレイグラウンドにログインします。DockerID、もしくは、GitHubアカウントで認証します。

play-with-dockerに許可を与えます。

Kubernetesプレイグラウンドをスタートします。

Mastarノード作成

まずはインスタンスを作成します。

インスタンスを作成すると、作成したインスタンス情報(IPアドレス、CPU、メモリ、URL)およびターミナルが表示されます。以降のコマンドはターミナルでの実行結果となります。

本ブログ執筆時点では、インスタンスの各種バージョンは以下のようになっています。

[node1 ~]$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
[node1 ~]$ kubeadm version
Initializing machine ID from random generator.
kubeadm version: &version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T17:59:42Z", GoVersion:"go1.10.3",Compiler:"gc", Platform:"linux/amd64"}
[node1 ~]$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

このインスタンスをMasterノードとして初期化します。

[node1 ~]$ kubeadm init --apiserver-advertise-address $(hostname -i)

・・・・

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 192.168.0.8:6443 --token XXXXXXXXXXXXXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXXXXXXXXXXXXXXX

Your Kubernetes master has initialized successfully!と表示されていればOKです。kubectlコマンドにより、このインスタンスがMasterノードとして追加されていることが確認できます。

[node1 ~]$ kubectl get nodes
NAME      STATUS     ROLES     AGE       VERSION
node1     NotReady   master    5m        v1.11.3

ノード作成

次にクラスタに追加するノードを作成します。先ほどと同じ手順でnode2node3インスタンスを作成します。

Kubernetesクラスタにnode2node3を追加します。 Masterノード作成時に表示されたkubeadm joinコマンドをnode2node3でそれぞれ実行します。

[node2 ~]$ kubeadm join 192.168.0.8:6443 --token XXXXXXXXXXXXXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXXXXXXXXXXXXXXX

・・・・

This node has joined the cluster:
* Certificate signing request was sent to master and a response
  was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the master to see this node join the cluster.

クラスタネットワーク初期化

コンテナ間の通信を実現するためクラスタネットワークを構築します。

[node1 ~]$ kubectl apply -n kube-system -f \
>     "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d '\n')"
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.extensions/weave-net created

これでKubernetesクラスタの構築は完了です。各ノードがクラスタに追加され、ステータスがReadyとなっていることが確認できます。

[node1 ~]$ kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
node1     Ready     master    10m       v1.11.3
node2     Ready     <none>    3m        v1.11.3
node3     Ready     <none>    3m        v1.11.3

Pod実行

では最後にこのクラスタでPodを実行してみましょう!

[node1 ~]$ kubectl run nginx --image=nginx --replicas=2
deployment.apps/nginx created
[node1 ~]$ kubectl get pods -o wide
NAME                     READY     STATUS    RESTARTS   AGE       IP          NODE      NOMINATED NODE
nginx-64f497f8fd-4cdzf   1/1       Running   0          25s       10.32.0.2   node3     <none>
nginx-64f497f8fd-wh7d5   1/1       Running   0          25s       10.40.0.3   node2     <none>
[node1 ~]$ kubectl get all
NAME                         READY     STATUS    RESTARTS   AGE
pod/nginx-64f497f8fd-4cdzf   1/1       Running   0          1m
pod/nginx-64f497f8fd-wh7d5   1/1       Running   0          1m

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   45m

NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   2         2         2            2           1m

NAME                               DESIRED   CURRENT   READY     AGE
replicaset.apps/nginx-64f497f8fd   2         2         2         1m
[node1 ~]$

node2node3ノードで指定したPodが起動しています!

まとめ

KubernetesプレイグラウンドでKubernetesクラスタを構築しPodを実行してみました。開発環境や本番環境で利用することはできませんがkubectlコマンド確認や研修/ハンズオンなどで利用してみてはいかがでしょうか。