domain-admin容器化部署进阶:Kubernetes StatefulSet配置指南

domain-admin容器化部署进阶:Kubernetes StatefulSet配置指南

【免费下载链接】domain-admin 域名SSL证书监测平台、SSL证书申请自动续签。Domain and SSL Cert monitor System. 【免费下载链接】domain-admin 项目地址: https://gitcode.com/GitHub_Trending/doma/domain-admin

在当今云原生时代,容器化部署已成为应用交付的标准方式。对于domain-admin这样的域名SSL证书监测平台,采用Kubernetes StatefulSet进行部署能够提供更稳定的服务可用性和数据持久性。本文将详细介绍如何使用StatefulSet在Kubernetes集群中部署domain-admin,解决有状态应用在容器编排中的关键挑战。

为什么选择StatefulSet

domain-admin作为一个需要持久化存储和稳定网络标识的应用,传统的Deployment部署方式难以满足其需求。StatefulSet提供的固定网络标识和持久存储特性,使其成为domain-admin的理想部署方案。

StatefulSet vs Deployment

特性StatefulSetDeployment
网络标识固定DNS名称随机生成
存储稳定持久卷临时存储
更新策略有序部署/回滚并行更新
适用场景数据库、监控系统无状态服务

准备工作

在开始部署前,请确保您的环境满足以下要求:

  • Kubernetes集群版本1.19+
  • kubectl命令行工具已配置
  • 集群中已部署StorageClass
  • 已创建专用的命名空间(建议使用domain-admin

基础镜像分析

domain-admin官方提供了Dockerfile用于构建基础镜像,我们先来分析其关键内容:

Dockerfile定义了基于Python 3.7.15-alpine3.16的镜像构建过程,主要包含以下步骤:

  1. 设置工作目录为/app
  2. 安装系统依赖和Python包
  3. 配置时区为Asia/Shanghai
  4. 使用gunicorn作为WSGI服务器
FROM python:3.7.15-alpine3.16

ADD . /app

WORKDIR /app

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && apk add --no-cache --virtual .build-deps gcc musl-dev libffi-dev openssl-dev bash \
    && apk add --no-cache libffi openssl \
    && pip install --no-cache-dir --upgrade pip setuptools wheel gunicorn \
    && pip install --no-cache-dir -r requirements/production.txt \
    && apk del .build-deps

CMD gunicorn --bind '0.0.0.0:8000'  --timeout 120 'domain_admin.main:app'

存储配置

domain-admin使用SQLite作为默认数据库,存储路径配置在domain_admin/config/default_config.py中:

# 默认数据库链接
DEFAULT_DB_CONNECT_URL = "sqlite:///database/database.db"

为确保数据持久化,我们需要为domain-admin配置持久卷。

创建PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: domain-admin-data
  namespace: domain-admin
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard

StatefulSet配置

下面是domain-admin的StatefulSet配置文件,我们将逐步解析关键部分:

完整配置文件

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: domain-admin
  namespace: domain-admin
spec:
  serviceName: "domain-admin"
  replicas: 1
  selector:
    matchLabels:
      app: domain-admin
  template:
    metadata:
      labels:
        app: domain-admin
    spec:
      containers:
      - name: domain-admin
        image: gitcode.com/GitHub_Trending/doma/domain-admin:latest
        ports:
        - containerPort: 8000
          name: web
        volumeMounts:
        - name: data
          mountPath: /app/database
        env:
        - name: TZ
          value: "Asia/Shanghai"
        - name: DEFAULT_SECRET_KEY
          valueFrom:
            secretKeyRef:
              name: domain-admin-secrets
              key: secret-key
        - name: DEFAULT_DB_CONNECT_URL
          value: "sqlite:////app/database/database.db"
        livenessProbe:
          httpGet:
            path: /
            port: 8000
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 8000
          initialDelaySeconds: 5
          periodSeconds: 5
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "standard"
      resources:
        requests:
          storage: 1Gi

关键配置解析

持久化存储

通过volumeClaimTemplates为每个实例自动创建PVC,确保数据持久化:

volumeClaimTemplates:
- metadata:
    name: data
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "standard"
    resources:
      requests:
        storage: 1Gi
环境变量配置

使用环境变量覆盖默认配置,包括时区、密钥和数据库连接:

env:
- name: TZ
  value: "Asia/Shanghai"
- name: DEFAULT_SECRET_KEY
  valueFrom:
    secretKeyRef:
      name: domain-admin-secrets
      key: secret-key
- name: DEFAULT_DB_CONNECT_URL
  value: "sqlite:////app/database/database.db"
健康检查

配置存活探针和就绪探针,确保应用正常运行:

livenessProbe:
  httpGet:
    path: /
    port: 8000
  initialDelaySeconds: 30
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /
    port: 8000
  initialDelaySeconds: 5
  periodSeconds: 5

服务暴露

创建Service资源,使domain-admin能够在Kubernetes集群内部和外部访问:

apiVersion: v1
kind: Service
metadata:
  name: domain-admin
  namespace: domain-admin
spec:
  selector:
    app: domain-admin
  ports:
  - port: 80
    targetPort: 8000
  clusterIP: None  # Headless Service

如果需要从集群外部访问,可以创建Ingress资源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: domain-admin
  namespace: domain-admin
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: domain-admin.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: domain-admin
            port:
              number: 80

初始化数据库

domain-admin在首次启动时会自动初始化数据库结构,相关代码位于domain_admin/model/database.py

def init_database():
    """
    初始化数据表
    :return:
    """
    base_model.db.connect()

    db_tables = base_model.db.get_tables()

    for model, init_func in tables:
        # if not model.table_exists():
        if model._meta.table_name not in db_tables:
            logger.info('create table: %s', model._meta.table_name)
            model.create_table()

            if init_func:
                init_func()

    base_model.db.close()

系统会创建必要的表结构并初始化默认管理员账户(admin/123456),该配置在domain_admin/config/default_config.py中定义:

# 管理员默认的 账号,用户名
DEFAULT_ADMIN_USERNAME = 'admin'
DEFAULT_ADMIN_PASSWORD = '123456'

部署验证

部署完成后,可以通过以下步骤验证服务是否正常运行:

  1. 检查StatefulSet状态:
kubectl get statefulset -n domain-admin
  1. 查看Pod状态:
kubectl get pods -n domain-admin
  1. 查看服务日志:
kubectl logs -f statefulset/domain-admin -n domain-admin
  1. 访问Web界面: 通过Ingress配置的域名或直接通过Service IP访问domain-admin服务。

domain-admin界面

升级策略

使用StatefulSet部署的应用可以实现有序升级,确保服务不中断。以下是推荐的升级步骤:

  1. 创建新版本镜像
  2. 更新StatefulSet的镜像版本:
kubectl set image statefulset/domain-admin domain-admin=gitcode.com/GitHub_Trending/doma/domain-admin:new-version -n domain-admin
  1. 监控升级过程:
kubectl rollout status statefulset/domain-admin -n domain-admin

备份策略

为确保数据安全,建议定期备份domain-admin的数据卷:

kubectl exec -it statefulset/domain-admin -n domain-admin -- sh -c "tar -czf - /app/database" > domain-admin-backup.tar.gz

可以将此命令添加到定时任务中,实现自动备份。

总结

本文详细介绍了如何使用Kubernetes StatefulSet部署domain-admin,通过StatefulSet的特性解决了有状态应用在容器化部署中的关键挑战。主要内容包括:

  • StatefulSet相比Deployment的优势
  • 持久化存储配置
  • 完整的StatefulSet部署清单
  • 服务暴露和访问方式
  • 数据库初始化和系统配置
  • 部署验证和升级策略

通过这种部署方式,domain-admin能够获得稳定的网络标识和持久化存储,为域名和SSL证书的监控提供可靠保障。

官方文档:doc/source/manual/install.md 配置参考:domain_admin/config/ 数据库模型:domain_admin/model/

【免费下载链接】domain-admin 域名SSL证书监测平台、SSL证书申请自动续签。Domain and SSL Cert monitor System. 【免费下载链接】domain-admin 项目地址: https://gitcode.com/GitHub_Trending/doma/domain-admin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值