今さらですが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 <<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にはあります。
お気軽にご連絡ください。