MoreRSS

site iconYsicing | 缘生修改

博客名:Solitudes。主要的工作是使用 Go/Rust学习中来实现人们所期望的产品。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Ysicing | 缘生的 RSS 预览

解锁Kubernetes高效管理神器——k8m,让集群运维更简单

2025-06-19 22:23:00

如果你是一名开发者或运维工程师,正在为 Kubernetes 集群的复杂管理而头疼,那么今天我要给你安利一款超好用的神器——k8m!这是一款轻量级AI 驱动Mini Kubernetes AI Dashboard,专为简化集群管理而生,功能强大又易上手,堪称 Kubernetes 管理界的“效率担当”!

k8m 是什么?

k8m 是一款跨平台的 Kubernetes 管理工具,集成了大模型、AI 智能体和 MCP(Model Context Protocol)支持,旨在通过智能化和轻量化的设计,让开发者与运维人员轻松驾驭 Kubernetes 集群。它的核心理念是 “AI 驱动,轻便高效,化繁为简”,不仅功能全面,还支持单文件部署,跨 Linux、macOS、Windows 等多平台,真正做到开箱即用!

k8m 的硬核功能,一次性 Get!

k8m 的亮点多到数不过来,这里为你精选几个“真香”功能,让你感受它的强大:

AI 驱动,智能管理

新手真的很适合本地学习,简单又快捷

  • 划词解释:不认识 Kubernetes 术语?选中单词,AI 秒速给出解释!
  • YAML 翻译:复杂的 YAML 文件?k8m 自动解析并翻译字段含义,省去查文档的烦恼
  • 日志诊断:日志堆里找问题?AI 帮你快速定位错误并给出解决方案。
  • 命令推荐:只需描述需求,k8m 就能生成适合的 kubectl 命令,效率 up up up!

多集群管理,轻松切换

支持多集群统一管理,界面直观,集群切换一键搞定。无论是 Kind、MiniKube 还是生产环境的大集群,k8m 都能无缝接入,管理得井井有条。另外也支持多集群权限管理。支持对用户、用户组进行授权,可按集群授权,包括集群只读、Exec 命令、集群管理员三种权限。对用户组授权后,组内用户均获得相应授权。支持设置命名空间黑白名单

单文件部署,跨平台兼容

  • 下载最新版本,运行./k8m,访问 http://127.0.0.1:3618 即可使用,无需复杂配置
  • 支持 Linux、macOS、Windows,兼容多种架构(amd64/arm64),还可以通过 Docker 或 Kubernetes 一键部署,灵活到飞起!

Pod 操作神器

  • 实时查看 Pod 日志、支持日志下载,甚至直接在 Pod 内执行 Shell 命令
  • Pod 文件管理功能让你像操作本地文件一样浏览、编辑、上传、下载 Pod 内的文件,运维效率直接拉满!

Helm 市场支持

一键安装和管理 Helm 应用,快速部署常用工具,省时省力。

事件与异常智能分析

内置 AI 诊断功能,点击事件旁的“AI 解读”按钮,秒速分析异常原因,提供详细修复建议,排查问题 so easy!

开源免费,社区活跃

k8m 遵循 MIT 协议,完全开源,允许自由定制和商用,更新频率高,bug 修复快

k8m 的独特优势

  • 轻量高效:后端基于 Golang,前端采用百度 AMIS 框架,资源占用低,响应速度快
  • AI 加持:内置 Qwen2.5-Coder-7B 模型,支持私有化大模型接入(如 ChatGPT、Ollama),智能化管理更贴合需求
  • 用户友好:直观的 UI 设计,即使是 Kubernetes 新手也能快速上手
  • 多场景适用:从个人学习到企业级运维,k8m 都能完美适配。

如何快速上手 k8m?

下载与运行

从 GitHub 下载最新版本:https://github.com/weibaohui/k8m
运行命令:./k8m,然后访问 http://127.0.0.1:3618
想用 Docker?直接用 docker-compose 启动,配置文件参考 GitHub 文档

k8s 部署完整指南

---
apiVersion: v1
kind: Namespace
metadata:
  name: k8m
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
rules:
  - verbs:
      - "*"
    apiGroups:
      - "*"
    resources:
      - "*"
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    app: k8m
  name: k8m
rules:
  - verbs:
      - "*"
    apiGroups:
      - "*"
    resources:
      - "*"
  - verbs:
      - "*"
    nonResourceURLs:
      - "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: k8m
