はじめに
Rocky Linux 9に、Kubernetesの検証環境で使用する以下のツールをインストールします。
| ツール | 用途 |
|---|---|
| Docker Engine | コンテナの実行・管理 |
| kubectl | Kubernetesクラスタの操作 |
| kind | コンテナをノードとして使用するKubernetesクラスタの作成 |
本記事では、kubectlを v1.31.4、kindを v0.24.0 に固定します。Docker Engineのバージョンは固定しません。
対象範囲は、ツールのインストールと動作確認までです。
1. 前提環境
OSの確認
cat /etc/redhat-release
出力例:
Rocky Linux release 9.8 (Blue Onyx)
作業の前提
- CPUアーキテクチャはx86_64(amd64)
-
sudoを実行できる一般ユーザーで作業する - パッケージやバイナリのダウンロード先へアクセスできる
-
curlがインストールされている
本記事のlinux/amd64は、Intel・AMDの64ビットx86環境向けです。ARM64環境では、対応するバイナリに変更してください。
2. 既存のコンテナ関連パッケージを削除する
Docker Engineの導入にあたり、既存のコンテナ関連パッケージを削除します。
以下は、PodmanやBuildahを使用しない検証環境を前提とした手順です。
sudo dnf remove podman podman-docker buildah runc
削除対象と依存関係を確認してから、処理を実行してください。
元の手順にあるbuildshは、buildahの誤記として修正しています。また、削除時のエラーを見落とさないよう、|| trueは付けていません。
3. Docker Engineをインストールする
リポジトリの登録とパッケージのインストール
Docker公式のCentOS向けリポジトリを登録し、Docker Engineをインストールします。
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io
各パッケージの役割は以下のとおりです。
| パッケージ | 役割 |
|---|---|
dnf-plugins-core |
リポジトリを管理するconfig-managerなどを提供 |
docker-ce |
コンテナを管理するDocker Engine本体 |
docker-ce-cli |
Docker Engineに操作を依頼するdockerコマンド |
containerd.io |
Docker内部でコンテナの実行やライフサイクル管理を担う |
dnf config-manager --add-repoは、パッケージの配布元であるリポジトリを登録するコマンドです。
リポジトリ登録手順は、Docker公式ドキュメント(CentOS)を参考にしています。
Dockerの起動と自動起動の設定
sudo systemctl enable --now docker
-
enable:OS起動時にDockerを自動起動する -
--now:自動起動の設定に加え、その場でDockerを起動する
4. プロキシを設定する(必要な場合のみ)
Dockerがイメージを取得する際にプロキシを経由する必要がある場合は、Dockerサービスにプロキシ設定を追加します。
プロキシが不要な環境では、この節をスキップしてください。
設定ファイルの作成
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf > /dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://proxy.example.co.jp:8080"
Environment="HTTPS_PROXY=http://proxy.example.co.jp:8080"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.0/12"
EOF
proxy.example.co.jp:8080は、利用するプロキシサーバーのアドレスとポートに置き換えてください。
NO_PROXYの値も環境に合わせて変更します。10.96.0.0/12は例であり、実際に使用するネットワーク範囲に合わせる必要があります。
設定の反映と確認
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker
設定内容の解説
| 項目 | 意味 |
|---|---|
docker.service.d |
Dockerサービスの設定を追加・上書きするファイルの配置先 |
[Service] |
サービスの動作に関する設定セクション |
Environment= |
サービス起動時に渡す環境変数 |
HTTP_PROXY |
HTTP通信に使用するプロキシ |
HTTPS_PROXY |
HTTPS通信に使用するプロキシ |
NO_PROXY |
プロキシを経由せず、直接接続する宛先 |
teeは標準入力の内容をファイルへ書き込みます。既存のproxy.confがある場合は上書きします。ここでは> /dev/nullで画面への出力を抑えています。
<<'EOF'は、終端のEOFまでを入力として渡すヒアドキュメントです。EOFを引用符で囲むことで、入力内の変数展開などを抑止します。
HTTPS通信でも、プロキシ自体への接続方式がHTTPであれば、HTTPS_PROXYにはhttp://...を指定します。
この設定はDockerサービス向けです。dnfやシェルから実行するcurlにもプロキシが必要な場合は、それぞれ別途設定してください。
参考:Docker公式ドキュメント:Daemon proxy configuration
5. sudoなしでDockerを実行できるようにする
現在のユーザーをdockerグループに追加します。
sudo usermod -aG docker "$USER"
グループ変更を現在の作業に反映するため、次のコマンドで新しいシェルを開始します。
newgrp docker
その後、動作確認用コンテナを実行します。
docker run --rm hello-world
出力にHello from Docker!が表示されれば、Dockerによるイメージの取得とコンテナの実行を確認できます。
コマンドの解説
| 項目 | 意味 |
|---|---|
usermod -a |
既存のグループ所属を残したまま追加 |
usermod -G docker |
補助グループとしてdockerを指定 |
$USER |
現在のシェルに設定されているユーザー名 |
newgrp docker |
dockerをプライマリグループとする新しいシェルを開始 |
docker run |
イメージからコンテナを作成して起動 |
--rm |
コンテナ終了後、そのコンテナを自動削除 |
--rmで削除されるのはコンテナです。ダウンロードしたイメージは残ります。
グループ変更は、ログアウトしてログインし直すことでも反映できます。
dockerグループへの所属は、実質的にroot相当の権限を与えます。追加するユーザーは適切に管理してください。
参考:Docker公式ドキュメント:Linux post-installation steps
6. kubectlをインストールする
Kubernetes v1.31系のクラスタを操作するため、kubectlをv1.31.4に固定してインストールします。
VER=v1.31.4
curl -fLO "https://dl.k8s.io/release/${VER}/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
コマンドの解説
| 項目 | 意味 |
|---|---|
VER=v1.31.4 |
ダウンロードするバージョンを指定 |
curl -f |
HTTPエラーを失敗として扱う |
curl -L |
リダイレクト先を追跡 |
curl -O |
URL末尾のファイル名で保存 |
install -o root |
配置するファイルの所有者をrootに設定 |
install -g root |
配置するファイルの所有グループをrootに設定 |
install -m 0755 |
所有者に読み書き・実行権限、その他に読み取り・実行権限を設定 |
クラスタとのバージョン互換性
kubectlは、接続先のAPIサーバーに対して、前後1マイナーバージョン以内がサポート範囲です。
たとえば、APIサーバーがv1.31系の場合、バージョン差の条件を満たすkubectlはv1.30系・v1.31系・v1.32系です。この条件は、各リリースの保守期間とは別のものです。
参考:Kubernetes公式ドキュメント:Install and Set Up kubectl on Linux
7. kindをインストールする
kindをv0.24.0に固定してインストールします。
curl -fLo ./kind \
https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64
sudo install -o root -g root -m 0755 kind /usr/local/bin/kind
コマンドの解説
-
-o ./kind:保存先のファイル名をkindに指定する -
./:現在のディレクトリを表す
curlの-O(大文字)はURL末尾の名前で保存し、-o(小文字)は保存先の名前を指定します。
kindとKubernetesのバージョンの関係
kind v0.24.0の標準ノードイメージは、Kubernetes v1.31.0です。本記事でインストールするkubectl v1.31.4とは、同じマイナーバージョンになります。
kindとKubernetesの組み合わせを変更する場合は、各kindリリースに記載されているノードイメージ一覧を確認してください。
8. インストールしたバージョンを確認する
docker --version
kubectl version --client
kind version
元の作業記録での出力例:
Docker version 29.8.2, build 7fc2dff
Client Version: v1.31.4
Kustomize Version: v5.4.2
kind v0.24.0 go1.22.6 linux/amd64
Docker Engineはバージョンを固定していないため、インストール時期やリポジトリの状態によって出力が変わります。
kubectl version --clientは、ローカルのkubectlのバージョンを確認するコマンドです。Kubernetesクラスタへの接続確認は行いません。