🔨

OCIのAmpereでk8sを構築する

2023/04/10に公開

x86前提の記事が多くて割りと苦戦したのでメモ

構成

  • k8s-master (2CPU,12GB)
  • k8s-worker1 (1CPU,6GB)
  • k8s-worker2 (1CPU,6GB)

初期設定

共通

予めswapを無効化しておく

vim /etc/fstab
-> swap(一番下の行)をコメントアウト

設定変更

dnf update -y
systemctl disable firewalld
echo "SELINUX=disabled" > /etc/selinux/config
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
reboot

再起動後インストール
※containerd.ioはここを確認して適時最新版をインストールすること

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install https://download.docker.com/linux/centos/7/aarch64/stable/Packages/containerd.io-1.5.11-3.1.el7.aarch64.rpm -y
dnf install docker-ce docker-ce-cli -y
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl enable --now docker
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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
exclude=kubelet kubeadm kubectl
EOF
dnf install kubelet kubeadm kubectl --disableexcludes=kubernetes -y
systemctl enable --now kubelet
rm /etc/containerd/config.toml -f
systemctl restart containerd

masterの設定

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

完了後、以下の形式の出力をコピーしておく

kubeadm join xxx.xxx.xxx.xxx:6443 hogehogehoge \
    --discovery-token-ca-cert-hash sha256:hogehoge

ネットワーク周りの設定

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

workerの設定

先ほどコピーしたものを各worker側で実行する

kubeadm join xxx.xxx.xxx.xxx:6443 hogehogehoge \
    --discovery-token-ca-cert-hash sha256:hogehoge

動作確認

とりあえずmasterで以下のコマンドを実行してnodeが表示されているか確認する

kubectl get nodes

問題なさそうであれば

kubectl run --port 80 --image=nginx:1.21 nginx

でnginxを立ち上げ、

kubectl port-forward nginx 8080:80

でポートフォワードする

curl localhost:8080

でnginxのwelcomeページ(HTML)が表示されれば成功
※ポートフォワードはバックグラウンドタスクではないのでscreenを使うか別セッションを開くかして動作確認をする必要がある

参考

https://qiita.com/yasubehe/items/51a05688d1f66d51531e
https://qiita.com/sat0ken/items/074d75a9a1afaeb12df3
https://genzouw.com/entry/2020/01/25/001110/1905/

Discussion