subjects:
  - kind: ServiceAccount
    name: k8m
    namespace: k8m
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k8m
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: k8m
subjects:
  - kind: ServiceAccount
    name: k8m
    namespace: k8m
---
apiVersion: v1
kind: Service
metadata:
  name: k8m
  namespace: k8m
  labels:
    app: k8m
spec:
  ports:
    - name: http-k8m
      protocol: TCP
      port: 3618
      targetPort: 3618
  selector:
    app: k8m
  type: ClusterIP
  # type: LoadBalancer
  # loadBalancerClass: tailscale
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: k8m-pvc
  namespace: k8m
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
---
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
  name: k8m
  namespace: k8m
  labels:
    app: k8m
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8m
  template:
    metadata:
      labels:
        app: k8m
    spec:
      containers:
        - name: k8m
          # image: docker.io/weibh/k8m:v0.0.130
          # image: ghcr.io/weibaohui/k8m:v0.0.130
          image: registry.cn-hangzhou.aliyuncs.com/minik8m/k8m:v0.0.130
          env:
            # 是否开启debug模式
            - name: DEBUG
              value: "false"
            # log输出日志级别,同klog用法
            - name: LOG_V
              value: "2"
            # 监听的端口号
            - name: PORT
              value: "3618"
            # 开启AI功能,默认开启
            - name: ENABLE_AI
              value: "true"
            # # 是否启用临时管理员账户配置,默认关闭
            - name: ENABLE_TEMP_ADMIN
              value: "false"
            # kubectl shell镜像地址
            - name: KUBECTL_SHELL_IMAGE
              value: "bitnami/kubectl:latest"
            # Node shell镜像地址
            - name: NODE_SHELL_IMAGE
              value: "alpine:latest"
            # 持久化数据库地址
            - name: SQLITE_PATH
              value: "/app/data/k8m.db"
            # 启动程序后,是否自动连接发现的集群,默认关闭
            - name: CONNECT_CLUSTER
              value: "true"
            # 是否自动注册纳管宿主集群,默认启用
            - name: IN_CLUSTER
              value: "true"
            # 是否打印配置信息
            - name: PRINT_CONFIG
              value: "false"
          ports:
            - containerPort: 3618
              protocol: TCP
              name: http-k8m
          livenessProbe:
            httpGet:
              path: /healthz
              port: 3618
            initialDelaySeconds: 30
            periodSeconds: 10
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: k8m-data
              mountPath: /app/data
      restartPolicy: Always
      serviceAccountName: k8m
      volumes:
        - name: k8m-data
          persistentVolumeClaim:
            claimName: k8m-pvc
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    app: k8m
  name: k8m
  namespace: k8m
spec:
  rules:
  - host: k8m.i.ysicing.net
    http:
      paths:
      - backend:
          service:
            name: k8m
            port:
              name: http-k8m
        path: /
        pathType: ImplementationSpecific

将上面的 yaml 保存为 k8m.yaml

kubectl apply -f k8m.yaml

等待服务启动完成后访问ingress 域名,默认用户:k8m,默认密码 k8m

预览

用户管理

登录后第一件事就是新建新的管理员账号,开启 MFA,删除默认管理员(只有删除功能没法禁用)

支持 OIDC,其实就能对接很多 OAUTH 服务了,具体 OIDC 使用说明

配置 AI 模型

内置模型其实也还行,当然也可以自己的模型

AI 智检

划词翻译

效果还是很不错的

想了解更多?可以直接访问 k8m 的 GitHub 仓库:https://github.com/weibaohui/k8m

k8s 资源

简单贴一下,更多细节可以使用 Demo 用户名密码 demo/demo

进阶玩法

通过 MCP 协议集成到 Cursor、Claude Desktop 等工具,解锁更多 AI 交互场景。 目前 k8m 内置 k8s 多集群 MCP 工具 49 种,可组合实现超百种集群操作,可作为 MCP Server 供其他大模型软件使用。轻松实现大模型管理 k8s,可详细记录每一次 MCP 调用,安全使用,无后顾之忧,避免操作越权。

总结

在 Kubernetes 管理工具层出不穷的今天,k8m 凭借轻量、AI 驱动、易用的特点脱颖而出。无论是个人开发者学习 Kubernetes,还是企业团队优化运维流程,k8m 都能为你节省时间、提升效率。更重要的是,它完全免费、开源,背后还有活跃的社区支持,未来发展值得期待!

