主題の通り、学習用に Cloud9 上に minikube 環境を構築します。
少々手間どったので備忘録しておきます。
環境
- Cloud9
- OS
- AmazonLinux2
- インスタンス
- t3.medium(vCPU:2、Memory:4GiB)
- Docker はインストール済み
参考サイト
- https://qiita.com/kau/items/34605e04b4a81610e668
- https://tech.virtualtech.jp/entry/2022/07/06/120314
- https://qiita.com/sotoiwa/items/27a3e55588cd747bcf21
インストール
基本は、参考サイト様の「インストール」章のとおりです。
だたし、一部うまくいかないところがあったので、そちらをうまいことして処理します。
前提のインストール
- たぶん Docker 環境構築されてたら不要かもしれないが一応実行
$ sudo yum update
$ sudo yum install docker.io
$ sudo yum install conntrack
kubectl(kubernetesのCLI操作ツール) をインストール
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
minikube をインストール
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ chmod +x minikube
$ sudo mv minikube /usr/local/bin/
# 認識できているか確認
$ minikube version
minikube version: v1.27.1
commit: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cri-dockerd のインストール
本来であれば minikube start --vm-driver=none
とすればうまくいくはずだと思うのですが、実行すると以下の通りエラーになりました。
minikube start --vm-driver=none
* minikube v1.27.1 on Amazon 2
* Using the none driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Restarting existing none bare metal machine for "minikube" ...
* Exiting due to NOT_FOUND_CRI_DOCKERD:
* Suggestion:
The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.
Please install cri-dockerd using these instructions:
https://github.com/Mirantis/cri-dockerd#build-and-install
エラーの内容を直訳すると、「Kubernetes 1.24以降のバージョンでは、cri-dockerd が必要」とのことです
そのため、cri-docerd
をインストールします。
手順は以下の github にありますが、ここでも一応記載しておきます。
GitHub - Mirantis/cri-dockerd: dockerd as a compliant Container Runtime Interface for Kubernetes
dockerd as a compliant Container Runtime Interface for Kubernetes - Mirantis/cri-dockerd
# まず、cri-dockerdをビルドするために、GOのコンパイラをインストールする
$ wget https://storage.googleapis.com/golang/getgo/installer_linux
$ chmod +x ./installer_linux
$ ./installer_linux
$ source ~/.bash_profile
# cri-dockerd のビルド&インストール
$ git clone https://github.com/Mirantis/cri-dockerd.git
$ cd cri-dockerd
$ mkdir bin
$ go build -o bin/cri-dockerd # ここの処理が不安定だった。10分くらい応答がなかったからctrl+c して中止して、とか繰り返してたら3回めくらいに成功した。そのときは3分くらい応答がなかった
$ mkdir -p /usr/local/bin
$ sudo install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
$ sudo cp -a packaging/systemd/* /etc/systemd/system
$ sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable cri-docker.service
$ sudo systemctl enable --now cri-docker.socket
crictl のインストール
このまま minikube start --vm-driver=none
すると、以下のようなエラーになりました。
$ minikube start --vm-driver=none
* minikube v1.27.1 on Amazon 2
* Using the none driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Restarting existing none bare metal machine for "minikube" ...
* OS release is Amazon Linux 2
X Exiting due to RUNTIME_ENABLE: Temporary Error: sudo crictl version: exit status 1
stdout:
stderr:
sudo: crictl: command not found
*
╭─────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ * If the above advice does not help, please let us know: │
│ https://github.com/kubernetes/minikube/issues/new/choose │
│ │
│ * Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue. │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────────╯
ググってみると、こちらの記事に解決方法が載っていました。
インストールします。
$ VERSION="v1.25.0"
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
$ sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
$ rm -f crictl-$VERSION-linux-amd64.tar.gz
また、さらに sudo で crictl が実行できるように、/usr/local/binに環境変数を通します。
$ sudo visudo
以下の通り記述を変更します。
- Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
+ Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin
実行
以上の準備により、以下を実行してみます。
$ minikube start
いろいろ出力されますが、
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
と出たら多分成功です。
以下を実行して動作しているか確認します。
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
コメント