LoginSignup
1
2

More than 3 years have passed since last update.

kubeadmでAmazon Linux2にKubernetes1.16

Last updated at Posted at 2019-10-27

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

Master Node

EC2   OS Kubernetes Docker ホスト名
t3.small  Amazon Linux2 1.16.2 18.06.1-ce k8s-master

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

Worker Node

EC2   OS Kubernetes Docker ホスト名
t3.small Amazon Linux2 1.16.2 18.06.1-ce k8s-worker

ディスクサイズは20G
Master NodeとWorker Nodeは同じVPC
Worker NodeのIPアドレスは172.31.34.50

SELinux設定確認

$ getenforce

# 無効になっている
Disabled

ホスト名の設定

$ sudo hostnamectl set-hostname k8s-master

hostファイル編集

sudo vi /etc/hosts

/etc/hosts.
# 以下の設定を追加
172.31.39.74 k8s-master
172.31.34.50 k8s-worker

swap確認

$ free

# ないので何もしない
              total        used        free      shared  buff/cache   available
Mem:        2002400       59664     1581528         360      361208     1783540
Swap:             0           0           0

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

br_netfilter           24576  0
bridge                172032  1 br_netfilter

$ lsmod | grep overlay

overlay                86016  0

$ sudo vi /etc/sysctl.d/k8s.conf

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

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

kernel.printk = 8 4 1 7
kernel.panic = 30
net.ipv4.neigh.default.gc_thresh1 = 0
net.ipv6.neigh.default.gc_thresh1 = 0
net.ipv4.neigh.default.gc_thresh2 = 15360
net.ipv6.neigh.default.gc_thresh2 = 15360
net.ipv4.neigh.default.gc_thresh3 = 16384
net.ipv6.neigh.default.gc_thresh3 = 16384
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-amazon.conf ...
kernel.sched_autogroup_enabled = 0
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
* Applying /etc/sysctl.conf ...

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.16.2-0.x86_64 kubeadm-1.16.2-0.x86_64 kubectl-1.16.2-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.39.74 \
    --pod-network-cidr 10.244.0.0/16 \
    --service-cidr 172.16.130.0/24

トークンには有効期限があり、通常は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
$ docker images

REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.16.2             8454cbe08dc9        11 days ago         86.1MB
k8s.gcr.io/kube-apiserver            v1.16.2             c2c9a0406787        11 days ago         217MB
k8s.gcr.io/kube-controller-manager   v1.16.2             6e4bffa46d70        11 days ago         163MB
k8s.gcr.io/kube-scheduler            v1.16.2             ebac1ae204a2        11 days ago         87.3MB
k8s.gcr.io/etcd                      3.3.15-0            b2756210eeab        7 weeks ago         247MB
k8s.gcr.io/coredns                   1.6.2               bf261d157914        2 months ago        44.1MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        22 months ago       742kB

$ docker ps

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
01ecfb1358b2        8454cbe08dc9           "/usr/local/bin/kube…"   2 minutes ago       Up 2 minutes                            k8s_kube-proxy_kube-proxy-vv96z_kube-system_f5f98a6b-52a8-4d0a-ab1a-84ded7eac8b4_0
4612ea6d6f4a        k8s.gcr.io/pause:3.1   "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-proxy-vv96z_kube-system_f5f98a6b-52a8-4d0a-ab1a-84ded7eac8b4_0
13fc761019bc        b2756210eeab           "etcd --advertise-cl…"   2 minutes ago       Up 2 minutes                            k8s_etcd_etcd-k8s-master_kube-system_ffdde4238901ee511286a47ff743cfb6_0
9216814850ea        ebac1ae204a2           "kube-scheduler --au…"   2 minutes ago       Up 2 minutes                            k8s_kube-scheduler_kube-scheduler-k8s-master_kube-system_74dea8da17aa6241e5e4f7b2ba4e1d8e_0
c7ec706879ef        6e4bffa46d70           "kube-controller-man…"   2 minutes ago       Up 2 minutes                            k8s_kube-controller-manager_kube-controller-manager-k8s-master_kube-system_508983a8473a31027712ecfa3d936e03_0
458c7033f991        c2c9a0406787           "kube-apiserver --ad…"   2 minutes ago       Up 2 minutes                            k8s_kube-apiserver_kube-apiserver-k8s-master_kube-system_84bd757366d85c9a4985961b9cfc3151_0
b12bb506cc1a        k8s.gcr.io/pause:3.1   "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-scheduler-k8s-master_kube-system_74dea8da17aa6241e5e4f7b2ba4e1d8e_0
6433412edbf4        k8s.gcr.io/pause:3.1   "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-controller-manager-k8s-master_kube-system_508983a8473a31027712ecfa3d936e03_0
850c35237fc1        k8s.gcr.io/pause:3.1   "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-apiserver-k8s-master_kube-system_84bd757366d85c9a4985961b9cfc3151_0
f3b0313897a1        k8s.gcr.io/pause:3.1   "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_etcd-k8s-master_kube-system_ffdde4238901ee511286a47ff743cfb6_0

