この記事は公開されてから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
ノード作成
次にクラスタに追加するノードを作成します。先ほどと同じ手順で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
コマンド確認や研修/ハンズオンなどで利用してみてはいかがでしょうか。