使用 kuberbuilder 初始化项目 代码在: https://github.com/tangx/kubebuilder-zero-to-one 1 2 kubebuilder init --domain tangx.in kubebuilder create api --group myapp --version v1 --kind Redis 1 2 3 4 5 6 7 8 9 apiVersion: myapp.tangx.in/v1 kind: Redis metadata: name: my-op-redis spec: replicas: 1 port: 3333 1 2 3 4 5 # 安装 make install # 卸载 make uninstall 查看 crd 1 2 3 k get crd |grep tangx.in redis.myapp.tangx.in 2021-11-19T06:16:43Z……
阅读全文
Golang 库: 为什么 Golang slog 库不支持 slog.Fatal API 原文链接: https://tangx.in/posts/2023/01/06/why-dont-golang-slog-support-fatal-api/ 使用 slog 默认不支持 Fatal 如果直接把 slog 当成 log 使用, 会有一点点头疼 1 2 3 4 5 6 7 8 9 10 11 func main() { slog.Debug("debug") slog.Info("info") slog.Warn("warn") slog.Error("err", fmt.Errorf("game over")) // slog.Fatal("don't support") } // 2023/01/06 07:41:50 INFO info // 2023/01/06 07:41:50 WARN warn // 2023/01/06 07:41:50 ERROR err err="game over" slog 默认日志级别 是 info, 无法输出 DEBUG 日志。 需要自定义 handler 实现日志级别判断。 参考 Golang 库: 怎么使用 golang slog 设置日志……
阅读全文
Golang 库: 怎么使用 golang slog 设置日志 Debug 等级 原文链接: https://tangx.in/posts/2023/01/06/how-to-set-debug-level-in-golang-slog/ 在 golang 中, 日志统一 一直都是一个头疼的问题。 在 exp 中, Go 加入了一个 新库 exp/slog , 希望能转正。 这里有一些关于 slog 的介绍, 可以参考 Go 十年了,终于想起要统一 log 库了! 使用 slog 习惯误区, 默认日志级别是 Info 如果直接把 slog 当成 log 使用, 可能又一点问题。 1 2 3 4 5 6 7 8 9 10……
阅读全文
腾讯企业邮箱收到不 Gmail 邮件, DNS 记录 CNAME 记录与 MX 记录冲突 原文链接: https://tangx.in/posts/2023/01/06/dns-record-cname-confilic-with-mx/ 为了统一, 我申请了腾讯企业邮箱, 绑定了本站的域名。 但是在测试邮件的时候, 却发现 企业邮箱 发送邮件 一切正常 可以收到来自国内邮箱的邮件, 例如 QQ, 163, 却 收不到 来自 Gmail 的邮件。 查询资料后, 确定是在 DNS 解析记录中, CNAME 与 MX 记录冲突。 由……
阅读全文
4.1. 使用 cobrautils 为命令添加更实用的命令参数 之前的章节, 我们陆陆续续给 kustz 库添加了很多丰富服务的配置 但 kustz 命令, 还是处于一个很原始的命令状态。 接下来我们给 kustz 添加一些更丰富的参数 , 使 kustz 用起来更顺手。 在 CICD 的中, 一般情况下 变量,健康检查, 镜像策略 等很难发生变动。 而镜像名称 经常性 的在每次打包后发生变化……
阅读全文
3.6. 镜像拉取鉴权和策略 今天我们解决镜像拉取鉴权和策略 镜像拉取鉴权 拉取私有镜像或私有仓库镜像的时候, 需要提供鉴权信息。 在 Kubernets 中, 通过 Secret 管理账号这些账号信息。 Secret 类型分为两种, kubernetes.io/dockerconfigjson: 如果有linux安装了 docker, 就是 ~/.docker/config.json 这个文件。 kubernetes.io/dockercfg: 不太熟。 在 /pkg/tokube/pod.go 中, 可以看到 ImagePullSecrets 的处理方法。 就是将字符串转为 kubernetes 的……
阅读全文
3.5. 为 Container 添加健康检查方法 kustz 终于到了准生产的地步了。 今天的健康检查接口, 就为我们解决这个问题。 我们要知道, 确定一个应用能不能对外提供服务之前, 需要进行一个 可用性 检测。 而这个检测通常被我们称为 健康检查。 Kubernetes 的健康检查 在 Kubernetes 中, 为我们提供了 主要 的 3类状态 的健康检查。 startup: 等待探针。 如果执行成功,……
阅读全文
3.4. 用字符串定义容器申请资源上下限 Pod 的资源申请, 在调度策略中, 是一个重要的参数数据。 因此其重要性自然不必多说 容器资源申请 在官网中, 对于资源的申请和管理有详细的描述。 https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/ 和 服务质量 QoS 息息相关, https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/quality-service-pod/ 这里简单的归类, 可以速记, 按照服务质量高到低 Guaranteed: request = limit Burstable: request < limit BestEffort: 没有 request 和 limit kustz.yml 配置 还是先来看看 kustz.yml……
阅读全文
3.3. 注入 ConfigMap 和 Secrets 到容器环境变量 大家好, 我是老麦。 一个运维小学生。 有了前面两张的铺垫, 今天这个很简单。 我们说说另外一种为容器注入环境变量的方式。 容器变量注入 EnvFrom 前面我们提到过, Container 有两种方式定义环境变量, 其中一种就是 envFrom, 从 ConfigMap 或 Secret 中读取所有键值对作为容器的变量。 ConfigMap 和 Secret 看起来是这样……
阅读全文
3.2. ConfigMap 和 Secret 的生成器 上一节我们通过 k-v 和 YAML文件 为容器添加环境变量。 同时也提到了可以通过 envFrom 这个关键字, 直接读取 ConfigMap 或 Secret 中的 k-v 作为容器的环境变量。 除了环境变量之外, ConfigMap 和 Secret 还能管理的东西还很多。 所以我个人觉得单应用管理部署的话, 对于配置的管理,还是比较重要的。 Kustomize 中的 ConfigMap Env File 在 kustzomize 中, ConfigMap 和 Secret 都……
阅读全文