概要
今回は、Kubernetesというツールに関する簡単な概要と、ローカル環境でテストするために必要なツール(kubectl, kind)をインストールし、それらを使ってみる部分を解説したいと思います。
今回の内容については、自分が以下の本を用いて学んだことのまとめになります。こちらの本は「とりあえずKubernetesを触ってどんなものか実感する」ということが目的のため、実験をしながらひとつひとつ理解していくのにうってつけの本でした。
今日紹介すること以上の内容がたくさん書かれているので、是非お手にとってみてください!
前提
- Docker Desktopをインストールしている
Kubernetes (K8s) とは
Kuberntesの概要
Kubernetes (K8s) とは、コンテナオーケストレーションツールの一つで、コンテナ化されたアプリケーションを自動でデプロイ・スケーリング・管理するためのオープンソースのプラットフォームです。
以下の記事において、Dockerを紹介しましたが、こちらはコンテナ型仮想化を用意にしてくれる機能でした。
ざっくり言えば、Kubernetesはコンテナを用いたアプリケーションや環境の管理を用意にしてくれるツールと言えます。
例えば、Kubernetesを用いることで以下のようなことを楽に行えます。
- 大量のコンテナを一度に管理
- WebサービスをAPI、認証、フロントエンド、DB接続などの小さなサービス毎にコンテナ化し、それらの管理を行える。
- 負荷増大時の自動スケーリング
- コンテナに対する負荷が高まると、自動でスケーリングを行い負荷分散を行える。
- 障害時の自動復旧
- コンテナが落ちた場合であっても、自動的に再起動・再配置を行える。
これらのことから、Kubernetesはコンテナ管理ツールというだけではなく、ある種の運用自動化基盤とも言えます(上記のことを手動でやるのはすごく面倒!)。
アーキテクチャの概要
KubernetesはControl PlaneとWorker Nodeという2つのコンポーネントから成っています。それぞれの役割は以下のとおりです。
- Worker Node
- 実際にコンテナ(アプリケーション)を起動して動かす場所
- Control Plane
- クラスタ全体を管理し、「どのWorker Node」で「何を動かすか」を決める場所
ここで、クラスタとはコンテナ化されたアプリケーションを実行するノード(物理・仮想マシン)の集まりのことです。
Kubernetesをインストールしてみよう
さて、では早速Kubernetesをインストールしてみましょう。筆者のPCはMacbookなので、homebrewを用いたインストール方法を書いてます。公式ページにも記載があるので、興味がある方はそちらも御覧ください。
brew install kubectl
次に、kindをインストールします。kindは、Dockerコンテナの中にKubernetesクラスタを構築するためのもので、とりあえずKubernetesを使ってみたい人にはピッタリのツールです。
ちなみにkindは Kubernetes in Dokcer の略になります。
以下のコマンドでインストールできます。
brew install kind
インストールできたら、以下のコマンドでkindのバージョンが表示されるか見てみましょう。
$ kind version
kind v0.29.0 go1.24.3 darwin/arm64
Kubernetesを使ってみよう
ここでは基本的なクラスターを作ってみましょう。
まずDocker Desktopを起動しておきます。
その次に、以下のコマンドを実行してクラスタを構築します。
kind create cluster --image=kindest/node:v1.29.0
正常に実行できれば、以下の出力がされます。
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.29.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
次に、上の出力内にある次のコマンドを実行して、クラスタに接続してみましょう。
kubectl cluster-info --context kind-kind
以下、出力例です。
Kubernetes control plane is running at https://127.0.0.1:55409
CoreDNS is running at https://127.0.0.1:55409/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
上記コマンドの意味を軽く説明します。
- kubectl
- kubernetesを操作するCLIツール
- cluster-info
- 接続先クラスタの情報を表示するコマンド
- –context kind-kind
~/.kube/config
に登録されているコンテキストを指定。ここではkind-kindという名前のコンテキストを使うように指定している。
~/.kube/config
で指定されているコンテキストとは何かというと、アクセスするためのセットをまとめたものになります。実際に見たほうが早いので、確認してみましょう。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: (省略)
server: https://127.0.0.1:55409
name: kind-kind
contexts:
- context:
cluster: kind-kind
user: kind-kind
name: kind-kind
current-context: kind-kind
kind: Config
preferences: {}
users:
- name: kind-kind
user:
client-certificate-data: (省略)
client-key-data: (省略)
(省略)としている部分は暗号化された文字列が入ってますが、ここでは省略してます。
今回説明したコンテキストとは、上記の内容の中の以下の部分です。
contexts:
- context:
cluster: kind-kind
user: kind-kind
name: kind-kind
これには、cluster=kind-kind、user=kind-kindとあるので、これらの情報を使ってKubernetesクラスターに接続しています。
今回、コンテキスト名をkind-kindにしてクラスタに接続していますが、kind createコマンドを実行したときにこのような名前付けをしませんでした。細かい話ですが、これは以下のような経緯で自動的に名前付けされてます:
kind createコマンドについては、–nameオプションを指定して、クラスタ名を決められます。今回それを指定しなかっため、デフォルト名である「kind」が採用されました。
また、~/.kube/config に追記されるコンテキスト名は「kind-<クラスタ名>」となる。よって、今回接続に使用するコンテキスト名はkind-kindとなります。
最後に、作ったクラスタを削除しましょう。以下のコマンドで削除できます。
kind delete cluster
正常に削除できれば以下の表示がされます。
Deleting cluster "kind" ...
Deleted nodes: ["kind-control-plane"]
このコマンドについては引数にクラスタ名を指定していないため、デフォルトのクラスタ名であるkindが採用されて、kind-kindのみ削除されます。
まとめ
今回は、kindを用いてKubernetesクラスタを作って削除する部分を解説しました。コマンドの使い方を簡単な部分だけ書いただけになるので、具体的にこれらを使ってどういうアプリケーションや環境を構築するというのは、次回以降書いていきたいと思います。
また、冒頭に紹介した「つくって、壊して、直して学ぶ Kubernetes入門」は入門書としてかなりおすすめできるので、もし興味がある方は実際に手にとってみてください。
それではここまで読んでいただき、ありがとうございました!