openshift(k8s)とminikubeの違いでいろいろハマった話の続きです。
minikubeをsystemdに追加し、OS起動時に自動で起動されるようにしました。
環境
・Amazon EC2
・Ubuntu 22.04 LTS
serviceファイル作成
/etc/systemd/system/minikube.service
[Unit]
Description=Minikube Cluster
After=containerd.service docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/minikube start
RemainAfterExit=true
ExecStop=/usr/local/bin/minikube stop
StandardOutput=journal
User=minikube実行ユーザ
Group=docker
[Install]
WantedBy=multi-user.target
ポイント1)
After=containerd.service docker.service
containerd, dockerの起動後に起動されるようにしています
ポイント2)
Type=oneshot
RemainAfterExit=true
Type=oneshotとすることでExecStartで実行されたコマンドが正常終了することでユニットが開始されたと判定されます。
デフォルトのType=simpleだと、ExecStartを実行したタイミングでユニットが開始されたと判定されてしまうそうです。
また、RemainAfterExit=trueとすることでminikubeコマンドが返ってきてプロセスが終了してしまっても、Serviceをアクティブとみなす設定となります。
設定反映
sudo systemctl daemon-reload
sudo systemctl enable minikube.service
sudo systemctl start minikube.service
起動確認
$ minikube status
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
$ sudo systemctl status minikube.service
● minikube.service - Minikube Cluster
Loaded: loaded (/etc/systemd/system/minikube.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2023-03-01 18:22:26 JST; 14min ago
Process: 1436 ExecStart=/usr/local/bin/minikube start (code=exited, status=0/SUCCESS)
Main PID: 1436 (code=exited, status=0/SUCCESS)
CPU: 4.205s
Mar 01 18:21:14 xxx bash[1437]: * Preparing Kubernetes v1.26.1 on Docker 20.10.23 ...
Mar 01 18:22:14 xxx bash[1437]: * Configuring bridge CNI (Container Networking Interface) ...
Mar 01 18:22:15 xxx bash[1437]: * Verifying Kubernetes components...
Mar 01 18:22:15 xxx bash[1437]: - Using image gcr.io/k8s-minikube/storage-provisioner:v5
Mar 01 18:22:21 xxx bash[1437]: * Enabled addons: storage-provisioner, default-storageclass
Mar 01 18:22:26 xxx bash[1437]: * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
再起動後に自動でminikubeが起動できていることを確認して終わりです。
これで夜間はEC2を止めて、朝に起動させるという運用が可能になりました。