servermemoのブログ

サーバー構築の手順をまとめる予定です。

CentOS 7でkubeadmを使ってKubernetesを動かす(CRI-O)

忙しい人向け

インストールについて

CentOS 7のインストール

  • インストール方法は省略。

ファイアウォール

firewall-cmdを使って以下のように設定しました。

CRI-Oのインストール前の事前準備

# cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

# modprobe overlay
# modprobe br_netfilter

ネットワーク関連の設定

# 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

# sysctl --system

CRI-Oのインストール

CRI-Oの設定を確認

conmonとcgroup_managerの設定を確認。

# vi /etc/crio/crio.conf
...
conmon = "/usr/libexec/crio/conmon"
...
cgroup_manager = "systemd"

Kubeletの設定を変更

以下のように設定しました。

必要なパッケージをインストール

1.18.3を導入した

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-1.18.3-0.x86_64 kubeadm-1.18.3-0.x86_64 kubectl-1.18.3-0.x86_64 --disableexcludes=kubernetes

systemctl enable --now kubelet

K8sクラスタのデプロイ

「pod-network-cidr」は導入するCNIに適したものを設定する。 --control-plane-endpoint はノードに設定されているIPアドレスのうち、外部からアクセスできるものを指定する。

# kubeadm init --kubernetes-version 1.18.3 --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=192.168.1.70

Kubeconfigの用意

kubeadmでクラスター作成がうまくいくと、コマンドを実行しろと言われるので実行。

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

MasterノードをWorkerとして使う

master 1nodeにする場合は次を実行。Workerを追加する場合は、出力されているkubeadm joinコマンドをWorkerノードで実行。

# kubectl taint nodes --all node-role.kubernetes.io/master-

Podネットワークアドオンのインストール

任意のPodネットワークアドオンをインストールする。筆者が動作確認したバージョンは以下のとおり。

Calico and v1.18.3(実行にはメモリ8GB以上必要)

CentOS 7とK8s v1.18.3でCNI Calicoは以下のバージョンで正常に動いた。

# curl -LO https://docs.projectcalico.org/v3.14/manifests/calico.yaml
(YAMLのCALICO_IPV4POOL_CIDRをpod-network-cidrと同じものに変更)
# kubectl apply -f calico.yaml

構築手順は以上

構築した環境を使って、公式サイトの「アプリケーションの実行」を試してみましょう。