Open3
自宅用kubernetesを作るメモ
動機
とりあえず遊んでみたい。
環境
- 物理ホストはESXi。VCSAはリソースの都合上スルー
- ネットワーク環境はとりあえず分離しないで宅内の謎ネットワークにおまかせ
- 1 Control Plane / 1 Node / 1 NFS(予定)
- PersistentVolume用には別途NFSを用意する
- ホストOSはUbuntu 22.04
- Diskサイズを間違えて60GBで切ってしまった・・・
- 次に作る場合は30GB程度で良いかも
構築
ホストOSでやったこと
- IPアドレスの固定化 / nameserverの設定
- ホスト名の設定
- containerdのインストール
- kubeadm / kubelet / kubectl のインストール
- k8sの構築はkubeadm
k8s構築でやったこと
-
kubeadm init時に
--pod-network-cidr
を付与し忘れてて、Calico / CiliumのPodがUPしなかった。 -
Calicoをインストールした。が、MetalLBでは完全にサポートされてないっぽいのでCiliumに
-
controle planeにスケジュールできるように、Taintとして付与されているNoScheduleを削除しておく
MetalLBをデプロイする
とりあえず↓の通りに実行する
IPアドレスプールの追加に失敗する
以下のようなエラーが出た。
% kc apply -f metallb_ipadd_pool.yaml
Error from server (InternalError): error when creating "metallb_ipadd_pool.yaml": Internal error occurred: failed calling webhook "ipaddresspoolvalidationwebhook.metallb.io": failed to call webhook: Post "https://webhook-service.metallb-system.svc:443/validate-metallb-io-v1beta1-ipaddresspool?timeout=10s": dial tcp 10.103.71.26:443: connect: no route to host
Error from server (InternalError): error when creating "metallb_ipadd_pool.yaml": Internal error occurred: failed calling webhook "l2advertisementvalidationwebhook.metallb.io": failed to call webhook: Post "https://webhook-service.metallb-system.svc:443/validate-metallb-io-v1beta1-l2advertisement?timeout=10s": dial tcp 10.103.71.26:443: connect: no route to host
この際に、ホストOS側でUFWなりFirewalld / SELinuxが稼働してるなら切る。
切った後は念のためOSごと再起動する。それに気づかなくてだいぶ時間を無駄にした。
もし、MetalLBデプロイ後にUFWなりを停止した場合は、一旦MetalLBリソースを削除してから再度デプロイすると良い、かもしれない。
テスト用のnginxをデプロイする
↓のマニフェストをapplyする。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
run: nginx
spec:
type: LoadBalancer
ports:
- port: 80
protocol: TCP
selector:
run: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
run: nginx
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
$ kubectl get svc nginx-service
して、出てきたEXTERNAL-IPに対してアクセスする。