Prometheusでfederationを実現するまで(k8sクラスタ構築編)


まえがき

  • k8sクラスタ内のリソース状況の監視をしたい
  • 諸々の事情があり、クラスタ内のprometheusをシステムのリソース状況の監視に使うことが難しい
  • そのためクラスタ外部とクラスタ内にそれぞれprometheusを構築し、クラスタ外のprometheusはfederation機能を用いでクラスタ内のprometheusを参照する

k8sクラスタ構築

今回はmaster1台、worker1台の構成でクラスタを構築していきます。
構築にはkubeadmを使用し、公式のインストールガイトを参照しました。

(参照URL)
* https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
* https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

使用した環境

  • 使用OS: CentOS7.8
  • masterノード
    • ノード名: master1
    • ipアドレス: 192.168.10.11
  • wokerノード
    • ノード名: woker1
    • ipアドレス: 192.168.10.21

hots設定

互いのノードを名前解決できるよう/etc/hostsを設定します。

cat <<EOF >> /etc/hosts
192.168.10.11 master1
192.168.10.21 worker1
EOF

swap無効化

  • swapの無効化
# swapoff -a
  • swap領域のマウント無効化
# vi /etc/fstab

swapの項目をコメントアウト

dockerインストール

docker公式のインストールスクリプトを用います。

$ curl https://get.docker.com | sh

# systemctl enable docker
# systemctl start docker

kubeadmのインストール

nftablesをバックエンド使用しないようにします。

# update-alternatives --set iptables /usr/sbin/iptables-legacy

kubeadm、kubelet、kubectlのインストール

以下はroot権限で実行します。(ヒアドキュメントで記載しているのでプロンプトは省略しています)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

#Set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

sysctl周りの設定

以下はroot権限で実行(ヒアドキュメントで記載しているのでプロンプトは省略しています)

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

自分の環境の場合上記コマンドを実行する前に下記コマンドを実施する必要がありました。

# modprobe br_netfilter

クラスタ構築(masterノード)

今回の構築ではCNIにflannelを用います。

クラスタの初期化を実施

# kubeadm init --pod-network-cidr=10.244.0.0/16

kubectl設定

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

flannelのデプロイメントを適用

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

# kubectl -n kube-system get po -o wide
NAME                              READY   STATUS    RESTARTS   AGE     IP              NODE      NOMINATED NODE   READINESS GATES
coredns-66bff467f8-hx5zw          0/1     Running   0          2m15s   10.244.0.3      master1   <none>           <none>
coredns-66bff467f8-mvnzl          1/1     Running   0          2m15s   10.244.0.2      master1   <none>           <none>
etcd-master1                      1/1     Running   0          2m26s   192.168.10.11   master1   <none>           <none>
kube-apiserver-master1            1/1     Running   0          2m26s   192.168.10.11   master1   <none>           <none>
kube-controller-manager-master1   1/1     Running   0          2m26s   192.168.10.11   master1   <none>           <none>
kube-flannel-ds-amd64-qgldq       1/1     Running   0          43s     192.168.10.11   master1   <none>           <none>
kube-proxy-ttxn8                  1/1     Running   0          2m15s   192.168.10.11   master1   <none>           <none>
kube-scheduler-master1            1/1     Running   0          2m26s   192.168.10.11   master1   <none>           <none>

すべてのpodがRunningになっていることを確認。

 ノード確認

master1のSTATUSがReadyであることを確認します。

# kubectl get node
NAME      STATUS   ROLES    AGE     VERSION
master1   Ready    master   3m18s   v1.18.2

クラスタ構築(masterノード)

k8sクラスタにjoin

クラスタ構築(masterノード) > クラスタの初期化を実施
のコマンド実行後に表示されたkubeadm join
から始まるコマンドを実行

# kubeadm join ....

ノード確認

master1とworker1のSTATUSがReadyであることを確認します。

# kubectl get node
NAME      STATUS   ROLES    AGE     VERSION
master1   Ready    master   5m21s   v1.18.2
worker1   Ready    <none>   62s     v1.18.2

最後に

クラスタ構築は以上です!
次回は構築したk8sクラスタ内にPrometheusを構築、Prometheusのfederation設定をしていきます。

【追記】
次回分公開しました。
https://qiita.com/sinnsa233048/items/7fb3ab5591c5eeecd3b4