PS: 作者修复 BUG 速度特别快。


关注我的微信公众号,更多技术吐槽和干货!

轻松部署 Artifactory(不推荐款)

2025-06-06 19:24:44

在 DevOps 实践中,软件包管理是不可或缺的一环。JFrog Artifactory 作为一款强大的制品管理工具,广泛应用于存储和管理二进制文件。本文简单介绍如何部署 Artifactory 开源版。

主要有客户需要部署这个,简单研究一下,上次用这个还是 4 年前了,新版本部署坑有点多,没老版本丝滑。简单说不如 Nexus,有兴趣的可以看看我之前写的私有化部署 Nexus3 镜像源

镜像

镜像有点点大

docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
# 国内
docker pull ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8

部署

  • docker-compose.yaml
services:
  traefik:
    image: traefik:v3.4
    container_name: traefik
    networks:
      - ysicing-net
    command:
      - "--api=true"
      - "--api.insecure=true"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.http.address=:80"
      - "--providers.docker.network=ysicing-net"
      - "--log.level=INFO"
      - "--accesslog=true"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik-dashboard.entrypoints=http"
      - "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.192.168.23.16.sslip.io`)"
      - "traefik.http.routers.traefik-dashboard.service=dashboard@internal"
      - "traefik.http.routers.traefik-dashboard-api.entrypoints=http"
      - "traefik.http.routers.traefik-dashboard-api.rule=Host(`traefik.192.168.23.16.sslip.io`) && PathPrefix(`/api`)"
      - "traefik.http.routers.traefik-dashboard-api.service=api@internal"
      - "traefik.http.middlewares.gzip.compress=true"
      - "traefik.http.routers.traefik-dashboard.middlewares=gzip@docker"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

  artifactorydb:
    image: docker.io/bitnami/postgresql:15
    # image: ccr.ccs.tencentyun.com/k7scn/postgresql:15
    container_name: artifactorydb
    restart: always
    networks:
      - ysicing-net
    volumes:
      - './postgresql:/bitnami/postgresql'
    environment:
      - POSTGRESQL_USERNAME=bn_artifactory
      - POSTGRESQL_DATABASE=bitnami_artifactory
      - POSTGRESQL_PASSWORD=bitnami

  artifactory:
    image: releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
    # image: ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8
    container_name: artifactory
    depends_on:
      - artifactorydb
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.artifactory.rule=Host(`artifactory.192.168.23.16.sslip.io`)"
      - "traefik.http.routers.artifactory.service=artifactory"
      - "traefik.http.services.artifactory.loadbalancer.server.port=8081"
      - "traefik.http.routers.artifactory-ui.service=artifactory-ui"
      - "traefik.http.routers.artifactory-ui.rule=Host(`artifactory-ui.192.168.23.16.sslip.io`)"
      - "traefik.http.services.artifactory-ui.loadbalancer.server.port=8082"
    networks:
      - ysicing-net
    environment:
      - EXTRA_JAVA_OPTIONS=-Dartifactory.home=/var/opt/jfrog/artifactory
      - JF_ROUTER_ENTRYPOINTS_EXTERNALPORT=8082
    # ports:
    #   - 8082:8082 # for router communication
    #   - 8081:8081 # for artifactory communication
    volumes:
      - artifactory_data:/var/opt/jfrog/artifactory
      - /etc/localtime:/etc/localtime:ro
      - ./system.yaml:/opt/jfrog/artifactory/var/etc/system.yaml
    restart: always
    logging:
      driver: json-file
      options:
        max-size: "50m"
        max-file: "10"
    ulimits:
      nproc: 65535
      nofile:
        soft: 32000
        hard: 40000

volumes:
  artifactory_data:
    driver: local

networks:
  ysicing-net:
    name: ysicing-net
    driver: bridge

默认使用 pg 数据库,方便些

创建配置文件 system.yaml

touch system.yaml

创建完配置文件,生成相关配置

shared:
    database:
        type: postgresql
        driver: org.postgresql.Driver
        url: jdbc:postgresql://artifactorydb:5432/bitnami_artifactory
        username: bn_artifactory
        password: bitnami

修改文件权限

chown -R 1030:1030 system.yaml
chmod 644  system.yaml

运行启动

服务非常吃资源,机器配置太低不推荐。

docker compose up -d

访问 Artifactory

