0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【KCNA】Rocky Linux 9でDocker Engine・kubectl・kindをインストールする(Part1)

0
Posted at

はじめに

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リリースに記載されているノードイメージ一覧を確認してください。

参考:kind v0.24.0 リリース情報

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クラスタへの接続確認は行いません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?