kubernetes(v1.26.2、v1.28.1)のインストール

ITのブログ

概要

kubernetesの複数バージョンをインストールして手順の違いを確認してみましたが、違いがないことがわかりました。

今回は、CNIはAntrea、Ingress ControllerはContourを使用しています。ContourのServiceはLoadBalancerの設定とし、Metallbを使ってIPアドレスを割り当てようしましたが、通信ができなかったです。

環境

#ソフトウェアバージョン(v1.26.2)バージョン(v1.28.1)
1Rocky Linux9.1(5.14.0-162.6.1.el9_1.x86_64)9.2(5.14.0-284.11.1.el9_2.x86_64)
2kubernetes1.26.2v1.28.1
3containerd.io1.6.18-3.11.6.22-3.1
4Antrea1.10.01.13.1
5helm3.10.33.12.3
6contour1.26.0
7Metallb0.13.11

手順

kubernetesのインストール

事前設定

1.firewalldの停止
systemctl disable --now firewalld

2.swapの無効化
swapoff -a
sed -e '/swap/s/^/#/g' -i /etc/fstab

3.iptablesがブリッジを通過するトラフィックを処理できるようにする
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

3.その他設定①
cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

4.その他設定②
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

5.その他設定④
sysctl --system

6.SELinuxの無効化
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

CRIのインストール

1.Containerdのインストール
yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

yum update -y && yum install -y containerd.io

mv /etc/containerd/config.toml /etc/containerd/config.toml.orig
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
[plugins]
           SystemdCgroup = true

systemctl enable --now containerd.service

kubernetesのインストール

1.kubernetesのrepoの設定

cat > /etc/yum.repos.d/k8s.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

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

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

補足1 利用可能なバージョンの確認方法

最新バージョン以外をインストールしたい場合は、以下コマンドでインストールするバージョンを確認する。

dnf search --showduplicates kubectl --disableexcludes=kubernetes

サーバ固有設定

1.と2.と3.の設定はOSテンプレートに入れることも可能です。

1.ホスト名の設定
hostnamectl set-hostname <ホスト名>

2.hostsの修正
vi /etc/hosts
※必要な名前解決を追加

masterを構成

1.masterの接続するIPアドレスの指定
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--node-ip=<IPアドレス>
masterサーバで接続するIPアドレスを指定したい場合は設定する。

2.masterの構成
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=<IPアドレス>
※apiserer-advertise-addressは接続するIPアドレスを指定したい場合は設定する。

3.ユーザでkubectlを使用するための設定
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

workerの参加

kubeadm initの実行結果で表示された「kubeadm join」を実行する。

kubeletの自動起動(masterとworkerで実施)

systemctl enable --now kubelet

Antreaのインストール

コンテナ・ネットワーク・インターフェース(CNI)はAntreaを選択しました。Antreaのインストールは以下のコマンドの通り実施できました。

1.ノードの状態確認(StatusがNotReadyでもOKです)

kubectl get node -A

2.Antreaのインストール

kubectl apply -f https://raw.githubusercontent.com/antrea-io/antrea/main/build/yamls/antrea.yml

helmのインストール

tarのインストール

dnf install tar -y

gitのインストール

dnf install git

helmのインストール

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

contour(Ingress Controller)のインストール

kubectl apply -f https://projectcontour.io/quickstart/contour.yaml

metallbのインストール

1.kube-proxyの設定を変更

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl diff -f - -n kube-system

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

2.metallbのインストール

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.11/config/manifests/metallb-native.yaml

3.IPアドレス範囲のコンフィグを作成

vi ipaddresspool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.222.61-192.168.222.70
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2advertisement
  namespace: metallb-system
spec:
  ipAddressPools:
   - default

4.ipaddresspool.yamlを反映

kubectl apply -f ipaddresspool.yaml

その他作業

Persistent VolumeをNFSで作成する場合

NFSでマウントするためのパッケージをインストールする。

dnf install nfs-utils -y

helmにリポジトリを登録する。

helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts

NFSのCSIドライバーをデプロイする。

helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system

ストレージクラスのコンフィグを作成する。

vi sc.yaml

------記載内容------
piVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.222.10
  share: /data/nfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1

作成したコンフィグを適用する。

kubectl apply -f sc.yaml

kubeconfigのコピー

コピー先のディレクトリ作成とカレントディレクトリ変更

mkdir -p $HOME/.kube
cd -p $HOME/.kube

kubeconfigのコピー

scp root@<IPアドレス>:/root/.kube/config ./

kubectlのaliasの設定(Bashを使用している場合)

aliasの設定

vi ./bashrc

-----最後の行に以下を記載----
alias k='kubectl'

コメント

タイトルとURLをコピーしました