地址:artifactory-ui.192.168.23.16.sslip.io
默认的账号密码 | 默认用户名 admin,默认密码 password

总结

没有特殊要求,不推荐。


欢迎关注我的微信公众号,可以看看我郑再打工每天都在折腾什么。

FFmpeg常用命令备份

2025-06-05 22:13:15

FFmpeg 是一个强大的开源多媒体处理工具,广泛应用于音视频的转换、裁剪、合并、提取等操作。无论是开发、剪辑还是日常处理,掌握 FFmpeg 的常用命令都能极大提升效率。本文整理了一些高频使用的 FFmpeg 命令,方便你快速上手或作为备忘录收藏!

临时需要处理一些上次到群晖 MinIO 的视频,写个流水线自动化处理。温故一下相关命令。

FFmpeg 简介

Fmpeg 是一个跨平台的音视频处理框架,支持几乎所有格式的音视频文件。它功能强大、命令灵活,堪称“音视频处理瑞士军刀”。以下是常见操作的命令合集,建议收藏备用!

常用命令速查

格式转换

将文件从一种格式转换为另一种格式,例如将 MP4 转为 AVI:

ffmpeg -i input.mp4 output.avi

-i:指定输入文件

提示:FFmpeg 会根据输出文件名自动推断目标格式

提取音频

从视频中提取音频,例如提取 MP3

ffmpeg -i input.mp4 -vn -acodec mp3 output.mp3
  • -vn:禁用视频流。
  • -acodec mp3:指定音频编码为 MP3

歌曲

截取视频片段

裁剪视频的指定时间段,例如从第 10 秒到第 30 秒:

ffmpeg -i input.mp4 -ss 10 -t 20 output.mp4
# 通常搭配如下
ffmpeg -i input.mp4 -ss 10 -t 20 -c copy output.mp4
  • -ss:起始时间(秒或 hh:mm:ss)
  • -t:裁剪时长(秒或 hh:mm:ss)
  • -c copy:直接复制流,避免重新编码,速度更快

视频截图

ffmpeg -ss 00:20:00 -i "input.mp4" -vframes 1 "01.jpg"

视频压缩

压缩视频文件大小,调整比特率:

ffmpeg -i input.mp4 -vcodec libx264 -b:v 1000k output.mp4
  • -b:v:设置视频比特率,值越低压缩越高,但画质可能下降

调整视频分辨率

将视频缩放到指定分辨率,例如 1280x720:

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
  • -vf scale:设置缩放参数

转换帧率

更改视频帧率,例如从 60fps 转为 24fps:

ffmpeg -i input.mp4 -r 24 output.mp4
  • -r:设置目标帧率

例如 h264 编码无损转换至 h265 编码

ffmpeg -c:v h264_cuvid -i input.mp4 -c:v hevc_nvenc -r 24 -c:a copy -x265-params lossless=1 output.mp4;

提取视频帧

将视频转为图片序列,例如每秒提取一帧:

ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png
  • %04d:生成文件名递增,如 frame_0001.png

查看文件信息

快速查看音视频文件的详细信息:

ffmpeg -i input.mp4

输出包含编码格式、分辨率、时长等详细信息

通常如下所用一键输出视频的编码、帧率、码率

codec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4)
r_frame_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
bit_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
echo -e "$codec\t$r_frame_rate\t$bit_rate\tinput.mp4"

视频合并

将多个视频文件合并为一个(需确保分辨率、编码一致):

# 创建文件列表 mv.txt
echo "file 'input1.mp4'" > mv.txt
echo "file 'input2.mp4'" >> mv.txt
ffmpeg -f concat -i mv.txt -c copy output.mp4

这个没用过,仅供参考

实用技巧与注意事项

  • Linux:apt install ffmpeg(Debian)
  • macOS:brew install ffmpeg

我仅在这两个环境实操过,其他环境可以参考官方文档,类似文档很详细了

另外结合脚本语言很方便,例如 bash

写在最后

FFmpeg 的功能远不止这些,熟练使用后,你可以轻松应对音视频处理的各种场。对于我而言,掌握基本功能从视频中导出音频文件使用就行(大部分还用不上,因为还有一些第三方工具帮你自动一键搞定)


欢迎关注我的微信公众号。

MinIO最新社区版砍掉 Web 管理功能

2025-06-03 22:14:14

