2025年 04月 09日 - kuboard模拟登录进行能力集成

    🧠 背景介绍

    本文介绍如何通过模拟登录方式接入 Kuboard,并在无法直接使用 API 接口的场景下,实现自动化集群管理能力集成,解决运维自动化中的权限认证问题。

    Kuboard 是一款非常流行的 Kubernetes 管理面板,提供了良好的可视化集群运维能力。然而,在某些自动化集成场景下,官方提供的 API 能力有限,尤其是在集群管理、权限接入等方面仍依赖于用户界面交互:

    • SSO 登录流程需人工输入用户名密码
    • 缺乏用于登录态获取的标准开放 API
    • Token 有效期管理及跨系统调用困难

    因此,我们探索了一种 模拟浏览器行为登录 Kuboard 并获取登录态 token 的方案,进而实现自动化添加集群等操作。


    2025年 04月 08日 - Tabby 本地 AI 编码助手实战体验分享

    本文介绍如何在本地部署并使用开源的编码助手 Tabby,作为 GitHub Copilot 的替代方案,为日常开发带来更高效的 AI 辅助体验。

    🧠 背景介绍

    随着 GitHub Copilot、CodeWhisperer 等 AI 编码助手的流行,越来越多的开发者享受到智能补全带来的效率提升。然而:

    • Copilot 需要联网使用,可能涉及代码隐私问题
    • 订阅付费对于个人开发者不太友好
    • 企业私有化需求难以满足

    为此,开源项目 Tabby 提供了一个部署在本地或私有云环境的 AI 编码助手替代方案,支持 VSCode、JetBrains、Vim 等多种编辑器。


    2025年 03月 21日 - Linux 传输文件 - nc + pv

    Linux 传输文件 - nc + pv

    在 Linux 服务器之间传输文件时,scprsync 是常见的选择,但 nc (netcat) 搭配 pv (Pipe Viewer) 也提供了一种轻量级且高效的方式。本文介绍 nc + pv 组合的使用,并对比 scprsync 等传统方法。

    简要代码示例:

    # 接收端
    yum install pv nc -y
    nc -l -p 9999 | pv | tar -xf -
    # 发送端
    yum install pv nc -y
    pv /mnt/data2/k8sstorage/minio_backup.tar | nc 172.25.1.54 9999
    

    2025年 03月 19日 - GP数据库分区的合并和迁移

    备份

    #!/bin/bash
    # Greenplum 6.25.3 专用备份脚本
    # 修正路径和命令问题
    
    # 加载正确的环境变量(关键修复)
    source /usr/local/greenplum-db-6.25.3/greenplum_path.sh
    
    BACKUP_ROOT="/data/gp_backup"
    BACKUP_ROOT="/mnt/data1/gpdata/backup0320"
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    BACKUP_DIR="${BACKUP_ROOT}/${TIMESTAMP}"
    LOG_FILE="${BACKUP_DIR}/backup.log"
    
    # 节点数据库配置(保持不变)
    CURRENT_IP=$(hostname -I | awk '{print $1}')
    case $CURRENT_IP in
        10.10.1.137)
            DB_LIST=(db_01,db_02,db_03)
            ;;
        10.10.1.143)
            DB_LIST=(db_01,db_02,db_03)
            ;;
        *)
            echo "无效的服务器IP:$CURRENT_IP"
            exit 1
            ;;
    esac
    
    mkdir -p ${BACKUP_DIR} || { echo "无法创建备份目录"; exit 1; }
    
    echo "备份开始时间:$(date +'%Y-%m-%d %T')" | tee -a ${LOG_FILE}
    
    # 使用pg_dumpall替代gp_dumpall(Greenplum 6特性)
    echo "正在备份全局对象..." | tee -a ${LOG_FILE}
    pg_dumpall --globals-only -f ${BACKUP_DIR}/globals.sql 2>>${LOG_FILE}
    
    # 并行备份数据库(使用pg_dump)
    for DB in ${DB_LIST[@]}; do
        {
            echo "开始备份数据库:${DB}" | tee -a ${LOG_FILE}
            pg_dump ${DB} \
                --schema-only \
                --exclude-schema=pg_catalog \
                --exclude-schema=gp_toolkit \
                --exclude-schema=information_schema \
                -f ${BACKUP_DIR}/${DB}_schema.sql \
                2>>${LOG_FILE}
    
            pg_dump ${DB} \
                --data-only \
                --exclude-schema=pg_catalog \
                --exclude-schema=gp_toolkit \
                --exclude-schema=information_schema \
                -f ${BACKUP_DIR}/${DB}_data.sql \
                2>>${LOG_FILE}
            echo "完成备份数据库:${DB}" | tee -a ${LOG_FILE}
        } &
    done
    
    wait
    
    echo "备份完成时间:$(date +'%Y-%m-%d %T')" | tee -a ${LOG_FILE}
    echo "备份文件存储路径:${BACKUP_DIR}" | tee -a ${LOG_FILE}
    
    # 压缩备份文件
    echo "正在压缩备份文件..." | tee -a ${LOG_FILE}
    tar czf ${BACKUP_DIR}.tar.gz -C ${BACKUP_ROOT} ${TIMESTAMP} 2>>${LOG_FILE}
    
    echo "备份操作全部完成!"
    

    2025年 02月 28日 - elasticsearch数据迁移

    elasticsearch数据迁移

    npm install elasticdump -g
    # 导出
    elasticdump \
      --input=http://source-es:9200/my_index \
      --output=/path/to/my_index_mapping.json \
      --type=mapping
    elasticdump \
      --input=http://source-es:9200/my_index \
      --output=/path/to/my_index_data.json \
      --type=data
      
    # 导入
    elasticdump \
      --input=/path/to/my_index_mapping.json \
      --output=http://target-es:9200/my_index \
      --type=mapping
    
    elasticdump \
      --input=/path/to/my_index_data.json \
      --output=http://target-es:9200/my_index \
      --type=data
    

    查看索引可以通过浏览器插件es-client