Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

kubeadmでCoreOS Container LinuxにKubernetes 1.16

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)

plugins

$ 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))

cri-tools

$ 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

参考URL

kubeadmのインストール

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away