---
title: "今さら！Kubernetesクラスタ構築 on AWS with kubeadm | grasys blog"
url: "https://blog.grasys.io/post/dokuma/k8swithkubeadm/"
description: "今さらですがkubeadmを使ってKubernetsをAWSに構築してみました。どれくらい大変なのかを確認するために。。。 Kubernetesクラスタ構築 AWSにkubeadmを使ってKubernetesクラスタを構築してみて、どれくらいの労力が必要かを検証してみます。 今回はAWSのEC2でUbuntu20.0…"
---

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

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[dokuma](/authors/dokuma/)
-   公開日：2021年7月7日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Kubernetes](/tags/kubernetes/)[#kubeadm](/tags/kubeadm/)

![今さら！Kubernetesクラスタ構築 on AWS with kubeadm](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

今さらですが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プラグインをインストールしておきます。

Plain textcontent\_copy

```
# 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がゴニョゴニョできるようにネットワークを設定してあげます。

Plain textcontent\_copy

```
# 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を使いましょう！

Plain textcontent\_copy

```
# 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インストール

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

Plain textcontent\_copy

```
# 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
```

### クラスタ作成

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

Plain textcontent\_copy

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

### CNIインストール

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

Plain textcontent\_copy

```
# 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を外す必要があります。

Plain textcontent\_copy

```
# 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した際に最後に表示されます。

Plain textcontent\_copy

```
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した際に最後に表示されます。

Plain textcontent\_copy

```
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](https://github.com/kubernetes-sigs/aws-ebs-csi-driver))もインストールします。

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

楽ちんでした！

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/dokuma/)

### [dokuma](/authors/dokuma/)

dokumaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/dokuma/)