Kubernetes 运维实战

Share
Kubernetes 运维实战
Photo by Joseph Barrientos / Unsplash

在 Kubernetes 运维实践中,将集群外服务引入集群内、精准校验容器镜像版本,以及快捷更新应用配置是高频需求。本文总结了这三种场景的标准操作指南。

一、 外部服务接入(Service + Endpoints)

1. 核心原理

通过创建spec.selector 的 Service,K8s 会为其分配固定的 ClusterIP/DNS 域名。再手动创建同名 Endpoints,将集群内的流量映射至外部物理机/虚拟机的真实 IP 与端口。后续外部 IP 变更时仅需修改 Endpoints,对 Pod 内业务代码无感知,亦无需重启集群资源。

2. 资源定义配置文件

YAML

apiVersion: v1
kind: Service
metadata:
  name: opt-forecast-server
  namespace: tsysmart-test
spec:
  type: ClusterIP
  ports:
    - port: 18204
      targetPort: 18204
---
apiVersion: v1
kind: Endpoints
metadata:
  name: opt-forecast-server
  namespace: tsysmart-test
subsets:
  - addresses:
      - ip: 172.17.1.203
    ports:
      - port: 18204

3. 操作与验证指令

Bash

# 1. 应用/更新配置
kubectl apply -f external-service.yaml
kubectl edit endpoints opt-forecast-server -n tsysmart-test

# 2. 宿主机网络连通性验证
curl -v http://172.17.1.203:18204/

# 3. Pod 内 Service/DNS 解析与路由验证
kubectl exec -it <pod-name> -n tsysmart-test -- curl -v http://opt-forecast-server:18204/

二、 镜像 Manifest Digest 比对

1. 核心原理

Manifest Digest 是镜像推送到镜像仓库时生成的全局唯一、不可变的 SHA256 哈希标识。用于解决 :latest 或相同 Tag 覆盖导致的版本混淆,精准校验节点运行镜像与远程仓库源码是否一致。

2. 多端查询指令

Bash

# 1. 查看集群内 Pod 当前绑定的 Digest
kubectl describe pod <pod-name> -n <namespace> | grep "Image ID"

# 2. 查看 Worker 节点(Containerd)本地缓存的 Digest
crictl inspecti <image-name>:<tag> | grep -A 2 "repoDigests"

# 3. 免拉取远程查询镜像仓库中特定 Tag 的最新 Digest
skopeo inspect docker://<registry-url>/<repo>/<image>:<tag> | grep Digest

三、 Deployment 环境变量热更新(kubectl set env)

kubectl set env 可直接热更新 Deployment 的环境变量,执行成功后会自动触发 Pod 的滚动更新(Rolling Update)。

1. 命令基本语法

Bash

kubectl set env deployment/<deployment-name> <key>=<value> -n <namespace>

2. 高频使用场景命令

Bash

# 1. 基础添加/更新单个环境变量
kubectl set env deployment/app-manage-server ENV_TYPE=test -n tsysmart-test

# 2. 同时添加/更新多个环境变量
kubectl set env deployment/app-manage-server ENV_TYPE=test DEBUG_MODE=true -n tsysmart-test

# 3. 指定给特定容器(Container)添加环境变量(多容器场景)
kubectl set env deployment/app-manage-server ENV_TYPE=test --containers="app-container" -n tsysmart-test

# 4. 删除已有的环境变量(变量名后加“-”)
kubectl set env deployment/app-manage-server ENV_TYPE- -n tsysmart-test

# 5. 检查环境变量配置是否生效
kubectl describe deployment/app-manage-server -n tsysmart-test | grep -A 5 Environment

Read more

阿里云服务器科学上网架构升级指南

阿里云服务器科学上网架构升级指南

本手册旨在指导高级用户将其阿里云海外实例(以硅谷节点为例)的代理服务从传统 Shadowsocks (SS) 协议迁移至 VLESS-REALITY 架构。该方案的核心价值在于:通过模拟合法的 TLS 流量(如访问苹果或微软官网),在保障高速访问的同时,极大地降低了因协议特征被识别而导致 IP 被封锁的风险,从而保护服务器上并存的 Web 服务(如个人博客、简历等)不受牵连。 1. 协议演进:为何弃用 Shadowsocks 转向 VLESS-REALITY随着防火墙(GFW)对加密流量识别能力的提升,传统协议的生存空间已被严重压缩。下表从架构视角对比了两种方案的差异: 维度Shadowsocks (SS)VLESS-REALITY流量特征具有高度可识别的加密特征。无特征:完全模拟合法的 HTTPS 握手流量。安全性容易触发协议主动探测。防主动探测:通过目标网站(Dest)证书链校验。IP 封锁风险极高:一旦识别,IP 往往被阻断。

By 樊泽豪
【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

在 Python 轻量级开发中,TinyDB 因其“零部署、文件即数据库、支持对象化查询”的特性,成为了存储配置信息、多租户元数据的神器。 但在高频写入或异常崩溃的场景下,你是否遇到过这样的诡异现象:导出的 JSON 文件末尾莫名其妙多出了几个 NULNUL(\x00)空字节,导致整个数据库报 JSON 无法解析的错误? 本文将带你还原这个经典的“文件空洞”Bug,并分享如何通过自定义存储类 MyJSONStorage 彻底解决它。 一、 现象还原:消失的尾巴与诡异的 NUL 在默认情况下,TinyDB 的 JSONStorage 是这样写入文件的: 1. seek(0) 指针回到文件开头。 2. write(json_data) 写入序列化后的 JSON 字符串。 3. truncate(

By 樊泽豪
搭建K3s集群,零成本打造生产级私有云

搭建K3s集群,零成本打造生产级私有云

简介 用一套经典的云原生“黄金组合”( K3s + Rancher + Longhorn + MetalLB),在本地裸机上构建具备调度、高可用存储、独立网络与可视化运维的完整私有云基础设施。打磨出媲美公有云的生产级 K8s 体验。 ┌──────────────────────────────────────────────────────────┐ │ Rancher Web 控制台 (管理与可视面) │ └──────────────────────────┬───────────────────────────────┘ │ 统一管控 ┌──────────────────────────▼───────────────────────────────┐ │ K3s 集群 (容器编排内核) │ ├──────────────────────────┬─────────────────────────────

By 樊泽豪
Docker常用操作

Docker常用操作

安装 Windows安装Docker到F盘(非系统盘) Start-Process -FilePath 'Docker_Desktop_Installer.exe' -Wait -ArgumentList "install --installation-dir=F:\DockerDesktop" 改变容器、镜像文件位置 以管理员权限启动Docker Desktop,Settings-Resources-Disk iamge location 配置dockerhub国内源 阿里云:容器镜像服务 (aliyun.com) 其他源 more /etc/docker/daemon.json 输入以下文件: { "registry-mirrors": [ "https://kk8u6omk.mirror.aliyuncs.com", "https:

By 樊泽豪