kubeadmでAmazon Linux2にKubernetes1.16
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
# 以下の設定を追加
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
$ 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>
$ 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
Author And Source
この問題について(kubeadmでAmazon Linux2にKubernetes1.16), 我々は、より多くの情報をここで見つけました https://qiita.com/rururu_kenken/items/25ce39901c7cf264a839著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .