LoginSignup
4

More than 3 years have passed since last update.

kubeadmでAmazon Linux2にKubernetes1.15

Last updated at Posted at 2019-06-25

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 学習 クラスタ作り直し

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4