7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kubernetesクラスタ構築ツールのkindを使って見る

Last updated at Posted at 2019-12-19

Kubernetesの挙動を確認したくなるたびに毎回kubeadmでクラスタを立ち上げるのがめんどくさかったので気軽に構築できるツールがないか探していたところ,kindという構築ツールを見つけたので試して行こうと思います.

#環境
Mac OS :Catalina version 10.15.2

#Kubernetesとは

Kubernetesについて軽く説明すると,オープンソースのコンテナオーケストレーションエンジンです.そしてコンテナはプログラム実行環境の仮想化方法の1つです.
Kubernetesを用いる事で複数台のコンピュータ上のコンテナを管理できます.
Kubernetesクラスタの基本的な構成は以下になります.

Kubernetesの構成4.png

KubernetesクラスタはMaster NodeとWorkerノードの2つのグループに別れます.Master Nodeでユーザからのコンテナ配置命令の受付,スケジューリングなどを行い,Worker Nodeで実際にコンテナを実行します.
コンテナのスケジューリングはPodという単位で行います.
Pod間通信を行いたい場合やクラスタ外からPodと通信したい場合はServiceを通して通信します.

#kindとは

kind(kubernetes in docker)は,1台のコンピュータ上でのKubernetes構築ツールです.Kubernetes自身をテストすることを目的に作成されています.
Dockerコンテナを1つのノードとしてみなし,そのノードコンテナ上でDockerコンテナを実行することで,1台のコンピュータ上でマルチノードクラスタを構築できます.
kindの構成3.png

#インストール

kindを動かすには,dockerが必要です.

$brew install docker

でインストールできます.
Kubernetesクラスタにコンテナを配置するため,Kuberenetesコマンドラインインタフェースであるkubectlをインストールします.

$brew install kubectl 

最後にkind自身をインストールします.

$brew install kind

#kindでクラスタ作成

kindでクラスタを作成して見ます.Master Nodeの構成とWorker Nodeの構成をyamlファイルで記述し,--configオプションで渡します.渡さなかった場合はMaster Node1台のクラスタが作成されます.

$kind create cluster --config a-controller-a-worker-mapping.yaml
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.16.3) 🖼
 ✓ Preparing nodes 📦 
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Thanks for using kind! 😊

使用ファイルは以下の通りです.今回は1台のMaster Nodeと1台の Worker Nodeの構成で作成します.

  • role: control-plane
    がMaster Nodeの設定で,
  • role: worker
    がWorker Nodeの設定です.
a-controller-a-worker-mapping.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
    listenAddress: "0.0.0.0" #オプション defaultは "0.0.0.0"
    protocol: tcp # オプション defaultはtcp

extraPortMappingsでクラスタ外からコンテナへ通信できるようにします.
extraPortMappings3.png

#コンテナのデプロイ

nginxをデプロイして見ます.

$kubectl apply -f nginx.yaml 
pod/nginx created
service/nginx-svc created

使用ファイルは以下の通りです.

nginx.yaml
apiVersion : v1
kind : Pod
metadata :
 name : nginx
 labels :
   app : nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - protocol: TCP
    targetPort: 80
    port: 80
    nodePort: 30000

Podに対応するServiceを作成する事で,クラスタ外からの通信が可能になります.

nginx_svc4.png

ブラウザからアクセスして見ます
nginx.png

無事デプロイできました.

#後片付け
nginxの削除

$kubectl delete -f nginx.yaml 
pod "nginx" deleted
service "nginx-svc" deleted

クラスタの削除

$kind delete cluster
Deleting cluster "kind" ...

#kubeadmとの比較

Kubernetesクラスタ構築ツールとして有名なものにkubeadmがあります.kindとは違い複数のコンピュータ上でKubernetesクラスタを構築でき,本番環境にも使用できます.しかし,kindは1台分の作業でクラスタ構築できるのに対し,kubeadmは立ち上げるノード分の作業が発生するのでめんどくさいです.ですのでKubernetesの挙動を確かめたい時はkindの方が良いと思います.

#minikubeとの比較

kindと同じ1台のコンピュータ上でのKubernetes構築ツールとして有名なものにminikubeがあります.クラスタ構築に必要な作業量はkindとほぼ変わりませんが1台の仮想マシンがMaster NodeとWorker Nodeの両方の役割を担っています.さらにノード数を増やす事ができず,挙動を試せる幅が狭くなります.例えばKubernetesの機能を使って複数台あるWorker Nodeの内のある特定のWorker Nodeにコンテナをデプロイするということを試せません.なのでKubernetesの挙動を確かめたい時はkindの方が良いと思います.

#まとめ

kindを使用することで気軽にKubernetesの挙動を確認できます.なのでこれからKubernetesの挙動を確認したいときはkindを使っていこうと思います.

#参考
kind
kubeadm
minikube
Kubernetes ドキュメント
Kubernetes実践ガイド クラウドネイティブアプリケーションを支える技術 (impress top gear)

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?