Proxmoxで豪華盛り合わせ環境(LXD,microk8s共存)を作る

# ProxmoxVEのインストール
## 入手元
https://www.proxmox.com/en/downloads
上記サイトからProxmox VE 8.2 ISO Installer を取得しインストールメディアを作成
ProxmoxVEのインストールに関してはインストーラーなりに進めれば特に詰まるところはないかと
FQDNに関しては例えばpve.localとかにしておけばOK

インストール完了後再起動すると
https://xxx.xxx.xxx.xxx:8006/
とProxmoxVEの管理画面のアドレスが表示されるのでブラウザでアクセスする

どの道リポジトリに問題があるので以下二つのエンタープライズリポジトリの無効化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/32794396-57eb-387c-29b6-3fd6eb978448.png)
以下の二つのリポジトリの有効化を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/936d2062-6e06-80e6-a1e0-b0a6b77186c6.png)
その後アップデートで再表示を行うと更新リストが表示されるので全部完了するまで再表示とアップグレードを繰り返す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/8c72d110-2a16-5df0-fe42-16d31bb513c6.png)

Web管理画面にログインするとサブスクリプションがないとポップアップ出る件に関しては
以下などを参照
https://suzu-ha.com/entry/2024/02/12/000000

SPICE接続する為のvirt-viewerは下記のWin x64 MSIから取得
https://virt-manager.org/download.html

Nested VM辺りの設定
https://pve.proxmox.com/wiki/Nested_Virtualization

# 共通初期設定

必要なパッケージをインストール
```shell
# apt install vim sudo
```

一般ユーザーを追加
proxmox環境ではwheelではなくsudo
```shell
# useradd user
# passwd user
# usermod -aG sudo user
# mkdir -p /home/user
# chown user:user /home/user
```

一般ユーザーにログインしてみる
```shell
# su user
$ chsh -s /usr/bin/bash
```

sudoパス不要化
```shell
$ sudo vim /etc/sudoers
```

末尾に以下を追記
```conf:/etc/sudoers
user ALL=NOPASSWD: ALL
```

snapのインストール
```shell
$ sudo apt install snapd
```

# LXDのインストール

lxdのインストール
```shell
$ sudo snap install lxd
```

lxd initを実行してみるlxdが認識されない場合は再起動
上記のエラーがが出る場合ソケットに権限を割り当てる
```shell
$ lxd init
Error: Failed to connect to local LXD: Get "http://unix.socket/1.0": dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied
```

上記のエラーがが出る場合ソケットに権限を割り当てた後ログインし直す
```shell
$ sudo chown -R lxd:lxd /var/snap/lxd/common/lxd/
$ sudo usermod -aG lxd user
```

lxd initの実施
・storage poolは後で作るのでここでは作らない
・ipv6は邪魔なので無効にしておく
・webuiはここで有効かして差し支えない
以外は何も打たずにエンターでdefaultが選ばれる
```shell
$ lxd init

Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]: no
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like the LXD server to be available over the network? (yes/no) [default=no]: yes
Address to bind LXD to (not including port) [default=all]:
Port to bind LXD to [default=8443]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes
config:
  core.https_address: '[::]:8443'
networks:
- config:
    ipv4.address: auto
    ipv6.address: none
  description: ""
  name: lxdbr0
  type: ""
  project: default
storage_pools: []
storage_volumes: []
profiles:
- config: {}
  description: ""
  devices:
    eth0:
      name: eth0
      network: lxdbr0
      type: nic
  name: default
projects: []
cluster: null
```

完了したら
https://xxx.xxx.xxx.xxx:8443に繋いでみる
入ってみると証明書を作らないといけないのでGenerateしてcrtとpfxをダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/48547282-b885-b884-9b99-14cf6f56d820.png)

crtはWinSCPなどでサーバー側に移してから任意の場所で以下を実行
ファイル名は生成環境毎に異なる
```
$ lxc config trust add ******.crt
```

ブラウザ側はブラウザ毎に手順が異なるので書いてある通りに従う
クライアント、サーバー両方に証明書読み込んでブラウザを再起動したら以下のように全メニューにアクセスできるようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/71a2d6e1-6b04-8942-65ba-6d8e49ff8f53.png)

外部接続用Bridgeを作成
ここではマニュアルにあるbr0ではなくproxmoxのvmbr0にカスケードで繋ぐ
```shell
lxc profile create bridge
lxc network attach-profile vmbr0 bridge eth0
lxc profile device add bridge root disk path=/ pool=default
```

ストレージプールを作成
lxd init時に作らなかったのでここで作成
これがないとインスタンス作成やisoアップロードで失敗する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/5f18d249-d616-71f4-e4a8-a9eefc74cda3.png)

プール名、ファイルシステム、プールサイズを指定する
プール名はdefault
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/3591f37e-e65a-1879-a340-f609bb3f4832.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/c8a4c520-75da-883c-1412-50444da2d1d6.png)

インスタンス作成
ひとまずブリッジ系が正しく動作してるかの確認でインストール完了が早いproxmoxのISOなどを使うとよいかも
インストールの時点でDHCPでのIP取得が確認できる

# microk8sのインストール

基本手順は以下を参照一部捕捉
https://microk8s.io/

バージョンは1.29指定でインストール1.30だと後の操作のmicrok8s enable communityのところでエラーになる問題がある
```shell
$ sudo snap install microk8s --channel=1.29/stable --classic
```

```shell
$ microk8s status --wait-ready
```

以上を実行すると~/.kubeに書けないと出るので以下を実施した後ログインし直し
```shell
$ mkdir ~/.kube
$ sudo usermod -a -G microk8s user
$ sudo chown -R user ~/.kube
```

各種アドオンを有効化
```shell
$ microk8s enable dashboard
$ microk8s enable dns
$ microk8s enable registry
$ microk8s enable istio
```

istroを有効にするにはcommunityを有効にしろというメッセージが出るので従う
この時ver1.30だとmicrok8s enable communityに失敗する
```shell
$ microk8s enable community
$ microk8s enable istio
````

dashboard-proxyを実行するとトークンが発行されるので
https://xxx.xxx.xxx.xxx:10443/
にアクセスしてトークンでログインする
```shell
$ microk8s dashboard-proxy
```

全てのネームスペースを選択するとkubenetesの各リソースが正しく動作しているのが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/f90d55f1-3c23-a97e-dada-d7b0a3a0596f.png)

# podmanのインストール
DockerをインストールするとKVMのブリッジネットワークが壊れるので代わりにpodmanをインストールする

```shell
sudo apt install podman
```

エラー対応の為以下を追加した後再起動
```shell:~/.bashrc
alias ll="ls -l"
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
```

```shell:/etc/containers/containers.conf
[engine]
cgroup_manager = "cgroupfs"
```

確認の為nginx podを起動
```shell
$ podman run -d --rm -p 8080:80 docker.io/library/nginx
```

# cockpitのインストール
```shell
sudo apt install cockpit cockpit-podman
sudo systemctl enable --now cockpit.socket
```

ブラウザから https://xxx.xxx.xxx.xxx:9090/ にアクセスして確認

# sambaのインストール
```shell
sudo apt install samba
```

```shell
sudo apt install samba
```

```diff:/etc/samba/smb.conf
[homes]
+   path = %H
+   valid users = %S, %D%w%S
+   read only = yes
-   read only = no
```

```shell
sudo systemctl enable --now smb
sudo systemctl enable --now nmb
```

エクスプローラーから \\\\xxx.xxx.xxx.xxx にアクセスして確認