grasys blog

今さら!Kubernetesクラスタ構築 on AWS with kubeadm

文●dokuma/grasys 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はgrasys が提供する「grasys blog」に掲載された「今さら!Kubernetesクラスタ構築 on AWS with kubeadm」を再編集したものです。

 今さらですがkubeadmを使ってKubernetsをAWSに構築してみました。どれくらい大変なのかを確認するために。。。

Kubernetesクラスタ構築

 AWSにkubeadmを使ってKubernetesクラスタを構築してみて、どれくらいの労力が必要かを検証してみます。今回はAWSのEC2でUbuntu20.04 LTS AMIから作成したVMにKubernetesクラスタを構築しました。

 EC2のマシンタイプは次の通りです。

Role Machine Type
Control Plane m5ad.xlarge
Worker Node t3a.medium

 クラスタ構築の流れは以下の通りです。

CNIプラグインインストール

 標準的なCNIプラグインをインストールしておきます。


# Install CNI Plugin
curl -L -o cni-plugins.tgz "https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-$( [ $(uname -m) = aarch64 ] && echo arm64 || echo amd64)"-v0.9.1.tgz
mkdir -p /opt/cni/bin
tar -C /opt/cni/bin -xzf cni-plugins.tgz

ネットワーク周りの設定

 kube-porxyがゴニョゴニョできるようにネットワークを設定してあげます。


# System configuration for iptables
lsmod | grep br_netfilter
modprobe br_netfilter

lsmod | grep br_netfilter
br_netfilter           28672  0
bridge                176128  1 br_netfilter

# Configuration for bridge insterface
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# Allow IP forward
net.ipv4.ip_forward = 1
EOF
sysctl --system

# Install iptables
apt-get update
apt-get install -y iptables arptables ebtables

コンテナランタイムインストール

 containerdを使いましょう!


# Install dependency modules
apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# Add GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

# Add Docker repo
add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

# Install containerd
apt-get update && apt-get install -y containerd.io

# Configure containerd
containerd config default | sudo tee /etc/containerd/config.toml

# Restart containerd
systemctl restart containerd

kubelet,kubeadm,kubectlインストール

 源をインストールします。


# Install kubelet kubeadm kubectl
apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat < /proc/sys/net/ipv4/ip_forward

クラスタ作成

 イニシャライズのコマンドラインはこれだけです・・・・


# Create cluster
kubeadm init --control-plane-endpoint 10.64.0.104:6443 --upload-certs --pod-network-cidr=192.168.0.0/16

CNIインストール

 Calicoを使いましょう。マニフェストが用意されていて便利です。


# Install CNI(Calico)
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

CSIインストール

 EBS使う想定でCSIをインストールします。今回はCSIドライバをコントロールプレーンにインストールするのでマスターロールのTaintを外す必要があります。


# untaint node-role.kubernetes.io/master-
kubectl taint nodes --all node-role.kubernetes.io/master-

# Install Helm
sudo snap install helm --classic

# Setup CSI repogitory for AWS EBS CSI
helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
helm repo update

# Install CSI(AWS EBS)
helm upgrade --install aws-ebs-csi-driver \
    --namespace kube-system \
    --set enableVolumeScheduling=true \
    --set enableVolumeResizing=true \
    --set enableVolumeSnapshot=true \
    --set extraCreateMetadata=true \
    --set k8sTagClusterId="cluster001" \
    aws-ebs-csi-driver/aws-ebs-csi-driver

コントロールプレーン追加

 bootstrap以外のコントロールプレーンで実施します。 コントロールプレーンを追加する場合にこちらのコマンドラインを実施します。このコマンドラインはbootstrapでkubeadm initした際に最後に表示されます。


kubeadm join 10.64.0.104:6443 --token juuwq7.tv88xbqek9xyc0u4 \
  --discovery-token-ca-cert-hash sha256:9357f1eb649dac89864ea8ee3401c923f1c9c8eb339275a071ac8101ccd5847c \
  --control-plane --certificate-key fe7b9b675ff4fe53a1818ac63095fc71399341f429149cb15b7bbdaee56e981b

ワーカーノード追加

 ワーカーノードで実施します。 ワーカーノードを追加する場合にこちらのコマンドラインを実施します。このコマンドラインはbootstrapでkubeadm initした際に最後に表示されます。


kubeadm join 10.64.0.104:6443 --token juuwq7.tv88xbqek9xyc0u4 \
  --discovery-token-ca-cert-hash sha256:9357f1eb649dac89864ea8ee3401c923f1c9c8eb339275a071ac8101ccd5847c

 コンテナランタイムはcontainerd、CNIはCalicoを採用しました。 EBSを永続ストレージとして利用する想定でCSI(AWS EBS CSI Driver)もインストールします。

 特筆することは特になく、上記の手順は公式ドキュメントに記述されています。ブートストラップのコントロールプレーン構築が完了するまで5分かからない程度でした。

 楽ちんでした!

■関連サイト

過去記事アーカイブ

2021年
03月
04月
05月
06月
07月
2020年
04月
05月
08月
09月
10月
11月
12月
2018年
09月
2017年
06月
2014年
07月