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 集群保持最新或者减少运维负担,绝对值得一试!
项目地址:
以下是快速部署 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
常见使用如下,由于权限极高,操作时需要确保重复执行没影响。
由于我现在的环境特殊,只有一个 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"]
想了解更多官方的姿势,可以参考
---
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"]
---
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 就是个绝佳的运维工具,它让版本管理变得简单、高效、无忧,显著提升你的运维体验。
欢迎关注,可以看看我郑再打工每天都在折腾什么。
2025-05-23 19:53:12
在 AI 技术席卷全球的今天,图像生成工具正成为内容创作者、设计师和营销人员的得力助手。Raphael AI 作为全球首款完全免费、无限制、无需注册登录的 AI 图像生成器,以其强大的功能和便捷的操作,迅速在创意圈掀起热潮。
今天偶然看到的,有免费额度的 AI 图片生成器。适合生成配图或者插图,用来生成封面感觉还差点意思,和即梦效果差不多。
Raphael AI 是一款基于先进的 FLUX.1-Dev 模型打造的 AI 图像生成工具,用户只需输入文字描述(提示词),即可在几秒钟内生成高质量、多风格的图像。它的核心优势在于:
对比国内大模型,我觉得是优势功能的都标注了。为啥说一定质量保障,因为高质量需要订阅才行 😄
Humorous and funny style, preferably with a purple-haired Japanese anime girl holding a sign that says, "I need 66 more followers to reach 1000, please subscribe."
选择一个,其他都略微有些瑕疵
幽默搞笑风, 最好有个紫色头发日漫妹子举牌子,牌子上写着「我还有 66 个粉丝才满 1000,请求订阅」》
官方建议: 请用英文输入提示词以获得最佳效果
经过实操,确实英文提示词要比中文好多了,可能我问的方式仅在 ChatGPT 上实验良好。
官方也提供了一些灵感示例提示词,点击相关图片就可以查看其他人的提示词
再次实操一下,发现生成 SB 比缘生更简单哈哈哈
生成: Cute chubby Pikachu on the grass, surrounded by small white flowers, with the two Chinese characters "SB" written on Pikachu's belly, soft pastel anime style
2025-05-22 18:21:44
今天看到这个消息推送,之前也遇到过这种情况,这个简单写下如何解决,当个精神美国佬
受限于某些特殊环境或者边缘因素影响,国内是没法正常使用 Google AI 相关的产品的。(默认你已经可以访问 Google AI 等产品了)
接下来给的几种方式,都可以尝试
这个跟之前 Github 默认禁止中文用户访问类似,检查你的请求头 accept-language
信息
示例修改 Edge 默认首选语言为英语即可,生效后随便访问一个网站开发者工具查看请求头或者支持切换语言的网站打开是否为英文
如果你的账号没问题了,通常打开那些网站就可以正常使用了。如果还不行,可能就是账号问题了
当然也会带来一些问题,你打开所有支持多语言的网站都会默认使用英文,影响也不大
有可能,你很早之前就注册了谷歌账号,地区选的中国
查看账号绑定的地区 https://policies.google.com/terms
找对入口,其实也很简单,通常我们都选择美区,精神美国佬,社会大学生, 部分 AI 功能暂时只对美区开发。
换区入口 https://policies.google.com/country-association-form
理由选择其他原因,听劝
好了,其他就是基本要求了,自行准备就行。
对了,这两个我港区的小号也是可以正常访问的。
PS: 大佬们都买了
Google One Ultra
没?
2025-05-21 20:40:25
这个项目很早之前就关注过, 那时还没提供 Dockerfile😁
Drawnix 是一款基于 Plait 框架打造的免费开源白板工具,提供思维导图、流程图和自由绘画等功能。依托插件化架构,用户能够随需扩展多种交互组件。每一次操作都能实时保存至浏览器缓存,确保内容不丢失。
Drawnix ,源于绘画( Draw )与凤凰( Phoenix )的灵感交织。
凤凰象征着生生不息的创造力,而 Draw 代表着人类最原始的表达方式。在这里,每一次创作都是一次艺术的涅槃,每一笔绘画都是灵感的重生。
创意如同凤凰,浴火方能重生,而 Drawnix 要做技术与创意之火的守护者。
Draw Beyond, Rise Above.
Drawnix 底层依托作者公司开源的 Plait 画图框架,这是知识库产品的重要技术沉淀。两者紧密结合让开发者享受“一键开箱即用”的便捷,同时还能在业务分层中灵活装载自定义插件。
这款工具不仅是面向个人创作者,同样适用于团队协作与在线教学。无限画布中,每一次涂抹都让构思变得更生动、更立体,技术与想象力在此汇合,带来前所未有的白板体验。
作者已经提供了 Dockerfile,基于此 Dockerfile,我构建了一个镜像, 默认监听 80 端口,除此外无特殊配置
ccr.ccs.tencentyun.com/k7scn/drawnix
基于此97ab1d4构建完成services:
drawnix:
image: ccr.ccs.tencentyun.com/k7scn/drawnix
container_name: drawnix
ports:
- '100.90.80.15:8088:80'
restart: always
然后配置 caddy 代理即可。
我主要使用 k3s 部署,对外访问使用 cft
---
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
labels:
app: drawnix
name: drawnix
namespace: kc-system
spec:
replicas: 1
selector:
matchLabels:
app: drawnix
updateStrategy:
type: InPlaceIfPossible
template:
metadata:
labels:
app: drawnix
spec:
tolerations:
- operator: Exists
nodeSelector:
node-role.kubernetes.io/kc: "true"
containers:
- image: tcr.china.12306.work/github/drawnix
imagePullPolicy: Always
name: drawnix
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 100m
memory: 128Mi
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
labels:
app: drawnix
name: drawnix
namespace: kc-system
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: drawnix
type: ClusterIP
apply 之后,在 cfd tunnel 管理页添加公共主机名
欢迎自建,不保证 SLA,暂时不知道开源版与官方演示有什么区别。
欢迎订阅我的微信公众号,同步更新 😁
2025-05-18 22:19:56
在快节奏的软件开发世界中,高效的代码托管和自动化部署是每个开发团队的追求。你是否曾为繁琐的 CI/CD 流程而头疼?是否希望有一个简单易用、功能强大的平台来管理你的代码和流水线?今天,我们为你介绍一款开源神器——Gitness,它将彻底改变你的开发体验。
作为 Drone 和 Gitness 深度定制用户,我还值得很推荐的。
Gitness 是一个集代码托管与自动化 DevOps 流水线于一体的开源开发平台。作为 Drone CI 的下一代产品,Gitness 不仅保留了强大的持续集成(CI)功能,还新增了源代码托管能力,支持本地部署和 Docker 容器化运行。无论是个人开发者还是小型团队,Gitness 都能提供灵活、高效的解决方案。
目前官方文档未提供,需要参考官方文档 harness/harness#config.go
镜像:
harness/harness:unstable
ccr.ccs.tencentyun.com/k7scn/harness:unstable
services:
gitness:
image: harness/harness:unstable
container_name: gitness
restart: always
ports:
- "3000:3000"
- "3022:3022"
volumes:
- /data/gitness:/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- GITNESS_DEBUG=true
- GITNESS_TRACE=true
- GITNESS_GIT_TRACE=true
- GITNESS_GIT_DEFAULTBRANCH=master
- GITNESS_WEBHOOK_ALLOW_LOOPBACK=true
- GITNESS_WEBHOOK_ALLOW_PRIVATE_NETWORK=true
- GITNESS_METRIC_ENABLED=false
- GITNESS_PRINCIPAL_ADMIN_UID=ysicing
- GITNESS_PRINCIPAL_ADMIN_DISPLAY_NAME=ysicing
- [email protected]
- GITNESS_PRINCIPAL_ADMIN_PASSWORD=ysicing
# - GITNESS_SMTP_HOST=
# - GITNESS_SMTP_PORT
# - GITNESS_SMTP_USERNAME
# - GITNESS_SMTP_PASSWORD
# - GITNESS_SMTP_FROM_MAIL
# - GITNESS_SMTP_INSECURE
- GITNESS_GITSPACE_DEFAULT_BASE_IMAGE=ccr.ccs.tencentyun.com/k7scn/base:dev-ubuntu-24.04
- GITNESS_UI_SHOW_PLUGIN=true
- GITNESS_URL_GIT=http://192.168.23.16:3000/git
- GITNESS_URL_UI=http://192.168.23.16:3000
- GITNESS_URL_API=http://192.168.23.16:3000/api
- GITNESS_URL_GIT_SSH=ssh://192.168.23.16
- GITNESS_SSH_ENABLE=true
# - GITFOX_SSH_PORT=3022
# - GITNESS_CI_PARALLEL_WORKERS=2
# - GITNESS_GIT_ROOT
- GITNESS_CI_PLUGINS_ZIP_URL=https://c.ysicing.net/oss/offline/master.zip
部署完成,使用 IP:3000 访问. 账号密码需要使用设置的 GITNESS_PRINCIPAL_ADMIN_UID
和 GITNESS_PRINCIPAL_ADMIN_PASSWORD
目前配置参数过多,稍微配置不对还可能有 bug。针对这个
这里简单过一些,后面会专门写一些文章介绍一下。
对应其他 Git 服务的组织(ORG/GROUP)
执行流水线,目前支持部分 drone 插件,基本可以拿来就用如果熟悉 drone 和 gitness 的流水线语法的话
目前支持如下,感觉是借鉴了 Nexus,基本已经覆盖了日常使用。
Gitness 不仅是一款工具,更是开发者高效协作的伙伴。无论你是追求极致效率的个人开发者,还是需要稳定流水线的小型企业团队,Gitness 都能满足你的需求。不过有一说一,目前 Gitness 还是处于快速发展阶段,有 Bug 是正常不过的事,但是基本功能还是没啥问题的。其次他们开源版本支持力度不是那么紧急,更多的还是服务他们的 SAAS 产品。
2025-05-17 09:19:59
昨天升级 Nexus3 翻车了,准备基于 PG 重新搭建 Nexus3 源,并移除一些不用的软件源, 新版软件源支持如下
使用 compose 或者 k8s,原理差不多,我的环境使用 k3s。
services:
nexus3:
image: sonatype/nexus3:latest
container_name: nexus3
restart: always
ports:
- "8081:8081"
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx4G -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/nexus-data/javaprefs
- NEXUS_DATASTORE_ENABLED=true
- NEXUS_DATASTORE_NEXUS_JDBCURL=jdbc:postgresql://postgres:5432/nexus3
- NEXUS_DATASTORE_NEXUS_USERNAME=oup44Fai4ta
- NEXUS_DATASTORE_NEXUS_PASSWORD=ienah9eiquah7GeiMaengeitie5aeq66
volumes:
- /data/nexus/nexusdata:/nexus-data
depends_on:
- postgres
postgres:
image: bitnami/postgresql:17
container_name: postgres
environment:
- POSTGRESQL_DATABASE=nexus3
- POSTGRESQL_USERNAME=oup44Fai4ta
- POSTGRESQL_PASSWORD=ienah9eiquah7GeiMaengeitie5aeq66
volumes:
- /data/nexus/postgres:/bitnami/postgresql
restart: always
在启动前,先创建好目录,并给予权限
mkdir -p /data/nexus/postgres /data/nexus/nexusdata
chmod 777 /data/nexus -R
然后启动, 访问 ip:8081 即可
docker compose up -d
mirrors.china.12306.work {
import LOG "/var/log/caddy/mirrors.log"
@rootOrIndex {
path /
path /index.html
path /mirror.css
path /.help*
}
handle @rootOrIndex {
file_server {
hide .git
root /etc/caddy/pages/mirrors
}
}
reverse_proxy http://100.90.80.3:8081
}
样式我从网易镜像源借鉴来的
本文档由 ysicing 收集整理, 希望能对国内开源软件用户有所帮助.
仅列出部分核心软件包:
为什么没有我用的软件包?因为我暂时用不上, 有好的想法可以联系我.