Open3

自宅用kubernetesを作るメモ

ruchikaruchika

動機

とりあえず遊んでみたい。

環境

  • 物理ホストは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構築でやったこと

ruchikaruchika

MetalLBをデプロイする

とりあえず↓の通りに実行する
https://metallb.universe.tf/installation/

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リソースを削除してから再度デプロイすると良い、かもしれない。

ruchikaruchika

テスト用の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に対してアクセスする。