余ったPC1台を使ってオンプレKubernetesクラスタを構築してみる
はじめに
仕事ではGoogle Kubernetes Engine (GKE)を使ってのKubernetesクラスタ構築をしています。
仕事以外の時間でもKubernetesクラスタをゴリゴリ触ってみたいと思いました。
そこで、家の使っていない古いPCを使ってKubernetesクラスタをいちから作成してみることにしました。
(2020-01-26 追記)
当エントリでまとめたセットアップ手順をシンプルなシェルスクリプトにまとめ、公開しました。
クラスタを構成する「マスタサーバ」と「ノード」の2つの役割はどうするの?
Kubernetesクラスタには、マスターサーバとノードと言われるサーバが必要になります。
ざっくりいうと、 マスターサーバは管理者からの要求に答えてノード(後述)にコンテナを立ち上げたり、ノードに存在するコンテナの状況を監視します。
ノードはコンテナそのものを動かすサーバです。
「Hadoop HDFS」におけるマスタノードとスレーブノードに似ていますね。
したがって、できる限りマスターサーバは余裕のある状況が望ましいです。
ただし今回は検証環境である、またお金をかけたくないなどの理由から、
「マスタサーバ」x1台と「ノード」x1台を物理サーバx1台に共存させたいと思います。
セットアップ
Kubernetesクラスタを構築していきます。
OSのディストリビューション・バージョンを確認
さて、今回余っていた古いPCには Ubuntu18.04
がインストールされていたため、その環境をそのまま利用します。
Docker のインストール
セットアップ後は以下のコマンドを実行し、OSリブート時にもサービスが自動起動するようにしておきます。
正常にセットアップされたか配下のコマンドを実行すれば確認できます。
**※まずここで詰まると先に進めないので、確実に docker ps
が正しく動作しているかを確認しましょう。
kubeadm のインストール
※CentOSの場合についても試すことができたので掲載しておきます。
Ubuntuの場合
apt
のリポジトリにKubernetesの設定を追加します。
準備ができたのでインストールしてみます。
正常にインストールできたか確認してみます。
CentOSの場合
CentOSの場合はyum
でインストールできるようにリポジトリを追加します。
インストールしていきます。
正常にインストールできたか確認してみます。
マスターサーバの初期化
kubeadm
コマンドを使って、マスターサーバを初期化します。
- Swapが有効になっていると初期化できないようなので、無効にしておきます。
- --pod-network-cidr=10.244.0.0/16 のオプションはflannel(後述)というKubernetes上の仮想ネットワークを構成するための設定となります。
多少時間がかかるため、気長に待ちましょう。
マスターサーバと通信するための設定と動作確認
マスターサーバの初期化が終了しました。
先程のログにかかれていますが、現在のログインユーザでKubernetesクラスタと通信するための設定を行います。
kubectl version
でバージョンが表示されるかを確認します。
flannelをデプロイ
Kubernetes上の仮想ネットワークを構成するためのコンポーネントをインストールします。
- ネット上に掲載されているflannelのインストールコマンドは現在では古い場合が多いことに注意!
- これは当ブログにも言えることです!!
- 2020-01-20現在は、以下のmasterブランチの構成情報ファイルが利用できました。
マスタノードにポッドをスケジュールできるようにする
kubeadm
で初期化したマスターサーバは、デフォルトの状態では「ノード」の役割を持ちません。
通常は「マスタサーバ」は余裕のある状況が望ましいですのですが、何度も言いますが今回は検証環境であるため、「ノード」の役割を兼任させてしまいます。
kubelet
サービスを有効化
「ノード」の役割を担当する kubelet
というサービスを、OS起動時にも自動的に立ち上がるようにしておきます。
ここまで行けばクラスタの構築は完了です。
Apacheサーバを立ち上げてみる
Kubernetesクラスタを使って、Apacheサーバを立ち上げてみます。
細かい説明は省略しますが以下のコマンドを実行してみます。
ブラウザあるいはcurl
コマンドで http://localhost:8080
にアクセスしてみます。
無事Webページが見れるはずです。
ひとこと
1台のKubernetesクラスタはどこまで死なずに稼働できるでしょうね。
試してみます。
ディスカッション
コメント一覧
まだ、コメントがありません