kubeadmでAmazon Linux2にKubernetes1.15


kubeadmでAmazon Linux2にKubernetes1.18を入れる場合はこちら
kubeadmでAmazon Linux2にKubernetes1.17を入れる場合はこちら
kubeadmでAmazon Linux2にKubernetes1.16を入れる場合はこちら

Master Node

EC2   OS Kubernetes Docker ホスト名
t2.small  Amazon Linux2 1.15.0 18.06.1-ce k8s-master1

2CPU、メモリ2GB以下の場合、kubeadm init実行時にエラーになります。
ディスクサイズはデフォルトの8G
Master NodeとWorker Nodeは同じVPC

Worker Node

EC2   OS Kubernetes Docker ホスト名
t2.micro Amazon Linux2 1.15.0 18.06.1-ce k8s-worker1

ディスクサイズは20G
Master NodeとWorker Nodeは同じVPC

SELinux設定確認

$ getenforce

# 無効になっている
Disabled

ホスト名の設定

$ sudo hostnamectl set-hostname k8s-master1

hostsファイル編集

sudo vi /etc/hosts

/etc/hosts.
# 以下の設定を追加
x k8s-master1
x k8s-worker1

swap確認

$ free

# ないので何もしない

Dockerインストール・設定

# amazon-linux-extras install -y docker=18.03.1のようにバージョン指定でインストールも可能
$ sudo amazon-linux-extras install -y docker

$ docker -v

Docker version 18.06.1-ce, build e68fc7a215d7133c34aa18e3b72b4a21fd0c6136

# dockerサービス起動
$ sudo systemctl start docker

# ログインしているユーザーをdockerグループに追加
$ sudo usermod -a -G docker $USER

# 確認コマンド
$ cat /etc/group | grep docker

docker:x:993:ec2-user

# ログアウトして、すぐに再ログイン
# exit

# Dockerの自動起動有効化
$ sudo systemctl enable docker

# cgroupdriverをsystemdに設定など
$ sudo vi /etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

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

# Restart Docker
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

ルーティング設定など

$ lsmod |grep  br_netfilter

$ sudo vi /etc/sysctl.d/99-kubernetes-cri.conf

net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1

# カーネルパラメータを手動で反映
$ sudo sysctl --system

kubelet、kubeadm、kubectlインストール

「repo_gpgcheck=1」は「repo_gpgcheck=0」にする
Got "repomd.xml signature could not be verified for kubernetes" error when installing Kubernetes from yum repo on Amazon Linux 2 #60134

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

$ sudo yum install -y kubelet-1.15.0-0.x86_64 kubeadm-1.15.0-0.x86_64 kubectl-1.15.0-0.x86_64 --disableexcludes=kubernetes

kubelet 起動

$ sudo systemctl enable kubelet && sudo systemctl start kubelet

Master の初期化

# tcインストール
$ sudo yum install -y tc

# --apiserver-advertise-address
#  API Server のListen IPアドレス
#  Master ノードの NIC eth0 の IP アドレスを指定
# --pod-network-cidr
#  Pod に割り当てる内部 IP アドレスの CIDR、後述の Flannel を 
#  CNI に採用する場合は 10.244.0.0/16 を指定
# --service-cidr
#  Service に割り当てる内部 IP アドレスの CIDR
#  デフォルトは 10.96.0.0/12 
# メッセージの最終行 kubeadm join ... は、Node を クラスタへ
# 参加させる際に利用するコマンドが出力されます(※)
$ sudo kubeadm init \
    --apiserver-advertise-address 172.31.44.97 \
    --pod-network-cidr 10.244.0.0/16 \
    --service-cidr 172.16.130.0/24

# 長いので「・・・」で省略
$ sudo kubeadm join マスターノードのIPアドレス:6443 --token ・・・

トークンには有効期限があり、通常は24時間で利用できなくなる。
トークンが失効した場合や分からなくなった場合、マスターノードで「kubeadm token create --print-join-command」コマンドを実行するとトークンが再生成されて表示される。。

kubectl 接続設定

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

Flannelインストール

$ kubectl get node

$ kubectl get pod --all-namespaces

# ダウンロード
$ curl -L -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# デプロイ
$ kubectl apply -f ./kube-flannel.yml

$ kubectl get pod --all-namespaces

Worker Node

以下はMaster Nodeの手順を参照

Firewalld停止
SELinux設定確認
ホスト名の設定・・・sudo hostnamectl set-hostname k8s-worker1
hostファイル編集
swap確認
Dockerインストール・設定
ルーティング設定
kubelet、kubeadm、kubectlインストール
kubelet 起動

クラスタに参加

# tcインストール
$ sudo yum install -y tc

# 長いので「・・・」で省略
sudo kubeadm join マスターノードのIPアドレス:6443 --token ・・・

トークンには有効期限があり、通常は24時間で利用できなくなる。
トークンが失効した場合や分からなくなった場合、マスターノードで「kubeadm token create --print-join-command」コマンドを実行するとトークンが再生成されて表示される。

Master Node

kubectl コマンドで Node と Pod の状態を確認

$ kubectl get node

$ kubectl get pod --all-namespaces -o wide

Master 以外のノードに Role 設定

$ kubectl get node

$ kubectl label node k8s-worker1 node-role.kubernetes.io/worker=

$ kubectl get node

参考URL

kubeadmのインストール
kubeadmをセットアップしてみたが、いつも通りハマる
kubeadm で kubernetes 1.13 の HA 環境を構築
kubernetes 学習 クラスタ作り直し