这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

构建模板

在 debian 12 上构建用于编程开发相关的模板

1 - 构建 basic 模板

构建最基本的 debian 12 系统

https://skyao.net/learning-pve/templates/debian12/basic/

1.1 - 构建 basic 模板

创建 debian 12/13 基础模板

制作过程

参考 debian 学习笔记 的 pve 安装文档, 安装 debian 12/13 操作系统。

然后完成基本配置,内核配置,并通过 timeshift 进行系统备份。

模板内容

debian 13

  • apt 升级到 debian 13.1.0
  • 更新 apt 到最新内核 6.12.48
  • 安装 timeshift, zsh/ohmyzsh, git, dkms, iperf/iperf3, unzip zip curl
  • 添加 proxyon/proxyoff alias for different locations
  • 修复 path 不足问题,包括用户 root 和 sky
  • 安装 sftp server, nfs server 和 client, samba server,禁用ipv6

debian 12

  • apt 升级到 debian 12.10
  • 更新 apt 到最新内核 6.1.0-34
  • 安装 timeshift, zsh/ohmyzsh, git, dkms, iperf/iperf3, unzip zip curl
  • 添加 proxyon/proxyoff alias for different locations
  • 修复 path 不足问题,包括用户 root 和 sky
  • 安装 sftp server, nfs server 和 client, samba server

1.2 - 创建虚拟机

创建使用 debian 12/13 基础模板的虚拟机

创建虚拟机

为了加速创建,可以先将模板克隆到本地,然后从本地的模板中采用 Linked Clone 方式克隆。

这样从模板 clone 虚拟机, 速度会非常快,而且空间占用也非常小。

修改虚拟机配置

主要是修改虚拟机的 hostname,以及必要时从使用 dhcp 自动获取 ip 地址修改为使用静态 ip 地址。

2 - 构建 dev 模板

构建可快速搭建,可重复使用的编程开发环境

https://skyao.net/learning-pve/templates/debian12/dev/

2.1 - 创建模板

创建基于debian12/13 的 dev 开发模板

制作过程-v1

以 debian 13 为例。

准备虚拟机

从模版 template-debian13-basic-v01 (取最新版本) full clone 克隆一个虚拟机,命名为 template-debian13-dev-v01,VM ID 为 990101.

开发需要的 cpu 和内存稍大,修改虚拟机参数,cpu 修改为 8 核,内存 32g(mini 8192,memory 32768)。

准备 ssh 证书

重新生成一份 ssh 证书,这个是要提交给 github 的,单独用一份。

搭建开发环境

安装 docker

安装开发工具

参考本读书笔记中的 开发工具 一节, 安装开发工具:

  • sdkman

语言 sdk 和 nexus 私库

参考本读书笔记中的 编程语言 一节, 安装语言 sdk 和对应的 nexus 私库:

  • Java: 包括 maven
  • golang
  • rust
  • python
  • nodejs

制作过程-v2

v2要放到广州南沙的开发环境, 网段是 192.168.0.0/24, devserver92 的 ip 是 192.168.0.92,因此所有相关的 ip 信息都要修改。

将 dev-v1 的模板传送到广州南沙,然后在这个基础上,按照上面制作 dev-v1 的流程,重头走一边制作流程,注意需要修改 ip 地址的地方,就可以完成 dev-v2 的制作。

2.2 - 创建实例

基于模板创建开发环境实例

准备虚拟机

以 debian 13 为例。

从模版 template-debian13-dev-vxx 克隆三个虚拟机,命名为 dev111/dev121/dev131,三个开发机备用.

开发需要的 cpu 和内存稍大,修改虚拟机参数,cpu 修改为 16核 (cpu 亲和性设置为 0-15,用大核),内存 32g (8192 MB 到 32768)。

基本配置修改

修改 hostname 和 使用静态 IP 地址。

理论上应该就可以直接拿来用了。后续如果发现有需要修改的地方,再记录下来。

3 - 构建 devserver 模板

构建用于编程开发的服务器模板

https://skyao.net/learning-pve/templates/debian12/devserver/

3.1 - 创建模板(debian13)

创建 debian 13 开发服务器模板

准备工作

以 debian 13 为例,debian13 后开发服务器不再是一台独立服务器和两块单独的 ssd 硬盘。所有构建方式和之前的有比较大的差异。

准备虚拟机

从模版 template-debian13-basic-v01 (取最新版本) full clone 克隆一个虚拟机,命名为 template-debian13-devserver-v01,VM ID 为 990201.

开发需要的 cpu 和内存稍大,修改虚拟机参数,cpu 修改为 8 核,内存 16g(mini 8192,memory 16384)。

准备磁盘

devserver 预计会有两台实例,用于两个异地的开发环境。

为每台实例准备了 2 块两块额外的磁盘,一块用于应用(如数据库,redis,queue等),一块用于数据(如pve需要的nfs,habor / nexus 代理仓库等)。在虚拟机硬件中,增加两块 hard disk,大小为 1024g,scsi 类型,virtIO scsi 控制器。注意把 backup 选项勾选去掉。

在 pve 中,将两块 hard disk 磁盘添加到虚拟机:

在虚拟机中可以看到这两块磁盘:

lspci | grep storage
09:01.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI
09:02.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI
09:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI

文件共享

数据存放在 /mnt/data 目录下,包括:

  • downloads: 下载的文件
  • pve-shared: pve 共享目录
  • shared: 共享目录

sftp 服务

安装了 sftp 服务,可以用于上传和下载文件。

nfs 共享

