kubeadm を使って Kubernetes v1.13 をインストールしてみた

こんにちは。サイオステクノロジー OSS サポート担当 Y です。

本日、新元号 “令和” が発表されました。

IT システムの構築や運用をされているエンジニアの皆様の中には、5月に向けた新元号対応の作業が始まっている方も多いのではないでしょうか。弊社のサポート部門にも、新元号発表前から各 OSS 製品やライブラリにおける元号変更に伴う影響有無等に関するお問い合わせを複数頂いております。

さて、新元号が発表されて間もない状況であり元号関連の情報を期待されていた方には申し訳ないのですが、残念ながら今回の記事は元号に関する内容ではありません。

今回は、kubeadm を利用して Kubernetes v1.13 をオンプレ環境の仮想マシン上にシングルノード構成でインストールしてみました。(※以下の内容は CentOS 7.6/kubeadm v1.13 にて検証しています。)

■はじめに

昨今のトレンドであるコンテナ技術において欠かすことができないコンテナオーケストレーションツールのデファクトスタンダードになっている Kubernetes ですが、Kubernetes クラスタを一から自分で構築するのにはそれなりの手間がかかってしまいます。

また、AWS, Azure, GCP 等の主要なクラウドサービスを利用すれば、そのような構築の手間をあまりかけずに Kubernetes を利用することも可能ですが、個人での検証や学習用として使うには少しハードルが高いと感じる方もいらっしゃるのではないでしょうか。

そこで今回は、(できるだけ) 簡単に Kubernetes をインストールする方法として、kubeadm というツールを使った (できるだけ) 簡単な Kubernetes のインストール方法を試してみました。

なお、今回の記事では可能な限りシンプルな構成とするために、1台の仮想マシン上にシングルノード構成の Kubernetes をインストールしています。

■OS (CentOS) の設定 (swap 無効化)

初めに、Kubernetes をインストールする OS (CentOS) 側の設定を実施します。

こちらのドキュメントに記載されている通り、kubeadm の要件として swap を無効にする必要があるため、swap を無効にします。

■Docker のインストール

次に、コンテナランタイムのインストールです。ドキュメントを参考に、Docker をインストールします。

(こちらのドキュメントに記載されている通り、Kubernetes では複数のコンテナランタイムを利用することが可能ですが、今回はデフォルトの Docker を利用します。)

■kubeadm, kubelet, kubectl のインストール

最後に、kubeadm, kubelet, kubectl のインストールです。

こちらのドキュメントを参考にしてインストールします。

これで、必要なパッケージ (コンポーネント) のインストールは完了です。

■Kubernetes の起動

それではいよいよ、Kubernetes を起動してみます。

ドキュメントを参考にしながら、先ほどインストールした kubeadm にいくつかのオプションを指定し、実行します。

“Your Kubernetes master has initialized successfully!” と出力されれば、起動完了です。ただし、実際に利用するためにはもう少し作業を実施する必要があります。

まず、Kubernetes 用の CLI ツールである kubectl で先ほど起動した Kubernetes サーバに接続 (コマンドを送信) できるように、環境変数 KUBECONFIG を設定します。

(今回は root ユーザで kubectl を利用する想定ですが、一般ユーザで kubectl を利用する場合は代わりに以下の様なコマンドを実行します)

次に、Kubernetes クラスタ内のネットワーク (クラスタ内の Pod 間の通信を行うためのネットワーク) を構築するために、pod network add-on をインストールします。(複数の pod network add-on から選択することが可能ですが、今回は Flannel を利用します。)

最後に、Master Node に (システムコンポーネントではない) ユーザ作成の Pod をデプロイできるようにするために、Master Node に設定されている Taint の設定を外します。(デフォルトだと、ユーザ作成の Pod は Master Node にデプロイされません。今回は Master Node 1台のシングルノード構成であるため、この作業が必要です。)

これで、全ての作業が完了です。

特に問題がなければ、kubectl コマンドを使って以下の様にバージョン情報やシステムコンポーネント (Pod) の情報を取得することができるはずです。

■動作確認

前述した方法で構築した Kubernetes クラスタを利用して NGINX コンテナを利用した動作検証を実施してみます。

今回は、以下の様なマニフェスト (YAML ファイル) を作成し、kubectl apply コマンドで適用します。

マニフェストの詳細は割愛しますが、大雑把に説明すると以下の様な設定を実施しています。

・NGINX コンテナ (Pod) を 3つデプロイ。
・Kubernetes をインストールした仮想サーバの 30080番 port 宛の通信を、いずれかの NGINX コンテナの 80番 port に転送。

また、どの NGINX コンテナ (Pod) からのレスポンスであるかを判断できるように、Pod 名をレスポンス (index.html) に含めるようにしています。

デプロイが完了すると、各リソースの状態が以下の様になると思います。

それでは、実際に Kubernetes をインストールした仮想サーバの 30080番 port 宛てに HTTP リクエストを投げてみます。

すると、上記の様に正常に HTTP レスポンスが返ってきました。

何回かリクエストを実行すると、レスポンスに含まれている Pod 名が変わっている (複数の NGINX コンテナ宛てにリクエストが振り分けられている) ことも確認できます。

■まとめ

今回は、kubeadm を利用して “できるだけ” シンプルかつ簡単にシングルノード構成の Kubernetes クラスタを構築してみましたが、インストールから起動までそれなりの数の手順があり、”yum でインストールして systemctl で起動” 程のお手軽感ではありませんでした。

しかし、多少手間はかかってしまいますが、オンプレ環境の仮想サーバ上に Kubernetes をインストールして簡単な動作検証を実施することができました。仮想サーバ 1台のみで構築することができ、複数台の仮想サーバを用意する必要もありません。

今回の様なシングルノード構成の場合、Pod のスケジューリングやノード障害発生時の動作等、一部の機能の動作検証を実施することはできませんが、個人での検証や学習用途として試してみるのには丁度良いのではないでしょうか。

また、本記事を作成中に Kubernetes v1.14 がリリースされたため、機会があれば新しいバージョンでも検証を実施してみようと思います。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*