0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

podmanでk8sクラスタを構築してみよう。

Last updated at Posted at 2022-09-18

はじめに

シングルノード構成のk8sは本番環境で使用しないので、マルチノードで構築してみたい。

環境

複雑な環境だが、podmanでmaster及びnodeを構築してみる。
image.png

master構築

troubleshooting1

podman buildでエラー終了してしまった。原因調査中

STEP 26/29: systemctl enable kubelet
ERRO[0008] +(UNHANDLED LOGLEVEL) &imagebuilder.Step{Env:[]string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "container=podman"}, Command:"systemctl", Args:[]string{""}, Flags:[]string{}, Attrs:map[string]bool(nil), Message:"SYSTEMCTL ", Original:"systemctl enable kubelet"}
Error: error building at STEP "SYSTEMCTL ": Build error: Unknown instruction: "SYSTEMCTL" &imagebuilder.Step{Env:[]string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "container=podman"}, Command:"systemctl", Args:[]string{""}, Flags:[]string{}, Attrs:map[string]bool(nil), Message:"SYSTEMCTL ", Original:"systemctl enable kubelet"}

podmanfileはgithubにuploadした。

wa1

podman buildを実施するにあたり、systemctlで実施しなくてもいいのではないか。と推測して外した。
外すことでbuild処理は正常終了する。
正常性は構築後に確認しようと思う。

RUN echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/sysconfig/kubelet
systemctl enable kubelet ★

troubleshooting2

masterのセットアップでエラーが出た。

[root@k8m001 ~]# kubeadm init \
>   --apiserver-advertise-address=$(nslookup k8w001 | grep Address |  tail -n +2 | cut -f2 -d ' ') \
>   --pod-network-cidr=192.168.0.0/16
[init] Using Kubernetes version: v1.25.1
[preflight] Running pre-flight checks
        [WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet
        [WARNING FileExisting-tc]: tc not found in system path
        [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: time="2022-09-19T13:03:49+09:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\""
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
[root@k8m001 ~]# 

wa2

・podman container上でどうやってswapoffしてよいのかわかっていない。
 swapoff -aを実行してみたが、free -mで見るとswapが起動しているように見えるし。

[WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubele

 swapoffが通じない。。。もしかしたら、kubeadm init処理をする上で無視してよいものかもしれない。fatalがwarningだし。

[root@k8m001 ~]# swapon -sv
Filename                                Type            Size    Used    Priority
/swap/file                              file            7340032 0       -2
[root@k8m001 ~]# swapoff -av
swapoff /swap/file
[root@k8m001 ~]#
[root@k8m001 ~]# swapon -sv
Filename                                Type            Size    Used    Priority
/swap/file                              file            7340032 0       -2
[root@k8m001 ~]#

・これは、yum install tcでいける。podmanfileでyumコマンドのところに追加すればよいだけ。

[WARNING FileExisting-tc]: tc not found in system path

・これは、kubeletサービスを起動しとけ。ってことだから、RUN systemctl enable kubelet.serviceをpodmanfileに含めればよいだけ。

[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'

・ここだけ解決できていない。

[preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2022-09-19T21:08:15+09:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory""

試しに以下のURLを参照して、cri-dockerdをインストールしてみようと思う。
https://discuss.kubernetes.io/t/unable-to-determine-runtime-api-version-rpc-error/20736

↑ 結果失敗した。事象改善ならず。
masterにてsocket[sock]が無いのが問題だった。masterにてpodmanを起動しcri-socketを指定したら、一部改善した。

--cri-socket=unix:///run/podman/podman.sock \

  ↓ 残課題は明日調査しようと思う。(同じ職場の人からvirtualbox使えばいいんじゃないの?と提案が・・・もはやpodmanであげようと意地になっている俺。)

I0923 22:34:07.860781     386 checks.go:243] validating the existence and emptiness of directory /var/lib/etcd
[preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: time="2022-09-23T22:34:07+09:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection closed before server preface received"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
error execution phase preflight

wa2は以下の追加手順をすることで処理を抜けることができた。が、config.tomlを削除することでデメリットもあるらしい。。。

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
rm /etc/containerd/config.toml
systemctl restart containerd

troubleshooting3

overlayfsが関係したエラーのように見える。これをfuse-overlayfsに変更できれば・・・解決方法を探してみる。

[preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image registry.k8s.io/kube-apiserver:v1.25.2: output: E0925 21:07:20.978811    3007 remote_image.go:222] "PullImage from image service failed" err="rpc error: code = Unknown desc = failed to pull and unpack image \"registry.k8s.io/kube-apiserver:v1.25.2\": failed to unpack image on snapshotter overlayfs: failed to extract layer sha256:f703b674637586b3f69a116e078ce213ef314a05d30d97db58f0fa43fb40c09f: failed to mount /var/lib/containerd/tmpmounts/containerd-mount636580304: invalid argument: unknown" image="registry.k8s.io/kube-apiserver:v1.25.2"

wa3

/etc/containers/storage.confに「mount_program = "/usr/bin/fuse-overlayfs"」を追記した。

podmanfileはmodifyした。

9/30/2022 諦めてdocker-desktopのkubernetesを使うことにした。。。実力不足。

worker構築

podmanfileをgithubにuploadした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?