其中 pve-shared 目录用于 pve 共享目录,shared 目录用于其他的共享,两者都挂载到 nfs 服务器上。

参考本读书笔记中的 devserver193 一节, 配置好磁盘并进行分区,并挂载到 /mnt/data/mnt/app 目录, 然后安装 nfs server。

nginx下载

另外新建一个 downloads 目录,用于存放供其他机器下载的文件,通常是只读的,通过 nginx 提供 http 下载服务。

$ cd /mnt/data               
$ ls
downloads  lost+found  pve-shared  services  shared
$ cd downloads
$ ls    
docker  docker-compose  kubernetes

然后修改 nginx 配置,将 downloads 目录映射到 /var/www/html/downloads 目录。

sudo vi /etc/nginx/sites-available/default

添加如下配置:

       location /downloads {
                alias /mnt/data/downloads;
                autoindex on;                # 开启目录浏览
                autoindex_exact_size off;    # 显示文件大小时用 KB/MB
                autoindex_localtime on;      # 显示本地时间
        }

然后重启 nginx 服务:

sudo systemctl restart nginx

搭建开发环境

安装 docker 和 habor

安装开发工具

参考本读书笔记中的 开发工具 一节, 安装开发工具:

  • sdkman
  • nexus

语言 sdk 和 nexus 私库

参考本读书笔记中的 编程语言 一节, 安装语言 sdk 和对应的 nexus 私库:

  • Java: 包括 maven
  • golang
  • rust
  • python
  • nodejs

3.2 - 创建模板(debian12)

创建 debian 12 开发服务器模板

准备工作

准备虚拟机

从模版 template-debian13-basic-v01 (取最新版本) full clone 克隆一个虚拟机,命名为 template-debian13-devserver-v01,VM ID 为 990201.

开发需要的 cpu 和内存稍大,修改虚拟机参数,cpu 修改为 8 核,内存 16g(mini 8192,memory 16384)。

准备磁盘

devserver 预计会有两台实例,用于两个异地的开发环境。

我为每台实例都准备了 2 块三星 pm983a 900G 的 ssd 磁盘,一块用于应用(如数据库,redis,queue等),一块用于数据(如pve需要的nfs,nexus 代理仓库等)。

在 pve 中,将两块 ssd 磁盘直通给到虚拟机,并挂载到 /mnt/data 目录。

在虚拟机中可以看到这两块磁盘:

lspci | grep Non-Volatile
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983

参考本读书笔记中的 devserver91 一节, 配置好磁盘并进行分区,然后安装 nfs server。

搭建开发环境

安装 docker 和 habor

安装开发工具

参考本读书笔记中的 开发工具 一节, 安装开发工具:

  • sdkman
  • nexus

语言 sdk 和 nexus 私库

参考本读书笔记中的 编程语言 一节, 安装语言 sdk 和对应的 nexus 私库:

  • Java: 包括 maven
  • golang
  • rust
  • python
  • nodejs

3.3 - 创建虚拟机

创建使用 devserver 模板的开发服务器虚拟机

创建虚拟机

devserver 模板实际只会有两个虚拟机实例:

  • devserver91: ip 192.168.3.91, 用于苏州汾湖的开发环境
  • devserver92: ip 192.168.0.92, 用于广州南沙的开发环境

由于两个虚拟机都使用到直通的两块 900g 三星 pm983a ssd,因此无法简单的从模板克隆就能自动恢复所有的数据。

实践中,先按照 devserver91 的配置搭建好虚拟机,然后直接使用直通的 ssd 就能正常工作了。

devserver92 是将模板(去除直通的两块 ssd)传送到广州南沙,然后从模板克隆虚拟机,再直通两块空的 ssd 硬盘。

配置 devserver91

几乎不需要配置。

配置 devserver92

原则上需要按照搭建模板的方式, 重头走一遍所有流程来完成 devserver92 的配置。

中间很多步骤是可以重用之前已有的资料和信息,但是需要检查每一个步骤,看是否有需要改动的地方,最重要的改动就是这个机器的 ip 地址从 devserver91 的 192.168.3.91 修改为 devserver92 的 192.168.0.92。

而这个 ip 地址的修改,散落在很多地方, 为了不疏漏,只能重新走一遍完成的流程,好在大部分操作都还继续有效,只是修改个别配置文件更改 ip 地址即可。

4 - 构建 k8s 模板

构建用于 k8s 的 pve 模板

https://skyao.net/learning-pve/templates/debian12/k8s/

4.1 - 创建模板

创建 debian 12 k8s 模板

准备工作

准备虚拟机

从模版 template-debian12-basic-v03 (取最新版本) 克隆一个虚拟机,命名为 template-debian12-k8s-v01,VM ID 为 990401.

k8s 需要的 cpu 和内存稍大,修改虚拟机参数,cpu 修改为 8 核,内存 16g(mini 8192,memory 16384)。

搭建k8s

目前采用的是预热安装的方式,详细参考:

https://skyao.net/learning-kubernetes/docs/installation/kubeadm/debian12/prewarm/

4.2 - 创建虚拟机

创建使用 k8s 模板的虚拟机

创建虚拟机

从模板 template-debian12-k8s-v01 克隆一个虚拟机,命名为 k8sxxx。

配置虚拟机

参考: 克隆后的配置 一节

修改hostname 为 k8sxxx,设置 ip 地址为固定ip。

重启。

搭建k8s

wd k8s

sudo ./install_k8s_prewarm.zsh 192.168.3.112

安装完成之后记得 timeshift 备份:

sudo timeshift --create --comments "setup k8s to be host k8s112"