Flannelインストール

$ kubectl get node

NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   3m37s   v1.16.2

$ kubectl get pod --all-namespaces

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-54c4w             0/1     Pending   0          3m39s
kube-system   coredns-5644d7b6d9-xvhwk             0/1     Pending   0          3m39s
kube-system   etcd-k8s-master                      1/1     Running   0          2m52s
kube-system   kube-apiserver-k8s-master            1/1     Running   0          2m52s
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          2m46s
kube-system   kube-proxy-vv96z                     1/1     Running   0          3m39s
kube-system   kube-scheduler-k8s-master            1/1     Running   0          2m35s

# ダウンロード
$ 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

NAMESPACE     NAME                                 READY   STATUS     RESTARTS   AGE
kube-system   coredns-5644d7b6d9-54c4w             0/1     Pending    0          5m5s
kube-system   coredns-5644d7b6d9-xvhwk             0/1     Pending    0          5m5s
kube-system   etcd-k8s-master                      1/1     Running    0          4m18s
kube-system   kube-apiserver-k8s-master            1/1     Running    0          4m18s
kube-system   kube-controller-manager-k8s-master   1/1     Running    0          4m12s
kube-system   kube-flannel-ds-amd64-x444v          0/1     Init:0/1   0          12s
kube-system   kube-proxy-vv96z                     1/1     Running    0          5m5s
kube-system   kube-scheduler-k8s-master            1/1     Running    0          4m1s

Worker Node

以下はMaster Nodeの手順を参照

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

クラスタに参加

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

# 「kubeadm token create --print-join-command」はMaster Nodeで実行
$ kubeadm token create --print-join-command

# 実行結果の例
kubeadm join 172.31.39.74:6443 --token kuyzfs.ofwts569uk28p72t     --discovery-token-ca-cert-hash sha256:18166bd6a8378c9fb6a66bec0373a1b1327833b6829c6d79929db34b575d097b 

$ sudo kubeadm join 172.31.39.74:6443 --token kuyzfs.ofwts569uk28p72t     --discovery-token-ca-cert-hash sha256:18166bd6a8378c9fb6a66bec0373a1b1327833b6829c6d79929db34b575d097b 

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

Master Node

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

$ kubectl get node

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   91m   v1.16.2
k8s-worker   Ready    <none>   22s   v1.16.2

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

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
kube-system   coredns-5644d7b6d9-54c4w             1/1     Running   0          91m   10.244.0.2     k8s-master   <none>           <none>
kube-system   coredns-5644d7b6d9-xvhwk             1/1     Running   0          91m   10.244.0.3     k8s-master   <none>           <none>
kube-system   etcd-k8s-master                      1/1     Running   0          91m   172.31.39.74   k8s-master   <none>           <none>
kube-system   kube-apiserver-k8s-master            1/1     Running   0          91m   172.31.39.74   k8s-master   <none>           <none>
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          91m   172.31.39.74   k8s-master   <none>           <none>
kube-system   kube-flannel-ds-amd64-9w6wt          1/1     Running   0          54s   172.31.34.50   k8s-worker   <none>           <none>
kube-system   kube-flannel-ds-amd64-x444v          1/1     Running   0          87m   172.31.39.74   k8s-master   <none>           <none>
kube-system   kube-proxy-4dh2l                     1/1     Running   0          54s   172.31.34.50   k8s-worker   <none>           <none>
kube-system   kube-proxy-vv96z                     1/1     Running   0          91m   172.31.39.74   k8s-master   <none>           <none>
kube-system   kube-scheduler-k8s-master            1/1     Running   0          90m   172.31.39.74   k8s-master   <none>           <none>

Master 以外のノードに Role 設定

$ kubectl get node

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   92m   v1.16.2
k8s-worker   Ready    <none>   80s   v1.16.2

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

$ kubectl get node

NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   93m    v1.16.2
k8s-worker   Ready    worker   110s   v1.16.2

参考URL

kubeadmのインストール

1
2
0

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
1
2