0
1

k8sのコントロールプレーンをELBでヘルスチェックさせてみる

Last updated at Posted at 2023-11-20

はじめに

以前k8sをkubeadmで構築した際に、コントロールプレーンのヘルスチェックはHAProxy+keepalivedで実現させていたが、AWSのNetwork LoadBalancerで実現できるか確認してみようと思います。

構成

image.png

サーバ環境情報

  • Ubuntu 22.04
  • kubeadm/kubectl/kubelet 1.28.03
  • runc 1.1.9
  • containerd 1.7.5
  • cni-plugin 1.3.0

実際にやってみる

Kubernetesをまずインストール

コントロールプレーン3台に入れていく。

#各種設定
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay && modprobe br_netfilter

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

#Containerdインストール
wget https://github.com/containerd/containerd/releases/download/v1.7.5/containerd-1.7.5-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-1.7.5-linux-amd64.tar.gz 
wget -P /usr/local/lib/systemd/system/ https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
systemctl daemon-reload 
systemctl enable --now containerd

#runcインストール
wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64install -m 755 runc.amd64 /usr/local/sbin/runc

#cni-pluginインストール
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz

#Containerd設定
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
sed -i -e 's/sandbox_image = "registry.k8s.io\/pause:3.8/sandbox_image = "registry.k8s.io\/pause:3.9/g' /etc/containerd/config.toml
sed -i -e 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd

#Kubernetesインストール
apt-get update
apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

ELBを作る

ターゲットグループ

ターゲットタイプ:インスタンス
ターゲットグループ名:お好きなように
プロトコル:TCP
ポート番号:6443
IPアドレスタイプ:IPv4
VPC:指定したもの
ヘルスチェックプロトコル:TCP
ターゲット:コントロールプレーン3台

ロードバランサー

タイプ:Network
ロードバランサー名:お好きなように
スキーム:Internet
IPアドレスタイプ;IPv4
VPC:指定したもの
マッピング:所属するAZとサブネット(パブリックサブネットを選択)
セキュリティグループ:6443ポートを許可するSG
リスナー:TCP/6443/作成したターゲットグループ

ヘルスチェックを確認

ターゲットグループにぶら下がっていることと、インスタンスへの疎通が取れている。
image.png

コントロールプレーンの起動

その他引数の指定はお好みで。

kubeadm init --control-plane-endpoint "<NLBのDNS名>:6443"
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1