まえがき
- 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