近日,MinIO 社区版迎来重大更新,删除了 11 万行代码,彻底移除 Web 管理控制台功能,官方称此举为“精简代码,专注核心存储功能”。这一决定引发社区热议,对用户体验和项目生态造成显著影响。本文将深入剖析这一变化的细节、影响及社区反应。

Web 管理功能移除的影响

MinIO 作为一款高性能分布式对象存储系统,因其 S3 协议兼容性和易用性深受开发者喜爱。其 Web 管理控制台是社区版的核心功能,支持存储桶管理、文件浏览和权限配置,极大降低了操作门槛,尤其适合:

  • 非技术用户:通过直观界面快速上手,减少对命令行的依赖
  • 团队协作:便捷管理存储资源,提升效率
  • 实时监控:查看文件列表、使用量等存储状态

然而,新版本将 Web 控制台的核心管理功能(包括用户账户管理、访问策略配置、存储桶管理和系统配置)全部移除,官方推荐使用 mc 命令行工具替代。相比可视化界面,mc 命令行工具对新手不够友好,且在快速调试和监控场景下效率较低。

新老控制台对比

2025.4.22

2025.5.24

被移除的具体功能

此次更新几乎清空了 Web 管理控制台的功能,仅保留基本的对象浏览能力。以下是主要受影响的模块:

  • 账户与策略管理
    • 移除用户账户创建、访问密钥管理和策略设置功能
    • OIDC 单点登录等高级认证功能被砍,用户只能使用管理员初始账户登录,无法通过界面创建新访问密钥
  • 配置与集群管理
    • 无法通过界面查看或修改服务器配置、后端存储设置及集群状态
    • 所有实例调整和服务监控需依赖命令行或 API
  • 存储桶管理
    • 删除新建存储桶、设置策略、版本控制和生命周期规则的界面功能
    • Web 界面退化为纯对象浏览器,仅支持列出存储桶及文件
  • 其他功能
    • 服务器信息仪表盘、多节点集群视图、日志和通知配置等管理功能全部移除

简言之,新版 Web 界面已不再是管理控制台,而是一个功能极简的文件浏览器。用户被迫转向 mc 命令行工具完成所有管理任务,操作门槛显著提高

受影响的版本

  • 2025.4.22 版本是最后一个保留完整控制台功能的版本, 可用镜像 ccr.ccs.tencentyun.com/k7scn/minio:2025.4.22
  • 2025.5.24 版本则包含了删除控制台功能的改动(MinIO 官方在发布说明的 “重要事项” 中明确提到嵌入式 Web 控制台(Console)已被弃用,并移至独立的 object-browser 项目)

社区反应与讨论

MinIO 官方称,删除 11 万行代码旨在优化性能、聚焦核心存储功能。然而,Web 控制台资源占用较低,维护成本有限,社区对这一理由普遍质疑。相比之下,MinIO 商用版保留了完整的 Web 管理功能,功能更强大,引发了“社区版精简是为了推销商用版”的猜测

X 平台和 Reddit 等社区反馈显示,开发者认为这是开源项目商业化的常见策略:通过削减免费版功能,引导用户转向付费版本。部分用户甚至称此次更新为特洛伊木马式更新,批评官方未提供过渡方案,给中小团队带来额外适配成本

作为回应,社区迅速行动:

  • 启动 OpenMaxIO 分支项目,试图恢复被移除的功能
  • SeaweedFS 和 Garage 等替代方案获得更多关注

结语

MinIO 社区版移除 Web 管理功能的决定,削弱了其易用性和吸引力。开源项目的核心在于平衡社区需求与商业利益,MinIO 的后续决策将直接影响其在对象存储领域的地位。对于依赖 Web 控制台的团队,建议暂时停留在 2025.4.22 版本,或探索其他替代方案。


欢迎关注,可以看看我郑再打工每天都在折腾什么。

值得入手的Steam模拟类神作:缺氧(Oxygen Not Included)

2025-05-31 23:07:05

各位小伙伴!今天给大家安利一款超硬核、超上头的模拟经营类游戏——缺氧(Oxygen Not Included)! 如果你喜欢挑战脑力、沉浸式体验和无限可能的建造乐趣,这款游戏绝对不容错过!

缺氧是由 Klei Entertainment(饥荒开发商)打造的一款生存模拟类游戏。玩家需要在一个地下星球中管理一群可爱的小人(复制人),通过建造基地、分配资源、应对环境危机,让他们在缺氧、缺食、缺电的恶劣环境中存活下来!

