docker+k3s部署GZCTF



k3s官网

gzctf官方部署文档地址

gzctf官网

一、准备工作

1、准备三台服务器(gzctfweb、k3s-master、k3s-slave)

nameip
gzctfweb192.168.8.100
k3s-master192.168.8.101
k3s-slave192.168.8.102

2、修改用户名

hostnamectl set-hostname gzctfweb  # gzctfweb服务器执行

hostnamectl set-hostname k3s-master

hostnamectl set-hostname k3s-slave

3、关闭防火墙、清空iptables规则、(所有机器执行)

systemctl disable firewalld && systemctl stop firewalld

iptables -F

4、关闭swap分区,关闭selinux(k3s-master和k3s-slave机器执行)

sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0

swapoff -a
sed -i ' / swap / s/^\(.*\)$/#\1/g' /etc/fstab

5、配置hosts解析(k3s-master和k3s-slave机器执行)

cat >>/etc/hosts<<EOF
192.168.8.101 k3s-master
192.168.8.102 k3s-slave
EOF

二、安装docker(k3s-master和k3s-slave机器执行)

curl https://releases.rancher.com/install-docker/20.10.sh | sh

systemctl enable --now docker  # docker开启自启

三、安装k3s集群

1、k3s-master节点执行:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker --kube-controller-manager-arg=node-cidr-mask-size=18" sh -

systemctl enable --now k3s  # k3sserver自启

注意:在安装slave节点时,先在master节点用如下命令查看token

cat /var/lib/rancher/k3s/server/node-token

2、k3s-slave节点执行:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" K3S_URL=https://myserver:6443 K3S_TOKEN=mytoken sh -  

# myserver:master节点的ip、mytoken就是在master节点查看到的内容

systemctl enable --now k3s.agent   # 开启自启

3、更改 NodePort 端口范围(k3s-master机器执行)

vim /etc/systemd/system/k3s.service

在ExecStart=/usr/local/bin/k3s最后写入如下内容
 

    --kube-apiserver-arg service-node-port-range=20000-50000

4、更改 K3s 的容器数量限制(k3s-master和k3s-slave机器执行)

①:

vim /etc/rancher/k3s/kubelet.config


编写如下内容:
 

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
maxPods: 500  # 容器数量限制

②:

vim /etc/systemd/system/k3s.service

在ExecStart=/usr/local/bin/k3s最后写入如下内容:

--kubelet-arg=config=/etc/rancher/k3s/kubelet.config

5、添加容器镜像仓库(k3s-master机器执行)

vim /etc/rancher/k3s/registries.yaml


写入以下内容(我用的是docker仓库,这里可以根据自己的实际情况更改):
 

mirrors:
  "docker.io":
    endpoint:
      - "https://hub.docker.com"

6、重启k3s集群  

systemctl daemon-reload && systemctl restart k3s  # master节点
systemctl daemon-reload && systemctl restart k3s-agent # slave节点

四、搭建gzctf(在gzctfweb机器上执行)

1、准备文件

docker-compose.yml  #在k3s官网下载

version: '3.0'
services:
  gzctf:
    image: gztime/gzctf:latest
    restart: always
    environment:
      - "GZCTF_ADMIN_PASSWORD=myctfpassword"  # gzctf管理员初始密码
    ports:
      - "8080:80"
    networks:
      default:
    volumes:
      - "./data/files:/app/uploads"
      - "./appsettings.json:/app/appsettings.json:ro"
      - "./logs:/app/log"
      # - "./data/keys:/root/.aspnet/DataProtection-Keys"
      - "./k8sconfig.yaml:/app/k8sconfig.yaml:ro"
      # - "/var/run/docker.sock:/var/run/docker.sock"
    depends_on:
      - db

  db:
    image: postgres:alpine
    restart: always
    environment:
      - "POSTGRES_PASSWORD=mydbpassword"  # 数据库的密码
    networks:
      default:
    volumes:
      - "./data/db:/var/lib/postgresql/data"

networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.12.0/24


appsettings.json  # 在k3s官网下载

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=mydbpassword"  //数据库的信息
    // redis is optional
    //"RedisCache": "cache:6379,password=<Redis Password>"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "EmailConfig": {
    "SendMailAddress": "a@a.com",
    "UserName": "",
    "Password": "",
    "Smtp": {
      "Host": "localhost",
      "Port": 587
    }
  },
  "XorKey": "<Random Key Str>",
  "ContainerProvider": {
    "Type": "Kubernetes", // or "Kubernetes"
    "PublicEntry": "192.168.100.101", // or "xxx.xxx.xxx.xxx"  //这里可以写k3s-master的ip
    "DockerConfig": {
      // optional
      "SwarmMode": false,
      "Uri": "unix:///var/run/docker.sock"
    }
  },
  "RequestLogging": false,
  "DisableRateLimit": false,
  "RegistryConfig": {
    "UserName": "",
    "Password": "",
    "ServerAddress": ""
  },
  "GoogleRecaptcha": {
    "VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify",
    "Sitekey": "",
    "Secretkey": "",
    "RecaptchaThreshold": "0.5"
  }
}


k8sconfig.yaml  # 在master节点获取:cat /etc/rancher/k3s/k3s.yaml 保存为k8sconfig.yaml,
    修改k8sconfig.yaml中的server字段,将ip地址改为master节点ip,端口号不变

2. 将以上三个文件置于同一文件夹下

3、启动gzctf

docker compose -f docker-compose.yml up  # 前台运行,加-d参数可后台运行
docker compose -f docker-compose.yml stop  # 停止

docker compose -f docker-compose.yml rm  # 删除

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Docker和Kubernetes(k8s)都是当今非常热门的技术,用于容器化应用程序的部署和管理。 Docker是一个开源项目,它可以将应用程序及其依赖项打包到一个可移植的容器中,并在不同的环境中进行部署Docker容器非常轻量化和灵活,可以在不同的操作系统上运行,提供了一致的运行环境。Docker还可以通过镜像的方式进行快速部署和扩展,节省了部署和维护的时间和成本。 Kubernetes是一个用于容器编排和管理的开源平台。它可以自动化容器应用程序的部署、扩展和管理。Kubernetes提供了一种弹性和可扩展的方式来管理容器化应用程序,可以动态地调整容器的数量和配置。它还提供了监控、日志和故障恢复等功能,使得应用程序在集群中更加可靠和稳定。 在将应用程序部署到Kubernetes集群中时,首先需要将应用程序打包成Docker镜像。然后,使用Kubernetes的API或命令行工具来创建和配置一组Pod(一个或多个容器的组合)。Pod是Kubernetes的最小部署单位,它可以包含一个或多个容器,共享网络和存储资源。可以根据应用程序的需求定义Pod的资源限制和请求,并使用Kubernetes的调度器在集群中自动分配和调度Pod。 一旦Pod被创建,Kubernetes将根据指定的副本数量自动复制和扩展Pod。Kubernetes还提供了服务发现、负载均衡和网络隔离等功能,使得应用程序可以方便地与其他Pod和服务进行通信。 总而言之,通过使用Docker和Kubernetes的组合,我们可以实现高效、可扩展和可靠的容器化应用程序部署和管理。它们可以帮助我们更好地利用硬件资源,简化应用程序的部署过程,并提供高可用性和弹性。这对于现代化的云原生应用程序开发和运维来说是非常重要的。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值