grasys blog

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

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

Kubernetesクラスタ構築

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

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

RoleMachine Type
Control Planem5ad.xlarge
Worker Nodet3a.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 <<EOF > /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 <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

# Allow IP forward
echo 1 > /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分かからない程度でした。

楽ちんでした!


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。


採用情報
お問い合わせ