kubeadmでCoreOS Container LinuxにKubernetes 1.17を入れる場合はこちら
CoreOS Container LinuxのEOLが発表されました(2020/02/20追記)
情報の一部
2020/05/26に最終アップデートの公開が開始されます。
その日以降に発見されたバグやセキュリティ脆弱性は修正されません。
2020/09/01以降、CoreOS Container Linuxに関連する公開リソースは削除されるか、読み取り専用になります。 OSダウンロードは削除され、CoreUpdateサーバーはシャットダウンされ、OSイメージはAWS、Azure、Google Compute Engineから削除されます。
全ての内容は以下のサイトをご参照ください
End-of-life announcement for CoreOS Container Linux
Master Node
EC2 | OS | Kubernetes | Docker |
---|---|---|---|
t3.small | CoreOS Container Linux 2247.5.0 | 1.16.2 | 18.06.3-ce |
Master NodeのIPアドレスは172.31.38.1
2CPU、メモリ2GB以下の場合、kubeadm init実行時にエラーになります。
ディスクサイズはデフォルトの8G
Master NodeとWorker Nodeは同じVPC
SELinux設定確認
$ getenforce
# SELinuxは有効だが、アクセス制限は行わず警告を出力
Permissive
swap確認
$ free
# ないので何もしない
total used free shared buff/cache available
Mem: 981120 78168 516696 204404 386256 561768
Swap: 0 0 0
Docker設定
$ docker -v
Docker version 18.06.3-ce, build d7080c1
# Dockerの自動起動有効
$ sudo systemctl enable docker
# Setup daemon.
$ sudo mkdir -p /etc/docker
$ 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
# Dockerを再起動
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
kubelet、kubeadm、kubectlインストール
CNI plugins (required for most pod network)
$ CNI_VERSION="v0.8.2"
$ sudo mkdir -p /opt/cni/bin
$ curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz
$ ls /opt/cni/bin
bandwidth dhcp flannel host-local loopback portmap sbr tuning
bridge firewall host-device ipvlan macvlan ptp static vlan
crictl (required for kubeadm / Kubelet Container Runtime Interface (CRI))
$ CRICTL_VERSION="v1.16.1"
$ sudo mkdir -p /opt/bin
$ curl -L "https://github.com/kubernetes-incubator/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | sudo tar -C /opt/bin -xz
$ ls /opt/bin
crictl
kubeadm, kubelet, kubectl
$ RELEASE="v1.16.2"
$ sudo mkdir -p /opt/bin
$ cd /opt/bin
$ sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
$ sudo chmod +x {kubeadm,kubelet,kubectl}
$ ls
crictl kubeadm kubectl kubelet
$ cd
$ curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > ./kubelet.service
$ sudo mv ./kubelet.service /etc/systemd/system/
$ sudo mkdir -p /etc/systemd/system/kubelet.service.d
$ curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > ./10-kubeadm.conf
$ sudo mv 10-kubeadm.conf /etc/systemd/system/kubelet.service.d
kubelet 起動
$ sudo systemctl enable --now kubelet
Master Nodeのセットアップ
# --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.38.1 \
--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
$ kubectl get node
# NAMEのip-xxxのxxxは長いので加工しました
NAME STATUS ROLES AGE VERSION
ip-xxx NotReady master 52s v1.16.2
kubectl get cs
NAME AGE
controller-manager <unknown>
scheduler <unknown>
etcd-0 <unknown>
Flannelインストール
# ダウンロード
$ curl -L -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# デプロイ
$ kubectl apply -f ./kube-flannel.yml