Kubernetesの選択肢は?

Kubernetesを実際に触ってみるにあたって、「気になるのは簡単に導入できるか」「無料で試せるのか」といったことではないでしょうか?

商用利用するにはクラウドベンダーが提供するマネージドサービス(下表No.1)を利用するか、オンプレミスなどで構築ツールを利用するかの2つの方法があります(下表No. 2)。なお、構築ツールはかなりの種類がありますので、表では代表的なものだけ紹介しています。

また、シングルノード前提など制約はあるものの、無償でカンタンにKubernetesを学習されたい方はMinikubeなどの学習用のKubernetesサービスを利用するとよいでしょう(下表No.3)。

Kubernetesの3つのユースケース

次節以降にて、学習用のKubernetesサービス3つの使い方を紹介します。

Minikube

クラウド環境をお持ちでない方や、ローカル環境にKubernetesをインストールして学習したい方にはMinikubeがお薦めです。MinikubeはKubernetesのシミュレータで、ローカル開発や学習用に利用できます。シングルノードでの利用に限られますので、複数ノードでのクラスタ構築したい方は、Google Cloud PlatformのGoogle Kubernetes Engine(GKE)やMicrosoft AzureのAzure Kubernetes Service(AKS)などのクラウド環境を利用するとよいでしょう。

Minikubeの動作には以下の3条件が必要です。いずれもbrewコマンドのみで簡単にインストールできます。

  • Minikube本体のインストール
  • KVM、VirtualBox、Hyper-V、xhyve driverなどのHypervisorのインストール
  • kubectlのインストール

まずはMinikubeをインストールします。

$brew cask install minikube
==> Satisfying dependencies
All Formula dependencies satisfied.
==> Downloading https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-darwin-amd64
################################################ 100.0%
==> Verifying SHA-256 checksum for Cask 'minikube'.
==> Installing Cask minikube
==> Linking Binary 'minikube-darwin-amd64' to '/usr/local/bin/minikube'.
  minikube was successfully installed!

OSX用のHypervisorとしてvirtualboxをインストールします。

$brew cask install virtualbox
Updating Homebrew...
==> Caveats
To install and/or use virtualbox you may need to enable their kernel extension in

  System Preferences → Security & Privacy → General

For more information refer to vendor documentation or the Apple Technical Note:

  https://developer.apple.com/library/content/technotes/tn2459/_index.html

==> Satisfying dependencies
==> Downloading https://download.virtualbox.org/virtualbox/5.2.18/VirtualBox-5.2.18-124319-OSX.
################################################ 100.0%
==> Verifying SHA-256 checksum for Cask 'virtualbox'.
==> Installing Cask virtualbox
==> Running installer for virtualbox; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is Oracle VM VirtualBox
installer: Upgrading at base path /
installer: The upgrade was successful.
  virtualbox was successfully installed!

kubectlをインストールします。

$brew install kubectl
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/kubernetes-cli-1.12.0.high_sierra.bottle.tar.gz
################################################ 100.0%
==> Pouring kubernetes-cli-1.12.0.high_sierra.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
  /usr/local/Cellar/kubernetes-cli/1.12.0: 208 files, 50.6MB

Minikubeを実行してみましょう。[hello-minikube]という名称にて起動します。以下の例では、起動を確認後、削除しています。

$minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

$kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080 deployment.apps/hello-minikube created
deployment.apps/hello-minikube created

$kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
hello-minikube-5497477645-jxchr   1/1       Running   0          39s

$kubectl delete services hello-minikube
service "hello-minikube" deleted
$kubectl delete deployment hello-minikube
deployment.extensions "hello-minikube" deleted
$minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

Docker for Mac

Minikube以外の方法としてDocker for Macを使ってKubernetesを試すことができます。筆者はDockerのバージョンとしてDocker 18.06.1-ceを使いました。17.12 CE以降に導入された比較的新しい機能ですので、古いバージョンのDocker for Macをお使いの方は、最新版にアップデートしてください。

特徴的なのは、起動をGUIから行う点です。メニューバーのDockerアイコンを右クリックし、[preferences]をクリックします。

表示された画面で[Enable Kubernetes]と[Show system containers (advanced)]にチェックを入れます。

Kubernetesの設定

しばらく待つと、[Kubernetes is running]になります。

右下に[Kubernetes is running]が表示される

kubectlがMinikubeと競合していますので、[docker-for-desktop]に切り替え、利用します。

$kubectl config get-contexts
CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
          docker-for-desktop   docker-for-desktop-cluster   docker-for-desktop
*         minikube             minikube                     minikube
$kubectl config use-context docker-for-desktop
Switched to context "docker-for-desktop".
$kubectl config get-contexts
CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
*         docker-for-desktop   docker-for-desktop-cluster   docker-for-desktop
          minikube             minikube                     minikube

Play with Kubernetes classroom

ブラウザベースで即座にKubernetesを利用することもできます。「Play with Kubernetes classroom」にアクセスし、イントロダクションに従って数コマンド投入するのみで、マルチノードの環境を構築できます。

Play with Kubernetes classroom画面

上図右上がnode1、右下がnode2です。それぞれのnodeにおいて、投入するコマンドをコピー&ペーストして実行してください。

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

// node1において表示されたコマンドをnode2に貼り付け
[node2 ~]$ kubeadm join --token 39a42e.b99851e0ceac13b2 192.168.0.8:6443 --discovery-token-ca-cert-hash sha256:61ae61bd8878937e851a8d7a57f7f9a819d9eeb11d00793d8edbf07b524cd620


[node1 ~]$ kubectl apply -n kube-system -f \
>     "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d '\n')"

[node1 ~]$ kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
node1     Ready     master    6m        v1.10.2
node2     Ready     <none>    5m        v1.10.2

Kubernetes Dashboard

上述までの紹介した3つのKubernetesサービスはいずれもkubectlコマンドを用いるものでした。kubectlコマンドが苦手な方はブラウザからのKubernetes操作を可能にするダッシュボードを利用するとよいでしょう。

1コマンドでインストールが完了し、kubectl proxyで起動します。

$kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

$kubectl proxy
Starting to serve on 127.0.0.1:8001

ブラウザからダッシュボードのURL(http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy)にアクセスします。認証を求められますが、ここでは[スキップ]をクリックします。

アクセス設定

Kubernetesで構築するクラスタの情報をGUIで確認可能です。

ダッシュボード

*  *  *

MinikubeやPlay with Kubernetes classroomなど無料で使えるKubernetesツールを紹介しました。

商用利用にはEKS(Amazon)やGKE(Google)などのクラウドベンダー提供のマネージドサービスか、OpenShift(Redhat)やPKS(Pivotal)などの構築ツールを用いる方法などがあります。読者の皆さまがお使いのクラウド環境などに応じて選択するとよいでしょう。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。