GaGa's Blog

One GaGa, One World !

在 Kubernetes (k8s) 中,Ingress(和大多数资源一样)名字(metadata.name)是不可变的,不能直接修改


方案 1:导出现有 Ingress → 修改 → 重新创建

1
2
3
4
5
6
7
8
9
10
11
12
# 导出现有 ingress 配置
kubectl get ingress old-ingress-name -n your-namespace -o yaml > ingress.yaml

# 编辑 ingress.yaml
# 1. 修改 metadata.name: new-ingress-name
# 2. 删除 metadata.uid、resourceVersion、creationTimestamp 等字段

# 应用新配置
kubectl apply -f ingress.yaml

# 删除旧的 ingress
kubectl delete ingress old-ingress-name -n your-namespace
Read more »

httpd-2.2 已经 EOL(官方停止维护),**CentOS 9 默认只支持 httpd 2.4+**,所以编译安装需要手动处理依赖。

  • 如果必须用 2.2.27(兼容老系统/业务),建议隔离环境(如 docker / podman)运行。
  • 给出 编译安装步骤 + 优化配置 + 一键脚本。

1.依赖准备

Read more »

lynx 是一个 命令行下的纯文本网页浏览器。

  • 文本浏览器:在终端中访问网页,支持 HTTP/HTTPS、FTP 等协议。
  • 轻量快速:不解析图片、CSS、JS,仅展示网页文本,非常适合弱网环境或低性能服务器。
  • 调试工具:常用来测试 Web 服务可达性,特别是只需验证 HTML/HTTP 响应的场景。

1.应用场景

Read more »

cronolog 是一个用 C 写的小工具,用于按时间自动切割日志文件。它主要用于 Web 服务器(如 Apache、Nginx)或其他进程,将日志按时间组织成多个文件,方便管理和归档。

  • 版本:1.6.2(你提供的版本)

  • 用途:

    • 按天、小时或自定义时间切割日志
    • 文件名中包含时间戳
    • 适用于需要精细化日志管理的系统
  • 优势:

    • 灵活的时间格式(%Y-%m-%d、%H 等)
    • 无需定时任务即可自动切割
    • 可输出到管道,结合 Web 服务器使用

使用场景

  • Apache、Nginx、Squid 这类服务端进程默认只能把日志写到一个文件,不会自动分割。

  • 借助 cronolog,可以实现类似:

    • 每天生成一个新的访问日志
    • 每小时切割一个错误日志
    • 文件名中自动包含时间戳
Read more »

容器检查失败是否会自动重启

HEALTHCHECK 是用于标记容器的状态为 healthy 或 unhealthy,不会自动触发容器重启

1
2
3
4
5
6
7
8
9
...
healthcheck:
test: curl -f http://localhost:8080/health || exit 1
interval: 30s
timeout: 5s
retries: 3
start_period: 10s

restart: on-failure

Mac(或类 Unix 系统)上批量把 GBK 编码的 .txt 文件转换成 UTF-8.


1.alias组合命令(当前使用)

# 对当前目录下*.txt文件批量格式化转换
alias winfmt='find *.txt -exec sh -c "iconv -f gbk -t utf-8 {} > {}.txt" \;'
Read more »

kubectl logs 的 --previous 参数是一个很实用的选项,主要用于排查容器异常重启(CrashLoopBackOff、OOMKilled 等)时的日志。

具体含义:

  • 默认情况 (kubectl logs pod -c container)
    获取的是容器 当前正在运行实例 的日志。
    如果容器已经崩溃并被 Kubernetes 重启,新实例启动后,旧日志就不会显示。

  • 加上 --previous 参数
    会让 kubectl logs 去获取 上一个已终止容器实例 的日志。
    这对于定位容器为什么崩溃非常关键。


Read more »

1. JVM 内存 != 堆内存

-Xmx 只控制 Java 堆(Heap) 的上限,而 JVM 进程还需要其他内存区域:

  • 堆 (Heap): 由 -Xms/-Xmx 控制
  • 非堆 (Non-Heap): 元空间 (Metaspace)、代码缓存 (CodeCache)、JIT 编译出来的机器码
  • 直接内存 (Direct Memory): ByteBuffer.allocateDirect(),或者 Netty、RPC 框架常用
  • 线程栈 (Thread Stack): 每个线程 -Xss,默认一般 1M,一个容器里如果有几千线程就很夸张了
  • GC 开销 / JIT 开销: GC 线程运行需要额外内存,JIT 编译时也会占内存
  • JNI / 本地库分配: 依赖 C/C++ 库时的 malloc 内存

👉 所以,JVM 进程的实际 RSS = Heap + Non-Heap + Direct + Thread + Native,远大于 -Xmx。

Read more »

1. 基础理解

  • 管道符 |
    把前一个命令的输出结果传递给后一个命令作为输入(stdin)。

  • xargs
    把 stdin 中的内容转换成命令行参数,再执行指定命令。适合“把一堆输入拼接成参数列表”。

    1
    2
    echo "a b c" | xargs echo
    # 输出:a b c (作为 echo 的参数)
  • sed
    是流编辑器,逐行读取 stdin,对文本进行替换、删除、插入等操作。适合“在文本流中直接修改”。

    1
    2
    echo "abc" | sed 's/a/A/'
    # 输出:Abc

2. 使用场景对比

Read more »
0%