【kubernetes/k3s/docker】1コマンドでk3s(kubernetes)クラスター(Control Plane×1/Worker×2)をdocker上で構築する
本記事で行うこと
モチベーション
- docker desktopに付属しているKubernetesはリソースを使うため絶対使いたくないため。 かなり重たいと思う。仕事用PCとかで実行した日には大変です。
- メンバーが学習用に利用できるKubernetes環境がほしかったため。
- docker環境さえあれば同じ環境が作れるようにしたかったため。
- Control Plane×1 Worker×2の構成を作りたかったため。
環境
- intel macbook pro/m1 macbook air
- docker desktop
docker-compose.yamlの準備
- 以下のようなdocker-composeを準備します。
- 忙しい人は以下のリポジトリを用意したのでcloneしてください。
- docker-compose.yaml
- 80,443はingress用のポート、10080,20080,10443,20443はnodeport用ポート、6443はkubectlでアクセスする用のポート。
- k3sのバージョンは何も指定しなければlatestにしています。
version: "3" services: server: container_name: k3s-controller hostname: k3s-controller image: "rancher/k3s:${K3S_VERSION:-latest}" command: - server - --kube-apiserver-arg=cors-allowed-origins=['*'] tmpfs: - /run - /var/run privileged: true environment: - K3S_TOKEN=${K3S_TOKEN:?err} - K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml - K3S_KUBECONFIG_MODE=600 volumes: - k3s-server:/var/lib/rancher/k3s # This is just so that we get the kubeconfig file out - .:/output - ./localdir:/localdir ports: - 6443:6443 - 80:80 - 443:443 agent1: container_name: k3s-worker1 hostname: k3s-worker1 image: "rancher/k3s:${K3S_VERSION:-latest}" tmpfs: - /run - /var/run privileged: true environment: - K3S_URL=https://server:6443 - K3S_TOKEN=${K3S_TOKEN:?err} volumes: - ./localdir:/localdir ports: - 10080:80 - 10443:443 agent2: container_name: k3s-worker2 hostname: k3s-worker2 image: "rancher/k3s:${K3S_VERSION:-latest}" tmpfs: - /run - /var/run privileged: true environment: - K3S_URL=https://server:6443 - K3S_TOKEN=${K3S_TOKEN:?err} volumes: - ./localdir:/localdir ports: - 20080:80 - 20443:443 volumes: k3s-server: {}
k3sクラスターの起動
docker-compose up
- このコマンド一発でクラスタが立ち上がります。
- Docker Desktop 3.4.0以降では、
docker-compose
の代わりにdocker compose
がデフォルトで利用できるようになりました。 docker compose
については以下をご参照ください。
Compose V2 | Docker ドキュメント今回は
docker-compose
で行いますがdocker compose
で可能です。
$ K3S_TOKEN=${RANDOM}${RANDOM}${RANDOM} docker-compose up -d $ K3S_TOKEN=${RANDOM}${RANDOM}${RANDOM} docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- k3s-controller /bin/k3s server --kube-api ... Up 0.0.0.0:443->443/tcp,:::443->443/tcp, 0.0.0.0:6443->6443/tcp,:::6443->6443/tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp k3s-worker1 /bin/k3s agent Up 0.0.0.0:10443->443/tcp,:::10443->443/tcp, 0.0.0.0:10080->80/tcp,:::10080->80/tcp k3s-worker2 /bin/k3s agent Up 0.0.0.0:20443->443/tcp,:::20443->443/tcp, 0.0.0.0:20080->80/tcp,:::20080->80/tcp
kubectlで確認
$ export KUBECONFIG=./kubeconfig.yaml $ chmod 600 kubeconfig.yaml $ kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-controller Ready control-plane,master 38s v1.22.2+k3s2 k3s-worker1 Ready <none> 31s v1.22.2+k3s2 k3s-worker2 Ready <none> 30s v1.22.2+k3s2
k3sクラスターの削除
remove k3s
- 以下のコマンドでk3sの停止&削除
# run docker $ K3S_TOKEN=${RANDOM}${RANDOM}${RANDOM} docker-compose down
remove data
- 以下のコマンドでk3sのデータを削除
- volume名は実行環境のディレクトリによって変わります。
$ docker volume rm mac-k3s-sample_k3s-server