Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースシステムです。Kubernetesはエンタープライズ対応で、様々なプラットフォームにインストールできます。Ubuntu ServerでKubernetesを起動して実行する方法については既に説明しました(「UbuntuにKubernetesを素早くインストールする方法」を参照)。今回は、CentOS 7でKubernetesクラスターをセットアップするプロセスを詳しく説明します。これにより、コンテナ化されたアプリケーションにとって優れたワンツーパンチが実現します。
参照: クイック用語集: ストレージ (Tech Pro Research)
必要なもの
3 台の CentOS 7 サーバー (次の IP アドレス) を使用してデモを行います。
- kubemaster: 192.168.1.99
- kube2: 192.168.1.109
- kube3: 192.168.1.167
IPアドレスは必要に応じて変更してください。また、3台のサーバーすべてでルートアクセスが必要になります。本番サーバーへのインストールを試みる前に、まず仮想マシンでテストすることをお勧めします。
それではインストールしてみましょう。
インストール前の構成
まず最初に、/etc/hostsファイルを設定して、各マシンがホスト名で相互にpingできるようにする必要があります。各マシンで su コマンド(rootユーザーに変更)を実行し、nano /etc/hostsコマンドでファイルを編集します。ファイルの末尾に以下の行を追加します(IPアドレスは必要に応じて調整してください)。
192.168.1.99 kubemaster
192.168.1.109 kube2
192.168.1.167 kube3
そのファイルを保存して閉じます。
SELinuxとスワップを無効にする
次に、SELinuxとスワップの両方を無効にする必要があります。3台のマシンすべてで、以下のコマンドを実行してください。
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
次に、次のコマンドを使用して、スワップを無効にします (3 台のマシンすべてで)。
swapoff -a
各サーバーの再起動時にスワップが再度有効化されないようにする必要があります。/etc/fstabを開き、以下のようにスワップエントリをコメントアウトしてください。
# /dev/mapper/centos-swap swap swap defaults 0 0
br_netfilterを有効にする
次のトリックでは、3台のサーバーすべてでbr_netfilterカーネルモジュールを有効にします。これは以下のコマンドで実行できます。
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
Docker-ceをインストールする
必要なDockerツールをインストールしましょう。3台のマシンすべてに、以下のコマンドでDocker-ceの依存関係をインストールします。
yum install -y yum-utils device-mapper-persistent-data lvm2
次に、次のコマンドで Docker-ce リポジトリを追加します。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
次のコマンドで Docker-ce をインストールします。
yum install -y docker-ce
Kubernetesをインストールする
これも3台のサーバーすべてで実行します。まず、yumのリポジトリエントリを作成する必要があります。これを行うには、 nano /etc/yum.repos.d/kubernetes.repoコマンドを実行し、以下の内容を追加します。
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
ファイルを保存して閉じます。次のコマンドでKubernetesをインストールします。
yum install -y kubelet kubeadm kubectl
インストールが完了したら、3台のマシンすべてを再起動します。各マシンが再起動したらすぐにログインし、suコマンドでrootユーザーになります。
Cグループの変更
ここで、Docker-ceとKubernetesが同じコントロールグループ(cgroup)に属していることを確認する必要があります。デフォルトでは、Dockerは既にcgroupfsに属しているはずです(コマンドdocker info | grep -i cgroupで確認できます)。Kubernetesをこれに追加するには、以下のコマンドを実行します。
sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
次のコマンドを使用して、systemd デーモンと kubelet サービスを再起動します。
systemctl daemon-reload
systemctl restart kubelet
Kubernetesクラスターを初期化する
これでKubernetesクラスターを初期化する準備が整いました。これはkubemasterマシン上でのみ実行されます。kubemasterで次のコマンドを実行します(IPアドレスは必要に応じて調整してください)。
kubeadm init --apiserver-advertise-address=192.168.1.99 --pod-network-cidr=192.168.1.0/16
これが完了すると (30 秒から 5 分程度かかります)、出力にノードの参加コマンドが含まれるようになります (図 A )。
図A

完了したら、kube2 に移動してコマンドを発行します (ニーズに合わせて IP アドレスを調整します)。
kubeadm join 192.168.1.99:6443 --token TOKEN --discovery-token-ca-cert-hash DISCOVERY_TOKEN
ここで、TOKEN と DISCOVERY_TOKEN は、初期化コマンドの完了後に表示されるトークンです。
Kubernetesの設定
Kubernetes を使用する前に、いくつかの設定を行う必要があります。以下の 3 つのコマンドを実行します(新しい .kube 設定ディレクトリを作成し、必要な設定ファイルをコピーし、ファイルに適切な所有権を与えます)。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
フランネルネットワークを展開する
ここで、次のコマンドを使用して、フランネル ネットワークをクラスターにデプロイする必要があります。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
ノードの確認
デプロイ コマンドが完了したら、kubectl get nodes コマンドを発行して、マスター上の両方のノードを確認できるようになります (図 B )。
図B

準備完了
おめでとうございます!これでポッド用のKubernetesクラスターが準備完了です。次回Kubernetesのトピックで、最初のポッドをデプロイする方法を実演します。それでは、クラスタリングを楽しんでください!