特点

  • 超高自由度的建造体验
    在游戏中,你可以自由规划地下基地,设计复杂的管道、电力和氧气系统。想建一个自给自足的生态圈?还是一个高科技的自动化基地?全看你的脑洞!从简单的茅厕到复杂的核反应堆,建造过程既烧脑又满足
  • 硬核的资源管理
    氧气、食物、水、能源、温度……每一项资源都需要你精打细算。稍有不慎,小人可能会因为缺氧窒息、食物中毒,甚至被高温烫伤
  • 随机生成的挑战
    每次开局的地图和资源分布都不相同,随机事件(如陨石雨、火山喷发)让每一局都充满新鲜感。你需要根据环境灵活调整策略,永远不会觉得无聊
  • 丰富的 MOD 支持
    社区 MOD 丰富多样,从增加新建筑到优化游戏体验,应有尽有!无论你是想降低难度还是挑战极限,都能找到适合自己的玩法

我的玩法开局看水和铜多不多,不多重开

适合人群

  • 喜欢模拟经营
  • 热衷挑战的硬核玩家:喜欢烧脑、追求极限生存
  • 创意玩家:想打造独一无二的地下乌托邦

当然耐心很重要, 同时要有自我控制能力,因为很容易肝上头

入手性价比

推荐直接购买缺氧完整包, 我上个月入手大概不到 90CNY。

缺氧完整包

推荐购买正版,请勿相信廉价购买,谨防虚假入库,导致游戏和钱两失。

新手建议

  • 前期多关注氧气和食物,善用“暂停”功能规划基地
  • 游戏上手稍有难度,但官方有中文支持,社区教程也超多,入门后根本停不下来
  • 多在 B 站搜搜相关教程
  • 早期多重开几次就会玩了。

官方介绍节选

  • 建立广阔的基地以及探索生存所需的资源:
    从挖掘、资源分配到管道、电力系统,太空殖民地的一切都在你的掌控之下。然而,资源会从你第一次呼吸开始被消耗 ,所以如果你想生存下来的话,就一定要确保你探索得够快。
  • 伴随着压力模拟的精神状态问题
    给你的殖民地提供娱乐休闲活动、优越的住宿条件和更好的食物,来保证生存不会受到精神状态的影响。每个复制人之间都有差异,会对压力做出不同的潜在破坏性反应。 所以不管付出什么代价,一定要确保他们拥有愉悦的心情
  • 用复杂的气体和液体模拟系统来提高效率
    建立一个连锁的管道系统,可以迅速的将燃料和液体输送到基地的关键区域。优质的规划以及获得的加成可以让你的殖民地转变成一个运转良好的不朽机器
  • 通过电网模拟系统来获得电力:
    你可以通过众多不同的能源来获得电力,包括煤,氢,天然气或者仅仅是朴实老旧的油脂。修复电力流失,电路过载和崩溃问题以保持你殖民地的顺利运行

欢迎关注,可以看看我郑再打工每天都在折腾什么。

轻松管理K3s集群服务:System Upgrade Controller 的超实用指南

2025-05-30 21:20:34

K3s 作为轻量级 Kubernetes 发行版,以其高效、简洁的特性深受开发者与运维人员喜爱。但手动升级 K3s 集群可能是个繁琐的任务,幸好有 System Upgrade Controller!这个工具能让你的 K3s 集群实现自动化、无宕机升级,省时又省心。本文将带你了解 System Upgrade Controller 的魅力,并提供简洁的部署步骤,让你的集群管理更轻松!

主要用于升级 k3s 集群节点上的服务,不仅仅局限于 k3s 服务本身。

简介

System Upgrade Controller 是 Rancher 开发的一个自动化升级工具。它通过 Kubernetes 原生资源(如 Plan)管理节点和 K3s 版本的升级,核心优势包括:

  • 自动化:一键配置,自动完成 K3s 版本升级
  • 零宕机:逐节点升级,确保服务不中断
  • 灵活性:支持自定义升级策略,适配各种集群规模
  • 轻量高效:与 K3s 的低资源占用理念完美契合

如果你想让 K3s 集群保持最新或者减少运维负担,绝对值得一试!

项目地址:

在 K3s 上部署

以下是快速部署 System Upgrade Controller 的步骤,简单易上手

kubectl apply -f https://raw.githubusercontent.com/rancher/system-upgrade-controller/master/manifests/system-upgrade-controller.yaml

或者

