Amazon Linux 2 の EC2 インスタンス上で Kubernetes クラスター構築

構成

マスターノード + 1台ワーカーノード

マスターノード

初期設定

$ ssh -i ~/.ssh/id_rsa ec2-user@<public ip>
$ sudo hostnamectl set-hostname 'k8s-master'
$ sudo vim /etc/hosts
$ sudo vim /etc/cloud/cloud.cfg
$ sudo reboot

/etc/cloud/cloud.cfg には以下を追記

preserve_hostname: true

/etc/hosts には以下を追記

172.31.27.122  k8s-master
172.31.22.36   worker-node1

Docker のインストール

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
$ sudo systemctl enable docker && sudo systemctl start docker

Kubelet, Kubeadm, Kubectl のインストール

$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ vi /etc/sysconfig/selinux
$ vim /etc/yum.repos.d/kubernetes.repo 
$ yum install -y kubelet kubeadm kubectl

/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=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

IPVS によるロードバランシングに必要なモジュールの読み込み

$ modprobe -v ip_vs
$ modprobe -v ip_vs_rr
$ modprobe -v ip_vs_wrr
$ modprobe -v ip_vs_sh

Kubernetes Master の作成

$ swapoff -a 
$ kubeadm init

kubeadm init 実行時に最後に出力される kubeadm コマンドをコピーしておく。

kubeadm join 172.31.27.122:6443 --token xxxxxxxxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

設定ファイルの準備とノードの作成

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export kubever=$(kubectl version | base64 | tr -d '\n')
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

正常に設定がされていることを確認。

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS    ROLES     AGE       VERSION
k8s-master   Ready     master    2m        v1.11.1

ワーカーノード

/etc/hosts と /etc/yum.repos.d/kubernetes.repo の内容はマスターノードと同様。

$ sudo hostnamectl set-hostname 'worker-node1'
$ sudo vim /etc/hosts
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ setenforce 0
$ sudo vim /etc/yum.repos.d/kubernetes.repo
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum install -y kubelet kubeadm kubectl
$ systemctl restart docker && systemctl enable docker
$ sudo systemctl restart docker && systemctl enable docker
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum remove docker docker-common docker-selinux docker-engine
$ sudo yum install docker-ce
$ sudo yum install --setopt=obsoletes=0    docker-ce-17.03.2.ce-1.el7.centos.x86_64    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
$ sudo systemctl enable docker && sudo systemctl start docker

Docker がインストールされたことの確認

$ docker -v
Docker version 17.03.2-ce, build f5ec1e2

kubelet の再起動と自動起動有効 + スワップ領域の無効化

$ sudo systemctl restart kubelet && sudo systemctl enable kubelet
$ sudo swapoff -a

kubeadm join の際は、マスターはTCP 6443番ポートでアクセスするので、マスターノードの EC2 インスタンスのセキュリティグループのインバウンドで許可しておく。

$ sudo kubeadm join 172.31.27.122:6443 --token xxxxxxxxxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

マスターからノードの状況確認。正常にインストールされている。

[ec2-user@k8s-master ~]$ sudo kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
k8s-master     Ready     master    41m       v1.11.1
worker-node1   Ready     <none>    19m       v1.11.1

My Twitter & RSS

Leave a Reply

Your email address will not be published. Required fields are marked *