GZCTF 开源平台部署
Docker + K3s 分离部署
实际上也可以单台服务器部署所有环境,但最好的就是K3s与GZCTF分离成两个服务器进行部署
本文章参考官方文档:https://docs.ctf.gzti.me/zh/quick-start
准备环境
接下来的教程均以 Ubuntu 22.04.3 (其他的发行版也可以)进行演示
VPS-1:GZCTF平台+Kuboard - 192.168.3.12
VPS-2:K3s集群环境 - 192.168.3.13
开始搭建
VPS-1 - 192.168.3.12
docker
安装 sudo apt install docker.io
测试 docker -v
出现以下版本号信息即为安装成功
VPS-2 - 192.168.3.13
K3s
k3s 是一个轻量级的 k8s 发行版,可以在单机和多机上快速部署 k8s 集群
官网文档地址:https://docs.k3s.io/zh
安装命令
1 | curl -sfL https://get.k3s.io | sh - |
中国用户,可以使用以下方法加速安装:
1 | curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - |
多机安装和集群组建请参考 官方文档
测试 k3s -v
出现如下版本信息即为安装成功
docker-compose
下载最新版的docker-compose文件
1 | sudo curl -L https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose |
如果出现以下错误则安装curl后再运行一次上面的代码
sudo apt-get install curl
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试 docker-compose --version
出现如下版本信息即为安装成功
Kuboard可视化面板
此面板只是方便管理K3s集群,可以选择不装,不装请直接跳转到下面的配置文件步骤
在下面的配置中,第四行的端口示例3271
要与第六行IP地址后的端口
一致
1 | docker run -d \ |
docker创建完后,访问http://192.168.3.12:3271
即可看到管理面板
默认账号:admin
默认密码:Kuboard123
如果是生产环境,登录后请及时更改密码
绑定集群
使用第二种方法
kubeconfig
获取方法是在安装好K3s
的机器上执行
cat /etc/rancher/k3s/k3s.yaml
然后把内容全部复制到图片上的kubeconfig
中
然后把ApiServer 地址
改为192.168.3.13
即可
填写配置文件
运行以下命令创建配置文件(配置文件的位置可以随意更改)
1 | mkdir /GZCTF |
appsettings.json
注:保存该配置文件前请把注释全部删除
更多配置请看官方文档
1 | { |
docker-compose.yml
1 | version: "3.0" |
kube-config.yaml
k3s 的连接配置文件位于 /etc/rancher/k3s/k3s.yaml,可以使用以下命令导出:
sudo cat /etc/rancher/k3s/k3s.yaml
使用如下命令获取 k3s control-panel 所在机器的 IP:
sudo k3s kubectl cluster-info
若显示127.0.0.1
则说明 k3s control-panel 就是当前的机器,请使用 ip a
查看当前机器的 IP
将上述输出的内容保存为 kube-config.yaml
,并更改 server 字段为 k3s control-panel 所在机器的 IP,例如
1 | apiVersion: v1 |
最后一步
配置完成后输入在配置文件的目录下运行
docker-compose up -d
等程序创建好容器后
访问192.168.3.12
即可
其他设置
更改 K3s 的容器数量限制
k3s 默认的容器数量限制为 110,这可能不适用于比赛中的大量小容器
因此可以根据需要更改 k3s 的容器数量限制
在 k3s control-panel 所在的机器上执行以下命令:
sudo nano /etc/rancher/k3s/kubelet.config
编辑如下设置中的 maxPods
1 | apiVersion: kubelet.config.k8s.io/v1beta1 |
sudo nano /etc/systemd/system/k3s.service
编辑如下设置中的 ExecStart
,指定kubelet-arg
1 | ExecStart=/usr/local/bin/k3s \ |
重启K3s即可
sudo systemctl daemon-reload
sudo systemctl restart k3s
添加容器镜像仓库
直接使用外部的容器镜像仓库无法直接在 k3s 中使用,需要在 k3s 中添加镜像仓库。
在 k3s control-panel
所在的机器上执行以下命令:
sudo vim /etc/rancher/k3s/registries.yaml
编辑如下设置中的 mirrors
,指定你所需要的镜像仓库地址
1 | mirrors: |
重启K3s
sudo systemctl restart k3s
解决在docker中系统防火墙无法进行限制访问的问题
https://blog.csdn.net/qq_43580193/article/details/120222339
1 | # 添加规则 |
K3s卸载
运行以下命令即可一键删除K3s
sh /usr/local/bin/k3s-uninstall.sh
其他问题
如果K3s拉取镜像时出现以下问题
Failed to pull image "docker.io/kubernetesui/metrics-scraper:v1.0.8": failed to pull and unpack image "docker.io/kubernetesui/metrics-scraper:v1.0.8": failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/11/115053965e86b2df4d78af78d7951b8644839d20a03820c6df59a261103315f7/data?verify=1720885401-FQ2ec10z9ayDBBbvteS7LWUoZFY%3D": tls: failed to verify certificate: x509: certificate is valid for *.facebook.com, *.facebook.net, *.fbcdn.net, *.fbsbx.com, *.m.facebook.com, *.messenger.com, *.xx.fbcdn.net, *.xy.fbcdn.net, *.xz.fbcdn.net, facebook.com, messenger.com, not production.cloudflare.docker.com
很简单重启K3s就行了
重启命令:systemctl restart containerd
如果出现容器一开始启动成功,但是几秒后又出现容器未就绪的情况时
在GZ平台适当调整一下CPU限制、内存限制、存储限制即可
如果重启了GZ面板的服务后出现面版无法访问的问题
容器日志显示一直无法连接数据库
解决方法:
打开docker配置文件
把配置复制删除并保存,然后重启Docker服务,重启后GZ就能访问了
接着再把配置粘贴进去重启Docker服务,就能解决该问题