kubectl apply -k github.com/rancher/system-upgrade-controller

服务控制器默认会部署到 system-upgrade 命名空间下

kubectl get deploy -n system-upgrade
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
system-upgrade-controller   1/1     1            1           335d

使用场景

常见使用如下,由于权限极高,操作时需要确保重复执行没影响。

  • 升级 k3s 本身
  • 升级 k3s 集群节点服务

升级 k3s 服务

由于我现在的环境特殊,只有一个 master 节点,每次跨版本升级 master 节点都是先手动升级到最新版本,然后在使用下面的命令升级计算节点。(保障至少 1 个控制节点版本是最新的)

---
apiVersion: v1
kind: Secret
metadata:
  name: k3s1306
  namespace: system-upgrade
type: Opaque
stringData:
  upgrade.sh: |
    #!/bin/bash

    set -x

    binfile=$(command -v k3s)

    $binfile -v | grep "v1.30.6" && (
      echo "done"
      exit 0
    ) || (
      wget https://c.ysicing.net/oss/tiga/linux/amd64/k3s
      chmod +x k3s
      mv k3s $binfile && systemctl restart k3s
    )
---
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: k3s1306
  namespace: system-upgrade
spec:
  concurrency: 3
  nodeSelector:
    matchExpressions:
      - {key: kubernetes.io/os, operator: Exists}
  tolerations:
  - {operator: Exists}
  serviceAccountName: system-upgrade
  secrets:
    - name: k3s1306
      path: /host/run/system-upgrade/secrets/k3s1306
  cordon: false
  version: latest
  upgrade:
    image: hub.ysicing.net/ysicing/debian-upgrade:20230909
    command: ["chroot", "/host"]
    args: ["sh", "/run/system-upgrade/secrets/k3s1306/upgrade.sh"]

想了解更多官方的姿势,可以参考

升级集群服务

  • 升级 tailscale 服务
---
apiVersion: v1
kind: Secret
metadata:
  name: ts-script
  namespace: system-upgrade
type: Opaque
stringData:
  upgrade.sh: |
    #!/bin/bash

    set -x
    if tailscale version 2>/dev/null | grep -q "1.82.5"; then
        echo "Tailscale 1.82.5 already installed"
        exit 0
    fi
    export DEBIAN_FRONTEND=noninteractive
    apt-get update -qq
    apt-get install -y --no-install-recommends tailscale
---
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: ts1825
  namespace: system-upgrade
spec:
  concurrency: 1
  nodeSelector:
    matchExpressions:
      - {key: kubernetes.io/os, operator: Exists}
  tolerations:
  - {operator: Exists}
  serviceAccountName: system-upgrade
  secrets:
    - name: ts-script
      path: /host/run/system-upgrade/secrets/ts-script
  cordon: false
  version: latest
  upgrade:
    image: hub.ysicing.net/ysicing/debian-upgrade:20230909
    command: ["chroot", "/host"]
    args: ["sh", "/run/system-upgrade/secrets/ts-script/upgrade.sh"]
  • 升级 easytier
---
apiVersion: v1
kind: Secret
metadata:
  name: debian
  namespace: system-upgrade
type: Opaque
stringData:
  upgrade.sh: |
    #!/bin/sh
    set -e
    if easytier-core -V 2>/dev/null | grep -q "2.2.4"; then
        echo "easytier 2.2.4 already installed"
        exit 0
    fi
    apt-get --assume-yes update
    DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --assume-yes
    curl https://c.ysicing.net/oss/scripts/easytier.sh | bash
---
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: debian-25021514
  namespace: system-upgrade
spec:
  concurrency: 3
  nodeSelector:
    matchExpressions:
      - {key: kubernetes.io/os, operator: Exists}
  tolerations:
  - {operator: Exists}
  serviceAccountName: system-upgrade
  secrets:
    - name: debian
      path: /host/run/system-upgrade/secrets/debian
  cordon: false
  version: latest
  upgrade:
    image: ysicing/debian
    command: ["chroot", "/host"]
    args: ["sh", "/run/system-upgrade/secrets/debian/upgrade.sh"]

通过上面 3 个例子,其实就是帮你去每个节点执行相关脚本,如果你有大量类似的重复的工作,System Upgrade Controller 就是个绝佳的运维工具,它让版本管理变得简单、高效、无忧,显著提升你的运维体验。


欢迎关注,可以看看我郑再打工每天都在折腾什么。