Kubernetesのインストール(Kubeadm)

今回はAWSのEC2 3台ににKubeadmを使用してマルチノードのKubernetes環境を構築します。

構成

手順の概要

Dockerのインストール

DockerはMaster、Workerの全てのノードでインストールします。
CRI installation - Kubernetes

前提のパッケージのインストール

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

レポジトリの設定

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Dockerのインストール

$ sudo yum install -y docker-ce-18.06.1.ce
Dockerは最新バージョンをインストールするのではなくkubernetesがサポートするバージョンをインストールします。
kubernetesがサポートするバージョンは、kubernetesのCHANGELOGに記載されています。
kubernetes/CHANGELOG

/etc/dockerディレクトリの作成

$ sudo mkdir /etc/docker

Dockerデーモンの設定

$ sudo sh -c 'cat > /etc/docker/daemon.json << EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF'

Dockerデーモンのオプションの変更

$ sudo mkdir -p /etc/systemd/system/docker.service.d

Dockerデーモンの再起動および自動起動設定

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo systemctl enable docker

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

kubernetesレポジトリの追加

$ sudo sh -c 'cat <<EOF > /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
exclude=kube*
EOF'

SELinuxの無効化

$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

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

$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

kubeletの起動および自動起動設定

$ sudo systemctl enable kubelet && sudo systemctl start kubelet

クラスターの構成

masterの初期化

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
[init] using Kubernetes version: v1.12.3
…
To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 172.16.0.210:6443 --token vdzbja.alkt46t5lj022td1 --discovery-token-ca-cert-hash sha256:1ebf8d754bbe2418681e66ef38e3b927c2615fbf9be04570c697e33253d01b9f
$

最後にWorker Nodeがクラスタに参加するためのコマンド(kubeadm join…)が表示されるので、保存しておきます。

一般ユーザでkubectlコマンドを実行できるようにするためには、下記のコマンドを実行します。

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

rootユーザで実行するためには下記のコマンドを実行します。

# export KUBECONFIG=/etc/kubernetes/admin.conf

ネットワークの構成

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

Worker Nodeの追加

kubeadm initで出力されたクラスタに参加するためのコマンドをWorker Nodeで実行します。

sudo kubeadm join 172.16.0.210:6443 --token vdzbja.alkt46t5lj022td1 --discovery-token-ca-cert-hash sha256:1ebf8d754bbe2418681e66ef38e3b927c2615fbf9be04570c697e33253d01b9f

マスターノードでWorker Nodeが追加されたことを確認します。

$ kubectl get nodes
NAME                                              STATUS   ROLES    AGE   VERSION
ip-172-16-0-194.ap-northeast-1.compute.internal   Ready       50s   v1.12.3
ip-172-16-0-210.ap-northeast-1.compute.internal   Ready    master   33m   v1.12.3
ip-172-16-0-220.ap-northeast-1.compute.internal   Ready       90s   v1.12.3
$

参考

Creating a single master cluster with kubeadm - Kubernetes

コメント