ブラウザでKubernetes!Kubernetesプレイグラウンドでクラスタを構築してみた
こんにちは。城岸です。
最近社内では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
ノード作成
次にクラスタに追加するノードを作成します。先ほどと同じ手順でnode2
、node3
インスタンスを作成します。
Kubernetesクラスタにnode2
、node3
を追加します。
Masterノード作成時に表示されたkubeadm join
コマンドをnode2
、node3
でそれぞれ実行します。
[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 ~]$
node2
、node3
ノードで指定したPodが起動しています!
まとめ
KubernetesプレイグラウンドでKubernetesクラスタを構築しPodを実行してみました。開発環境や本番環境で利用することはできませんがkubectl
コマンド確認や研修/ハンズオンなどで利用してみてはいかがでしょうか。