# EvenChan's Ops. full machine-readable summary
Site: https://opscloud.vip
Repository: https://github.com/evenchan86
Author: Even Chan
Description: devops_note
## Site purpose
SignalPaper is a bilingual Astro theme and demo site focused on long-form writing, project archives, static search, and machine-readable publishing.
Chinese is at the root path. English lives under /en.
## Preferred crawl order
1. /for-agents
2. /llms.txt
3. /docs
4. /features
5. /posts
6. /projects
## Canonical machine endpoints
- https://opscloud.vip/sitemap.xml
- https://opscloud.vip/rss.xml
- https://opscloud.vip/llms.txt
- https://opscloud.vip/llms-full.txt
## Important routes
- https://opscloud.vip/: EvenChan 的技术博客首页。
- https://opscloud.vip/posts: 所有技术文章。
- https://opscloud.vip/projects: 进行中的项目。
## Content inventory
### Vibe Coding 02:Dynamic Workflows —— 让 Claude 自己写脚本调度几百个 Agent
- URL: https://opscloud.vip/posts/vibe-coding-02-dynamic-workflows
- Type: post
- Language: zh
- Published: 2026-05-31T04:00:00.000Z
- Tags: Vibe Coding, Claude Code, Dynamic Workflows, AI, 工作流自动化
- Summary: Claude Code Dynamic Workflows 实操体验。覆盖 JavaScript 编排脚本、三种触发方式、1000 Agent 规模上限、对抗式校验,以及我第一次跑工作流的 token 账单。
- Excerpt: 上一篇写 Hooks 的时候,Claude 还是个"听话的对话窗口"——你给指令,它一步步干,跑完报告。5/28 跟 Opus 4.8 一起放出来的 Dynamic Workflows 改了一件事:Claude 不亲自指挥了,它写一段 JavaScript 脚本,把整个调度流程写进代码里。 我第一次看到这个功能的时候,第一反应是"这不就是 Subagent 加了自动拆分?"。跑了一个真实的任务才意识到不一样。Subagent 是主 Claude 在脑子里调度,每派一个都要写一段 prompt 喂给子 Agent,prompt 本身也要吃 context。
### OpenClaw 05:知识管理 —— 让 Agent 长记性
- URL: https://opscloud.vip/posts/openclaw-05-knowledge-management
- Type: post
- Language: zh
- Published: 2026-05-29T04:00:00.000Z
- Tags: OpenClaw, Memory, 知识管理, RAG, Hermes, 运维
- Summary: OpenClaw Memory 系统的实操经验。覆盖 MEMORY.md 长期记忆、memory/ 日志工作层、memory_search 语义搜索、以及 Dreaming 自动整理机制。
- Excerpt: 接上篇文件管理,这篇说说 OpenClaw 的知识管理。Agent 不只是读文件,还需要记住之前做过什么决定、用户有什么偏好、哪些事情反复出现过。这些靠每次对话传入不现实——上下文窗口有限,而且每次重新说一遍很烦。 OpenClaw 的解法是:让 Agent 自己把重要信息写进文件,下次需要的时候自己查。 记忆分层:三层各司其职 OpenClaw 的记忆不是一股脑塞进去的。它分成三层,每层有明确的用途: | 层级 | 文件位置 | 用途 | |------|---------|------| | 长期记忆 | MEMORY.md | 持久事实、用户偏好、
### Kubernetes 出口网络策略管理操作指南
- URL: https://opscloud.vip/posts/k8s-egress-policy-howto
- Type: post
- Language: zh
- Published: 2026-05-21T04:00:00.000Z
- Tags: Kubernetes, Calico, CoreDNS, NetworkPolicy, K8s, 运维
- Summary: 用 CoreDNS hosts 插件 + Calico NetworkPolicy 实现 K8s 出口域名白名单。不改 CNI,不上 Service Mesh,纯开源方案支持 GitOps 多集群管理。
- Excerpt: 1. 概述 1.1 方案简介 在 Kubernetes 生产环境中,Pod 默认可以访问任意外部网络。本文档介绍一种通过 CoreDNS hosts 插件配合 Calico NetworkPolicy,实现出口域名访问控制的方法。 核心思路是:把需要放行的域名解析到固定 IP(比如 10.0.0.1),然后用 Calico 策略只允许访问这个 IP 段。这样不需要改 CNI,不需要引入 Service Mesh,也不用付费。 每个 namespace 可以配置独立的白名单,支持 GitOps 多集群管理,有 CI 检测冲突,有监控告警,也有完整的回滚方案
### Vibe Coding 01:Claude Code Hooks —— 让 AI 按你的规矩来
- URL: https://opscloud.vip/posts/vibe-coding-01-hooks
- Type: post
- Language: zh
- Published: 2026-05-15T04:00:00.000Z
- Tags: Vibe Coding, Claude Code, Hooks, 工作流自动化
- Summary: Claude Code Hooks 实践指南。覆盖 PostToolUse 自动格式化、PreToolUse 命令拦截、Notification 桌面提醒、Stop 审查门禁等场景的配置和实测经验。
- Excerpt: 用了几个月 Claude Code,我发现一个规律:每次让 AI 自由发挥,总有那么一两件小事它会忘。格式化不一致、改到不该动的文件、跑完命令不通知我。 这些东西不该靠 prompt 去"请"它做——prompt 是软约束,它可能在第七轮对话后开始忽略。Hooks 是硬约束,每次都执行。 Claude Code 的 Hooks 在特定生命周期节点自动跑 shell 命令。编辑文件后、执行命令前、等待用户输入时、会话结束时——每个节点都能挂一段脚本。 我不是要翻译官方文档。这篇只记录我实际用上的几个 Hook,以及踩到的坑。 Hook 放在哪 两个位置:
### OpenClaw 04:文件管理 —— AI 翻你文件夹的能力
- URL: https://opscloud.vip/posts/openclaw-04-file-management
- Type: post
- Language: zh
- Published: 2026-05-07T10:00:00.000Z
- Tags: OpenClaw, 教程, Agent, 文件管理
- Summary: OpenClaw 文件管理四大能力实测:智能搜索、批量处理、自动整理、磁盘清理。记录了实际使用效果和踩到的坑。
- Excerpt: 上篇把 Gateway 跑顺了。这篇聊一个我一直想试的功能:让 AI 翻我的文件夹。 运维干了十几年,文件管理是个无底洞。截图、配置文件、日志、客户文档、发票、合同——名字乱、格式杂、散得到处都是。每次找东西都要靠记忆翻半天。OpenClaw 号称能访问本地文件,我花了一个下午把这四个能力都试了一遍。 解决方法 显然,调大最大值的限制就可以了。不过更大的限制意味着可以承接更多连接,意味着要耗费更多资源,这点要注意。 查看当前有多少活跃连接: 如果这个值跟上面介绍的 nfconn
### 如何快速修复重装系统后的 Kubernetes Master 节点
- URL: https://opscloud.vip/posts/%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E4%BF%AE%E5%A4%8D%E9%87%8D%E8%A3%85%E7%B3%BB%E7%BB%9F%E5%90%8E%E7%9A%84-kubernetes-master-%E8%8A%82%E7%82%B9
- Type: post
- Language: zh
- Published: 2023-05-06T06:19:00.000Z
- Tags: 教程, kubernetes
- Summary: 如何快速修复重装系统后的 Kubernetes Master 节点
- Excerpt: 本篇主要记录的是新系统 Ubuntu 20.04 初始化的过程,完成初始化之后采用优秀的集群安装工具 Kubekey 的 add nodes 命令,无需修改配置文件,一键就将节点重新加入了集群。
1. 恢复 Etcd 三个节点的 Etcd 集群,只有一个节点运行是无法工作的。因此,务必首先修复 Etcd 集群。这里比较幸运的是,系统重装之后 Ip 没有发生变化,否则需要重新生成证书。 在重装节点上,拷贝其他节点的 Etcd 二进制文件、配置文件、启动文件 通常,一个 Etcd 集群的所有节点启动方式一样,只需要完全拷贝另外一个节点的即可。
### k8s-ConfigMap 实现应用和配置分离
- URL: https://opscloud.vip/posts/k8s-configmap-%E5%AE%9E%E7%8E%B0%E5%BA%94%E7%94%A8%E5%92%8C%E9%85%8D%E7%BD%AE%E5%88%86%E7%A6%BB
- Type: post
- Language: zh
- Published: 2023-04-07T01:19:00.000Z
- Tags: 教程, kubernetes
- Summary: k8s-ConfigMap 实现应用和配置分离
- Excerpt: ConfigMap 背景 应用程序的运行可能会依赖一些配置,而这些配置又是可能会随着需求产生变化的,如果我们的应用程序架构不是应用和配置分离的,那么就会存在当我们需要去修改某些配置项的属性时需要重新构建镜像文件的窘境。
现在,ConfigMap组件可以很好的帮助我们实现应用和配置分离,避免因为修改配置项而重新构建镜像。 ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 Secret 很类似,但它可以更方便地处理不包含敏感信息的字符串。
ConfigMap 创建方
### Kubernetes的调度均衡器Descheduler
- URL: https://opscloud.vip/posts/kubernetes%E7%9A%84%E8%B0%83%E5%BA%A6%E5%9D%87%E8%A1%A1%E5%99%A8descheduler
- Type: post
- Language: zh
- Published: 2021-02-08T06:22:00.000Z
- Tags: 排错, kubernetes
- Summary: Kubernetes的调度均衡器Descheduler
- Excerpt: 马上春节了,在这祝大家春节快乐。前阵子在使用K8S集群的时候,经常遇到Pod调度不均衡的问题,排查了许久也没找到所以然,最后人为的归结到Scheduler调度不够智能上(机智如我)。这不,为了使集群能够更均衡,充分利用节点,特地研究了一下Descheduler,下面内容主要来自官方文档,喜欢看官方文档的可以划到结尾处,喜欢看中文的,可以收藏慢慢看,对长期从事K8S集群管理的YAML工程师来说,还是有点用。
在Kubernetes中,kube-scheduler负责将Pod调度到合适的Node上,但是Kubernetes是一个非常动态的,高度
### K8S calico组件故障排查
- URL: https://opscloud.vip/posts/k8scalico%E7%BB%84%E4%BB%B6%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5
- Type: post
- Language: zh
- Published: 2021-01-28T07:19:00.000Z
- Tags: 排错, kubernetes
- Summary: K8S calico组件故障排查
- Excerpt: 记录k8s集群calico组件故障解决过程,pod报错信息: Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 172.18.0.1
问题 k8s集群重启后,发现在worker节点上的calico组件运行状态如下(图是问题解决后,翻之前的输出截的,没有加-o wide选项):
解决 在一开始,我曾尝试着将名为calico-node-fg6bn的pod删除后,让其自行重启,进行解决问题,但是发
### K8S备份、恢复、迁移神器 Velero
- URL: https://opscloud.vip/posts/k8s%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E8%BF%81%E7%A7%BB%E7%A5%9E%E5%99%A8-velero
- Type: post
- Language: zh
- Published: 2021-01-12T07:19:00.000Z
- Tags: 备份, kubernetes
- Summary: K8S备份、恢复、迁移神器 Velero
- Excerpt: 前言 Kubernetes 集群备份一直是我们的痛点。虽然可以通过备份ETCD来实现K8S集群备份,但是这种备份很难恢复单个 Namespace。 今天推荐 Velero 工具,它提供以下功能: - 灾备场景:提供备份恢复k8s集群的能力 - 迁移场景:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置) Velero 项目地址:https://github.com/vmware-tanzu/velero Velero 阿里云插件地址:https://github.com/AliyunContainerService/
### k8s之纵向扩缩容Vpa
- URL: https://opscloud.vip/posts/k8s%E4%B9%8B%E7%BA%B5%E5%90%91%E6%89%A9%E7%BC%A9%E5%AE%B9vpa
- Type: post
- Language: zh
- Published: 2021-01-12T03:19:00.000Z
- Tags: 调优, kubernetes
- Summary: k8s之纵向扩缩容Vpa
- Excerpt: vpa 纵向容器自动缩放器(VPA)使用户无需设置最新的资源限制和对容器中容器的要求。配置后,它将根据使用情况自动设置请求,从而允许在节点上进行适当的调度,以便为每个Pod提供适当的资源量。它还将保持限制和初始容器配置中指定的请求之间的比率。 它既可以根据资源的使用情况来缩减对资源过度使用的Pod,也可以对资源需求不足的向上扩展Pod。 Kubernetes VPA 包含以下组件: - Recommender:用于根据监控指标结合内置机制给出资源建议值 - Updater:用于实时更新 pod resource requests - History St
### 01. GO之从零实现Web框架
- URL: https://opscloud.vip/posts/01-go%E4%B9%8B%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0web%E6%A1%86%E6%9E%B6
- Type: post
- Language: zh
- Published: 2020-12-31T01:19:00.000Z
- Tags: Go, go
- Summary: 01. GO之从零实现Web框架
- Excerpt: 本文是 7天用Go从零实现Web框架Gee教程系列的第一篇。 - 简单介绍net/http库以及http.Handler接口。 - 搭建Gee框架的雏形,代码约50行。
标准库启动Web服务 Go语言内置了 net/http库,封装了HTTP网络编程的基础的接口,我们实现的Gee Web 框架便是基于net/http的。我们接下来通过一个例子,简单介绍下这个库的使用。 day1-http-base/base1/main.go
我们设置了2个路由,/和/hello,分别绑定 indexHandler 和 helloHandler
### etcd-operator的部署及使用
- URL: https://opscloud.vip/posts/etcd-operator%E7%9A%84%E9%83%A8%E7%BD%B2%E5%8F%8A%E4%BD%BF%E7%94%A8
- Type: post
- Language: zh
- Published: 2020-12-04T02:07:00.000Z
- Tags: 部署, kubernetes
- Summary: etcd-operator的部署及使用
- Excerpt: 1. 部署RBAC 下载createrole.sh、cluster-role-binding-template.yaml、cluster-role-template.yaml 例如: 示例:
1.1. createrole.sh 脚本 createrole.sh有三个入参,可以指定--namespace参数,该参数与etcd-operator部署的namespace应一致。默认为default。
1.2. cluster-role-binding-template.yaml
1.3. cluster-role-t
### Kubernetes 最佳安全实践指南(更新版)
- URL: https://opscloud.vip/posts/kubernetes-%E6%9C%80%E4%BD%B3%E5%AE%89%E5%85%A8%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97%E6%9B%B4%E6%96%B0%E7%89%88
- Type: post
- Language: zh
- Published: 2020-11-27T01:07:00.000Z
- Tags: 优化, kubernetes
- Summary: Kubernetes 最佳安全实践指南(更新版)
- Excerpt: 前言 对于大部分 Kubernetes 用户来说,安全是无关紧要的,或者说没那么紧要,就算考虑到了,也只是敷衍一下,草草了事。实际上 Kubernetes 提供了非常多的选项可以大大提高应用的安全性,只要用好了这些选项,就可以将绝大部分的攻击抵挡在门外。为了更容易上手,我将它们总结成了几个最佳实践配置,大家看完了就可以开干了。当然,本文所述的最佳安全实践仅限于 Pod 层面,也就是容器层面,于容器的生命周期相关,至于容器之外的安全配置(比如操作系统啦、k8s 组件啦),以后有机会再唠。
1. 为容器配置 Security Context 大
### Pod 一直停留在 Terminating 状态问题处理
- URL: https://opscloud.vip/posts/pod-%E4%B8%80%E7%9B%B4%E5%81%9C%E7%95%99%E5%9C%A8-terminating-%E7%8A%B6%E6%80%81%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86
- Type: post
- Language: zh
- Published: 2020-11-20T01:23:00.000Z
- Tags: 排错, kubernetes
- Summary: Pod 一直停留在 Terminating 状态问题处理
- Excerpt: 前言 近期,弹性云线上集群发生了几起特殊的容器漂移失败事件,其特殊之处在于容器处于 Pod Terminating 状态,而宿主则处于 Ready 状态。 宿主状态为 Ready 说明其能够正常处理 Pod 事件,但是 Pod 却卡在了退出阶段,说明此问题并非由 kubelet 引起,那么 docker 就是 1 号犯罪嫌疑人了。 下文将详细介绍问题的排查与分析全过程。
2. 抽丝剥茧 2.1 排除 kubelet 嫌疑 Pod 状态如下: 尽管 kubelet 的犯罪嫌疑已经很小,但是我们还是需要排查 kubelet 日志进一步确认。截取
### golang cobra的一些笔记
- URL: https://opscloud.vip/posts/golang-cobra-notes
- Type: post
- Language: zh
- Published: 2020-11-17T02:19:00.000Z
- Tags: 扩展, go
- Summary: golang cobra的一些笔记
- Excerpt: 这几天稍微写了下cobra,网上搜到的博客分为两类,一类是把官方的readme翻译一下完事的,一类是写的都太简单了没有实际常见场景的。这里不废话了,先用官方demo讲解下 Cobra介绍 是一个golang的库,其提供简单的接口来创建强大现代的CLI接口,类似于git或者go工具。同时,它也是一个应用,用来生成个人应用框架,从而开发以Cobra为基础的应用。热门的docker和k8s源码中都使用了Cobra Cobra 结构由三部分组成:命令( Command )、标志( Flag )、参数( Args )。 传统Linux和unix的话命令规范为情况为
### 从一次IPVS故障开始的Kubernetes容器网络排障
- URL: https://opscloud.vip/posts/%E4%BB%8E%E4%B8%80%E6%AC%A1ipvs%E6%95%85%E9%9A%9C%E5%BC%80%E5%A7%8B%E7%9A%84kubernetes%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C%E6%8E%92%E9%9A%9C
- Type: post
- Language: zh
- Published: 2020-10-29T07:07:00.000Z
- Tags: 优化, kubernetes
- Summary: 从一次IPVS故障开始的Kubernetes容器网络排障
- Excerpt: 问题现象是集群运行一段时间后kube-proxy停止更新IPVS规则,这个问题是由一个存在于1.11.5/1.12.2/1.13.0版本中的bug造成的。并在以下版本中得到了修复,可以查看kubernetes/kubernetes#71071了解更多信息。 - 1.11.7 - 1.12.5 - 1.13.2 另一方面,也可以通过将未修复版本的kube-proxy设置为iptables模式来规避这个问题。 开始讲故事 最近有两个新平台部署,第一次在线上启用了很多新方案。包括Master高可用,LVS,持久化存储,Prometheus监控。本以为在测试环境
### K8S 部署流程
- URL: https://opscloud.vip/posts/%E6%9C%AC%E5%9C%B0-kubernetes-%E9%9B%86%E7%BE%A4%E5%AE%89%E8%A3%85
- Type: post
- Language: zh
- Published: 2020-10-26T09:19:00.000Z
- Tags: 部署, kubernetes
- Summary: K8S 部署流程
- Excerpt: 本地 Kubernetes 集群安装 0. 网络环境的准备 Kubernetes 用到的很多镜像都在 gcr.io 上,在国内访问会有困难。 这里提供两个手段: - 在家庭路由器上整个科学代理,实现全局科学上网。 - 使用 liangyuanpeng 大佬在评论区提供的 gcr 国内镜像地址,这需要进行如下替换: - k8s.gcr.io—> lank8s.cn - gcr.io—> gcr.lank8s.cn 1. 节点的环境准备 首先准备三台 Linux 虚拟机,系统按需选择,然后调整这三台机器的设置: - 节点配置: - master:不低于 2c
### K8S 问题排查:cgroup 内存泄露问题
- URL: https://opscloud.vip/posts/k8s-%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5cgroup-%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2%E9%97%AE%E9%A2%98
- Type: post
- Language: zh
- Published: 2020-10-26T09:19:00.000Z
- Tags: 排错, kubernetes
- Summary: K8S 问题排查:cgroup 内存泄露问题
- Excerpt: 前言 这篇文章的全称应该叫:[在某些内核版本上,cgroup 的 kmem account 特性有内存泄露问题],如果你遇到过 pod 的 cannot allocated memory 报错,node 内核日志的 SLUB: Unable to allocate memory on node -1 报错,那么恭喜你中招了。 这个问题在 pingcap 文章 和腾讯云的官方修复都发过,原因也讲的很清楚,不过因为版本差异,文章里的方法有所变动,这里做下总结。 现象 我们的环境: - K8S 版本: 1.11、1.13、1.16 - docker 版本:18
### Kubernetes 平滑移除节点
- URL: https://opscloud.vip/posts/kubernetes-%E5%B9%B3%E6%BB%91%E7%A7%BB%E9%99%A4%E8%8A%82%E7%82%B9
- Type: post
- Language: zh
- Published: 2020-10-23T07:07:00.000Z
- Tags: 优化, kubernetes
- Summary: Kubernetes 平滑移除节点
- Excerpt: 如果你想从Kubernetes集群中删除节点,正确流程如下: 获取节点列表
设置不可调度 由于节点目前处于正常工作状态,集群中新建资源还是有可能创建到该节点的,所以先将节点设置为不可调度:
将节点上资源调度到其他节点 目前集群已经不会分配新的资源在该节点上了,但是节点还运行着现有的业务,所以我们需要将节点上的业务分配到其他节点: 注意:DaemonSet Pod 和 Static Pod 是不会在集群中其他节点重建的。
移除节点 当前集群中已经没有任何资源分配在节点上了,那么我们可以直接移除节点:
### 使用 Docker 加速开发工作流
- URL: https://opscloud.vip/posts/%E4%BD%BF%E7%94%A8-docker-%E5%8A%A0%E9%80%9F%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81
- Type: post
- Language: zh
- Published: 2020-10-09T01:53:00.000Z
- Tags: 优化, Docker
- Summary: 使用 Docker 加速开发工作流
- Excerpt: 在开发工作流中使用 Docker 可以极大提高生产力,它消除了"它在我机器上都可以运行"这类典型的错误,在不同的机器上运行也只需要一个 Docker 守护进程,而不需要其他组件。
什么是 Docker Docker 是一个可以运行容器平台,为了运行这些容器,Docker 使用了操作系统级的虚拟化技术,你可以把容器看作是一个轻量级版本的虚拟机。 你在 Docker 平台上运行的所有容器都是相互隔离的。要启动一个容器,你需要一个 Docker 镜像,这个镜像是你的容器的模板,你可以从 Docker Hub 中获取已经预定义的镜像,或者通过编写
### 如何在不重建镜像的情况下修改容器
- URL: https://opscloud.vip/posts/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E9%87%8D%E5%BB%BA%E9%95%9C%E5%83%8F%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%BF%AE%E6%94%B9%E5%AE%B9%E5%99%A8
- Type: post
- Language: zh
- Published: 2020-09-29T06:19:00.000Z
- Tags: 优化, kubernetes
- Summary: 如何在不重建镜像的情况下修改容器
- Excerpt: 现在我们使用容器非常频繁,偶尔有一些需求需要更改容器镜像中的一些行为,也许是一个很小的变化,一般我们能想到的就是重新构建镜像,但是这个我们就需要重新构建发布镜像了,除了构建镜像这种方式之外其实还有其他方式可以来实现这个需求。
初始化容器 Init Containers 是为了给 Pod 中定义的主容器提供附加功能的。它们在主容器之前执行,可以使用不同的容器镜像,如果出现任何故障,它们将阻止主容器的启动,所有的日志都可以很容易查看到,故障排除也相当简单,它们就像在 Pod 中定义的任何其他容器一样。这种方法在数据库等服务中比较常用,可以根据配
### 5个维度对 Kubernetes 集群优化
- URL: https://opscloud.vip/posts/5%E4%B8%AA%E7%BB%B4%E5%BA%A6%E5%AF%B9-kubernetes-%E9%9B%86%E7%BE%A4%E4%BC%98%E5%8C%96
- Type: post
- Language: zh
- Published: 2020-09-29T02:19:00.000Z
- Tags: 优化, kubernetes
- Summary: 5个维度对 Kubernetes 集群优化
- Excerpt: 节点配额和内核参数调整 对于公有云上的 Kubernetes 集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括: - 虚拟机个数 - vCPU 个数 - 内网 IP 地址个数 - 公网 IP 地址个数 - 安全组条数 - 路由表条数 - 持久化存储大小 参考gce随着node节点的增加master节点的配置: - 1-5 nodes: n1-standard-1 - 6-10 nodes: n1-standard-2 - 11-100 nodes: n1-standard-4 - 101-250 nodes: n1
### Kubernetes 故障解决心得 (一)
- URL: https://opscloud.vip/posts/kubernetes-%E6%95%85%E9%9A%9C%E8%A7%A3%E5%86%B3%E5%BF%83%E5%BE%97-%E4%B8%80
- Type: post
- Language: zh
- Published: 2020-09-11T05:23:00.000Z
- Tags: 排错, kubernetes
- Summary: Kubernetes 故障解决心得 (一)
- Excerpt: 故障一 故障现象 kubelet 启动不了,通过命令 journalctl -u kubelet 查看日志,报 Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top level Burstable QOS cgroup : failed to set supported cgroup subsystems for cgroup [kubepods burstable]: failed to find subs
### 根据 Configmap Secret 变化更新 Deployment
- URL: https://opscloud.vip/posts/%E6%A0%B9%E6%8D%AE-configmap-secret-%E5%8F%98%E5%8C%96%E6%9B%B4%E6%96%B0-deployment
- Type: post
- Language: zh
- Published: 2020-09-11T02:39:00.000Z
- Tags: 部署, kubernetes
- Summary: 根据 Configmap Secret 变化更新 Deployment
- Excerpt: 这个项目叫做 Reloader,它可以监控 Configmap/Secret 的变化,根据 Annotation 选择 Deployment,对相关 Deployment 进行滚动更新。 部署 简单工具的安装还是很简单的: 如果无法拉取,可以去我github上拉取相关配置文件Github 首先创建我们要用到的配置对象Configmap(domainname.conf): kubectl create configmap nginx-conf --from-file=configmap/conf/ 接下来部署一个Nginx,来验证 Reloader 的功能
### Kubernetes 资源预留配置
- URL: https://opscloud.vip/posts/kubernetes-%E8%B5%84%E6%BA%90%E9%A2%84%E7%95%99%E9%85%8D%E7%BD%AE
- Type: post
- Language: zh
- Published: 2020-09-10T02:07:00.000Z
- Tags: 优化, kubernetes
- Summary: Kubernetes 资源预留配置
- Excerpt: Kubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。除非为这些系统守护进程留出资源,否则它们将与 Pod 争夺资源并导致节点资源短缺问题。 当我们在线上使用 Kubernetes 集群的时候,如果没有对节点配置正确的资源预留,我们可以考虑一个场景,由于某个应用无限制的使用节点的 CPU 资源,导致节点上 CPU 使用持续100%运行,而且压榨到了 kubelet 组件的 CPU 使用,这样就会导致 k
### Kubernetes 临时存储需要限制吗?
- URL: https://opscloud.vip/posts/kubernetes-%E4%B8%B4%E6%97%B6%E5%AD%98%E5%82%A8%E9%9C%80%E8%A6%81%E9%99%90%E5%88%B6%E5%90%97
- Type: post
- Language: zh
- Published: 2020-09-09T01:00:00.000Z
- Tags: 优化, kubernetes
- Summary: Kubernetes 临时存储需要限制吗?
- Excerpt: 临时存储简介 Node节点通常还可以具有本地的临时性存储,由本地挂载的可写入设备或者 RAM来提供支持。 临时(Ephemeral) 意味着对所存储的数据不提供长期可用性的保证。 Pods 通常可以使用临时性本地存储来实现缓冲区、保存日志等功能。 kubelet 可以为使用本地临时存储的 Pods 提供这种存储空间,允许后者使用 emptyDir 类型的卷将其挂载到容器中。 kubelet 也使用此类存储来保存节点层面的容器日志, 容器镜像文件、以及运行中容器的可写入层。
临时存储有哪些 - 本地临时存储(local ephemeral s
### 打造高效的Kubernetes命令行终端 iTerm2 + kubectl + kubectx + kube-ps1 + oh-my-zsh
- URL: https://opscloud.vip/posts/%E6%89%93%E9%80%A0%E9%AB%98%E6%95%88%E7%9A%84kubernetes%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%BB%88%E7%AB%AF-iterm2--kubectl--kubectx--kube-ps1--oh-my-zsh
- Type: post
- Language: zh
- Published: 2020-08-17T02:07:00.000Z
- Tags: 优化, kubernetes
- Summary: 打造高效的Kubernetes命令行终端 iTerm2 + kubectl + kubectx + kube-ps1 + oh-my-zsh
- Excerpt: 本文介绍如何打造一个高效的Kubernetes命令行终端以及Kubernetes命令行操作。 为什么我们要打造高效的Kubernetes命令行终端呢?因为下面的三点原因: - Kubernetes作为云原生时代的“操作系统”,熟悉和是用它是每名用户(User)的必备技能。 - 命令行是最高效,最有“逼格”的操作方式,在喜欢命令的人眼里dashboard不是给开发者和管理员用的。 - kubenetes原生提供了kubectl命令就很好用,再通过命令行调用很方便的说啊! 前几天看到dev.to网站里有人讨论Can I see your terminal?
### 实用的bash自定义脚本
- URL: https://opscloud.vip/posts/%E5%AE%9E%E7%94%A8%E7%9A%84bash%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC
- Type: post
- Language: zh
- Published: 2020-08-13T06:03:00.000Z
- Tags: shell, linux
- Summary: 实用的bash自定义脚本
- Excerpt: 工作越久 越能发现bash 自动化脚本的实用与好处 bash 用得好的话 在提升工作效率方面说“积小流而成江海”也不为过
前置条件 所有命令只在 MacOS 系统上测试使用 同时都是写入 /.bashprofile 然后 source /.bashprofile 进行更新应用(有些也可能是 .bashrc) 为了省事 我直接将开启 编译 bashprofile 的命令成别名
实用 alias 别名 bash 的 alias 别名可以说是我用得最多的功能了 在我理解看来 它像是一个简单函数 内在组合了一些繁琐的逻辑流程 对外只暴
### 正是孤独让你变得出众
- URL: https://opscloud.vip/posts/%E6%AD%A3%E6%98%AF%E5%AD%A4%E7%8B%AC%E8%AE%A9%E4%BD%A0%E5%8F%98%E5%BE%97%E5%87%BA%E4%BC%97
- Type: post
- Language: zh
- Published: 2020-08-12T03:19:00.000Z
- Summary: 正是孤独让你变得出众
- Excerpt:
抛开兴趣而言,对于系统性的学习,没有任何一个细节是可以忽略的;我们在面对生活、工作等各种压力以及知识的枯燥性问题,难以全身心的投入学习环境;这时,如何做到在孤独中自处,这才是我们需要去适当调节的,当做到了如何在孤独中自处,那么学习必然事半功倍。孤独不是让你脱离社会群体,也不是不去社交,而是让你在孤独之中如何学习成长和感悟; 本文所阐述的观点仅仅是社交与孤独,对于自律、自制以及学习方法,以后我会分享给大家共同进步。 谨以多年前看到的这篇文章贡献给大家,共勉。
### 利用 Loki/Promtail/Grafana 收集分析日志
- URL: https://opscloud.vip/posts/%E5%88%A9%E7%94%A8-lokipromtailgrafana-%E6%94%B6%E9%9B%86%E5%88%86%E6%9E%90%E6%97%A5%E5%BF%97
- Type: post
- Language: zh
- Published: 2020-08-05T05:33:00.000Z
- Tags: prometheus, 监控
- Summary: 利用 Loki/Promtail/Grafana 收集分析日志
- Excerpt: Loki/Promtail/Grafana vs EFK Loki Stack 包含三个组件: - Loki: 相当于 EFK 中的 ElasticSearch,用于存储和查询日志 - Promtail: 相当于 EFK 中的 Filebeat/Fluentd,用于采集和发送日志 - Grafana: 相当于 EFK 中的 Kibana,用于 UI 展示
使用 Helm 部署 Loki Stack 到 Kubernetes 参考官方文档: https://github.com/grafana/loki/blob/master/docs/in
### 两个助你高效编写 Kubernetes YAML 文件的神技
- URL: https://opscloud.vip/posts/%E4%B8%A4%E4%B8%AA%E5%8A%A9%E4%BD%A0%E9%AB%98%E6%95%88%E7%BC%96%E5%86%99-kubernetes-yaml-%E6%96%87%E4%BB%B6%E7%9A%84%E7%A5%9E%E6%8A%80
- Type: post
- Language: zh
- Published: 2020-08-03T02:25:00.000Z
- Tags: 排错, kubernetes
- Summary: 两个助你高效编写 Kubernetes YAML 文件的神技
- Excerpt: 我们在编写 Kubernetes 资源清单的时候可能会经常会忘记要创建的资源名称,即使知道了可能也不记得该资源对象有哪些属性可以使用了,特别是对于那些名称很长的资源或者属性,即使死记硬背下来隔一段时间又会忘记了。 比如现在我们要创建一个 validating 的 admission webhook,我们就需要定义一个 ValidatingWebhookConfiguration 的资源对象,但是可能我们不记得它的全名了。这个时候我们可以使用 kubectl api-resources 命令来找到我们需要的 API 资源。找到了正确的资源名称之后,就需要了
### kubernetes部署安装文档
- URL: https://opscloud.vip/posts/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8nginx%E9%85%8D%E7%BD%AE%E6%AD%A3%E5%90%91%E4%BB%A3%E7%90%86
- Type: post
- Language: zh
- Published: 2020-07-29T06:03:00.000Z
- Tags: k8s, linux
- Summary: kubernetes部署安装文档
### Prometheus 常用 PromQL 语句
- URL: https://opscloud.vip/posts/prometheus-%E5%B8%B8%E7%94%A8-promql-%E8%AF%AD%E5%8F%A5
- Type: post
- Language: zh
- Published: 2020-07-23T08:33:00.000Z
- Tags: prometheus, 监控
- Summary: Prometheus 常用 PromQL 语句
- Excerpt: PromQL 是 Prometheus 提供的一个函数式的表达式语言,可以使用户实时地查找和聚合时间序列数据。表达式计算结果可以在图表中展示,也可以在 Prometheus表达式浏览器中以表格形式展示,或者作为数据源,以 HTTP API 的方式提供给外部系统使用。PromQL 虽然以 QL 结尾,但是它不是类似 SQL 的语言,因为在时间序列上执行计算类型时,SQL 语言相对缺乏表达能力。而 PromQL 语言表达能力非常丰富,可以使用标签进行任意聚合,还可以使用标签将不同的标签连接到一起进行算术运算操作。内置了时间和数学等很多函数可以使用。
问题排查 上面错误信息可以通过 journalctl -u kubelet -f 或者 tai
### Kubernetes故障排查指南-分析容器退出状态码
- URL: https://opscloud.vip/posts/kubernetes%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5%E6%8C%87%E5%8D%97-%E5%88%86%E6%9E%90%E5%AE%B9%E5%99%A8%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81%E7%A0%81
- Type: post
- Language: zh
- Published: 2020-07-23T05:23:00.000Z
- Tags: 排错, kubernetes
- Summary: Kubernetes故障排查指南-分析容器退出状态码
- Excerpt: 问题 大家在使用 Kubernetes 时,会遇到创建Pod失败,这时会分析什么原因导致创建Pod失败?
Pod status 状态解释 [1] - CrashLoopBackOff:容器退出,kubelet正在将它重启 - InvalidImageName:无法解析镜像名称 - ImageInspectError:无法校验镜像 - ErrImageNeverPull:策略禁止拉取镜像 - ImagePullBackOff:镜像正在重试拉取 - RegistryUnavailable:连接不到镜像中心 - ErrImagePull:通用的拉
### Prometheus Operator 常用指标
- URL: https://opscloud.vip/posts/prometheus-operator-%E5%B8%B8%E7%94%A8%E6%8C%87%E6%A0%87
- Type: post
- Language: zh
- Published: 2020-07-22T08:27:00.000Z
- Tags: prometheus, 监控
- Summary: Prometheus Operator 常用指标
- Excerpt: Prometheus Operator 安装完成后会有很多默认的监控指标,一不注意就大量的报警产生,所以我们非常有必要了解下这些常用的监控指标,有部分指标很有可能对于我们自己的业务可有可无,所以可以适当的进行修改,这里我们就来对常用的几个指标进行简单的说明。 1. Kubernetes 资源相关 1.1 CPUThrottlingHigh 关于 CPU 的 limit 合理性指标。查出最近5分钟,超过25%的 CPU 执行周期受到限制的容器。表达式: 相关指标: - containercpucfsperiodstotal:容器生命周期中度过的 cpu 周
### Kubernetes 安全风险以及 29 个最佳实践
- URL: https://opscloud.vip/posts/kubernetes-%E5%AE%89%E5%85%A8%E9%A3%8E%E9%99%A9%E4%BB%A5%E5%8F%8A-29-%E4%B8%AA%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5
- Type: post
- Language: zh
- Published: 2020-07-21T03:07:00.000Z
- Tags: 优化, kubernetes
- Summary: Kubernetes 安全风险以及 29 个最佳实践
- Excerpt: 目前从各方面来看,Kubernetes 都在容器编排市场中占据了主导地位。近日发布的《Kubernetes 和容器安全状况报告》更是指出,87% 的组织正在使用 Kubernetes 管理容器工作负载。 另外,该报告中有一项调查显示,在过去的 12 个月里,有 94% 的组织在其容器环境中遇到过安全问题,其中 69% 的组织检测到错误配置,27% 的组织在运行时遇到安全事件,还有 24% 的组织发现了严重的安全漏洞。 粗略地说,这些安全问题分别对应着容器生命周期的各个阶段。我们应该在构建阶段修复已知的漏洞;在构建、部署阶段修复错误的配置;在运行阶段对威胁
### 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
- URL: https://opscloud.vip/posts/%E6%A0%B9%E6%8D%AE-pid-%E8%8E%B7%E5%8F%96-k8s-pod%E5%90%8D%E7%A7%B0---%E5%8F%8D%E4%B9%8B-pod%E5%90%8D%E7%A7%B0-%E8%8E%B7%E5%8F%96-pid
- Type: post
- Language: zh
- Published: 2020-07-17T07:39:00.000Z
- Tags: 排错, kubernetes
- Summary: 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
- Excerpt: 背景 随着 Kubernetes 越来越火爆,运维人员排查问题难度越来越大。比如我们收到监控报警,某台 Kubernetes Node 节点负载高。通过 top 或者 pidstat 命令获取 Pid,问题来了,这个 Pid 对应那个 Kubernetes Pod 呢? 下面是作者写的两个小工具,可以帮助运维同胞们快速定位问题。
根据 Pid 获取 K8s Pod 名称 脚本工具 上面 Shell 脚本需要服务器上安装 jq 命令,因为脚本依赖 jq 来处理 json 格式。
简单介绍下 jq 和 json 有些小伙伴们可能没
### Docker网络配置那些事
- URL: https://opscloud.vip/posts/docker%E7%BD%91%E8%B7%AF%E9%85%8D%E7%BD%AE%E9%82%A3%E4%BA%9B%E4%BA%8B
- Type: post
- Language: zh
- Published: 2020-07-13T01:26:00.000Z
- Tags: 网络, Docker
- Summary: Docker网络配置那些事
- Excerpt: 使用阿里云ECS搭建 Harbor 服务(docker-compose 部署)遇到网络地址冲突,导致Harbor云主机ECS无法访问其它VPC网段云主机,这是为什么? 使用 docker-compose 部署过Harbor同学都知道,在创建 Harbor 时,默认会创建 5个 网段,见下图。 问题来了,因为使用阿里云 VPC网络,网段为 172.16.0.0/12 ,下面是网络拓扑图。 从上面两张图可以发现,网络地址段有重叠,会导致部署Harbor的云主机无法与其它VPC可用区云主机通信。 Docker 网络驱动介绍 [1] Docker的网络子系统使用
### kubernetes最佳实践
- URL: https://opscloud.vip/posts/kubernetes%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5
- Type: post
- Language: zh
- Published: 2020-06-23T02:00:00.000Z
- Tags: 优化, kubernetes
- Summary: kubernetes最佳实践
- Excerpt: 实现容器资源调度均衡分配,Request 与 Limit 怎么设置更方便? 如何为容器配置 Request 与 Limit,资源调度分配更方便? 这是一个既常见又棘手的问题,这个根据服务类型,需求与场景的不同而不同,没有固定的答案。话说实践出真知,我们结合生产经验总结了系列最佳实践,给努力的开发业务们做个参考。
所有容器都应该设置 request request 的值并不是指给容器实际分配的资源大小,它仅仅是给调度器看的,调度器会 "观察" 每个节点可以用于分配的资源有多少,也知道每个节点已经被分配了多少资源。被分配资源的大小就是节点上所有
### flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解
- URL: https://opscloud.vip/posts/flannel%E8%B7%A8%E4%B8%BB%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E6%96%B9%E6%A1%88udpvxlanhost-gw%E8%AF%A6%E8%A7%A3
- Type: post
- Language: zh
- Published: 2020-06-21T07:19:00.000Z
- Tags: 网络, Docker
- Summary: flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解
- Excerpt: 本文中,笔者主要结合自己使用flannel心得,以及flannel的技术演进,介绍下flannel网络实现方案。在没有介绍flannel overlay网络实现方案之前,先回顾下docker网络实现方案。 ★ docker网络模式有哪些? bridge、host、none 新版本docker出现了macvlan、overlay跨主机网络通信方案。 ★ 桥接模式是如何实现的呢? 首先docker在默认安装情况下,启动之后会默认建立docker0 linux网桥设备、该网桥设备拥有一个私有网络地址以及子网,通常使用子网中第一个没有被占用的地址。比如:172.
### kubernetes多集群管理维护方式
- URL: https://opscloud.vip/posts/kubernetes%E5%A4%9A%E9%9B%86%E7%BE%A4%E7%BB%B4%E6%8A%A4%E7%AE%A1%E7%90%86%E6%96%B9%E6%B3%95
- Type: post
- Language: zh
- Published: 2020-06-19T06:19:00.000Z
- Tags: 优化, kubernetes
- Summary: kubernetes多集群管理维护方式
- Excerpt: 相信很多人都会经常部署不同的 Kubernetes 集群,也会经常删除不再使用的 Kubernetes 集群,如果要在本地通过 kubectl 客户端与集群进行交互,就需要不同的 kubeconfig,然后通过环境变量或命令行参数不断来回切换 kubeconfig,或者手动将多个 kubeconfig 合并为一个,然后通过 kubectl 插件 kubectx[1] 或 kubie 来切换上下文环境(即 context)。 那么有没有一种方法可以自动将多个 kubeconfig 文件合并成一个呢?手动合并也太麻烦了啊! 有个小哥和我也有同样的苦恼,索性写
### Statefulset+storageclass+ceph最佳实践
- URL: https://opscloud.vip/posts/statefulsetstorageclassceph%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5
- Type: post
- Language: zh
- Published: 2020-06-18T02:27:00.000Z
- Tags: 存储, kubernetes
- Summary: Statefulset+storageclass+ceph最佳实践
- Excerpt: 我们在使用kubernetes/docker时最重要的是要对数据做持久化,ceph做为一个开源的分布式存储系统,支持对象存储,块存储rbd,文件系cephfs,同时具备高可靠,易扩展等特性,kubernetes+ceph在很多企业已经落地实施,也是目前最成熟可靠的方案,本篇博客主要为大家讲解基于storageclass动态管理存储的整个生命周期
1.创建kubernetes对接ceph需要的外部客户端 rbd-provisioner 注:假如你的kubernetes集群是由kubeadm初始化时,那么kube-controller-mana
### nginx-rewrite重定向跳转实例
- URL: https://opscloud.vip/posts/nginx-rewrite%E9%87%8D%E5%AE%9A%E5%90%91%E8%B7%B3%E8%BD%AC%E5%AE%9E%E4%BE%8B
- Type: post
- Language: zh
- Published: 2020-06-17T08:27:00.000Z
- Tags: nginx, linux
- Summary: nginx-rewrite重定向跳转实例
- Excerpt: nginx-rewrite重定向跳转实例 工作中常用到nginx的rewrite,网上许多文章也写了一些,不过实用性的话,还是往下看吧。 nginx重定向-跳转实例: 1,将www.a.com/connect 跳转到connect.a.com 2,将connect.a.com 301跳转到www.a.com/connect/ 3,a.com 跳转到www.a.com 4,www.a.com/category/123.html 跳转为 category/?cd=123 5,www.a.com/admin/ 下跳转为www.a.com/admin/index
### kubernetes容器中域名解析优化
- URL: https://opscloud.vip/posts/kubernetes%E5%AE%B9%E5%99%A8%E4%B8%AD%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E4%BC%98%E5%8C%96
- Type: post
- Language: zh
- Published: 2020-06-17T01:19:00.000Z
- Tags: 优化, Coredns, kubernetes
- Summary: kubernetes容器中域名解析优化
- Excerpt: 多余的DNS查询 一些需要解析外部DNS域名的应用,当运行在容器中时,如果我们在容器的network namespace中对dns报文(udp port 53)进行抓包,可能会发现在正确解析之前,还经过了若干次多余的尝试。 下面是我在容器中ping google.com,同时在容器的network namespace中抓到的包。 可以看到,在最后(倒数第3、4行)正确解析之前,先是依次查询了下面几个域名,并且均查询了IPv4和IPv6: - google.com.default.svc.cluster.local. - google.com.svc.cl
### 使用 Certbot 为网站设置永久免费的 HTTPS 证书
- URL: https://opscloud.vip/posts/%E4%BD%BF%E7%94%A8-certbot-%E4%B8%BA%E7%BD%91%E7%AB%99%E8%AE%BE%E7%BD%AE%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E7%9A%84-https-%E8%AF%81%E4%B9%A6
- Type: post
- Language: zh
- Published: 2020-06-16T08:53:00.000Z
- Tags: 其它, linux
- Summary: 使用 Certbot 为网站设置永久免费的 HTTPS 证书
- Excerpt: - 我的博客从上线第一天起就使用了 HTTPS,用的是 Cloudflare,直接在其后台配置即可。如果你是用 nginx、apache、haproxy 等服务器来运行自己的网站,给大家推荐 Certbot,可以自动化来配置 SSL 证书和定时更新。 下面记录我自己为 servicemesher.com 网站配置 HTTPS 证书的过程,全程不需要 5 分钟。 ## 环境 网站的托管环境如下: - OS:CentOS 7.6 阿里云 - 网站服务器:Nginx,使用 yum 安装,版本 1.12 - 提前配置好 Nginx,确保使用 HTTP 先可以访问
### 构建 Kubernetes 集群 —— 选择工作节点数量和大小
- URL: https://opscloud.vip/posts/%E6%9E%84%E5%BB%BA-kubernetes-%E9%9B%86%E7%BE%A4--%E9%80%89%E6%8B%A9%E5%B7%A5%E4%BD%9C%E8%8A%82%E7%82%B9%E6%95%B0%E9%87%8F%E5%92%8C%E5%A4%A7%E5%B0%8F
- Type: post
- Language: zh
- Published: 2020-06-11T01:53:00.000Z
- Tags: 优化, kubernetes
- Summary: 构建 Kubernetes 集群 —— 选择工作节点数量和大小
- Excerpt: 编者按 本文从多个维度阐述了使用更少的大节点与更多的小节点来组建 Kubernetes 集群各自的优势与劣势,并结合实践经验给出了选择工作节点数量和大小的一般方法。
引言 在创建 Kubernetes 集群时,您首先会想到的问题之一就是:“我应该创建何种类型的工作节点,以及应该创建多少个?”。 如果您正在搭建内部集群,是应该购买最新一代的超级服务器,还是使用数据中心里的十几台旧机器呢? 或者您使用的是托管 Kubernetes 服务,例如 Google Kubernetes Engine (GKE),是应该使用 8 个 n1-standar
### 编写Go的一些建议
- URL: https://opscloud.vip/posts/%E7%BC%96%E5%86%99go%E7%9A%84%E4%B8%80%E4%BA%9B%E5%BB%BA%E8%AE%AE
- Type: post
- Language: zh
- Published: 2020-06-10T01:53:00.000Z
- Tags: Golang
- Summary: 编写Go的一些建议
- Excerpt: 显式与隐式 Go 语言社区对于显式的初始化、方法调用非常推崇,类似 Spring Boot 和 Rails 的框架其实都广泛地采纳了『约定优于配置』的中心思想,简化了开发者和工程师的工作量
init 在这里先以一个非常常见的函数 init 为例,介绍 Go 语言社区对显式调用的推崇;相信很多人都在一些 package 中阅读过这样的代码: 这种代码虽然能够通过编译并且正常工作,然而这里的 init 函数其实隐式地初始化了 grpc 的连接资源,如果另一个 package 依赖了当前的包,那么引入这个依赖的工程师可能会在遇到错误时非常困惑,因
### k8s基于自定义指标实现自动扩容
- URL: https://opscloud.vip/posts/k8s%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%87%E6%A0%87%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%8A%A8%E6%89%A9%E5%AE%B9
- Type: post
- Language: zh
- Published: 2020-06-04T07:19:00.000Z
- Tags: 部署, kubernetes
- Summary: k8s基于自定义指标实现自动扩容
- Excerpt: 基于自定义指标 除了基于 CPU 和内存来进行自动扩缩容之外,我们还可以根据自定义的监控指标来进行。这个我们就需要使用 Prometheus Adapter,Prometheus 用于监控应用的负载和集群本身的各种指标,Prometheus Adapter 可以帮我们使用 Prometheus 收集的指标并使用它们来制定扩展策略,这些指标都是通过 APIServer 暴露的,而且 HPA 资源对象也可以很轻易的直接使用。 下面来看具体怎么实现的!
部署应用 首先,我们部署一个示例应用,在该应用程序上测试 Prometheus 指标自动缩放,
### Dockerhub反向代理
- URL: https://opscloud.vip/posts/dockerhub%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86
- Type: post
- Language: zh
- Published: 2020-06-04T06:19:00.000Z
- Tags: 优化, Docker
- Summary: Dockerhub反向代理
- Excerpt: https://dockerhub.mirrors.nwafu.edu.cn/
使用方法 修改 /etc/docker/daemon.json ,加入:
然后重新启动 Docker 服务:
### K8S Pod 内抓包快速定位网络问题
- URL: https://opscloud.vip/posts/k8s-pod-%E5%86%85%E6%8A%93%E5%8C%85%E5%BF%AB%E9%80%9F%E5%AE%9A%E4%BD%8D%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98
- Type: post
- Language: zh
- Published: 2020-06-02T01:19:00.000Z
- Tags: 排错, kubernetes
- Summary: K8S Pod 内抓包快速定位网络问题
- Excerpt: 前言 在使用 Kubernetes 时,可能会遇到一些网络问题。当通过检查配置与日志无法排查错误时,这时就需要抓取网络数据包,但是Pod内一般不会安装tcpdump命令,那有没有方法可以直接通过宿主机抓取Pod网络数据包? 当然有,本文介绍 nsenter 命令,能够进入Pod容器 net 命名空间。并且本文提供一个快速进入Pod容器 net 命名空间脚本,方便大家使用。
nsenter 使用参数 除了进入 net 命名空间,nsenter 还可以进入 mnt, uts, ipc, pid, user 命名空间,以及指定根目录和工作目录。
### k8s排错概览
- URL: https://opscloud.vip/posts/k8s%E6%8E%92%E9%94%99%E6%A6%82%E8%A7%88
- Type: post
- Language: zh
- Published: 2020-05-29T09:39:00.000Z
- Tags: 排错, kubernetes
- Summary: k8s排错概览
- Excerpt: 在排错过程中,kubectl 是最重要的工具,通常也是定位错误的起点。这里也列出一些常用的命令,在后续的各种排错过程中都会经常用到。
排错概览 查看 Pod 状态以及运行节点
查看 Pod 事件
查看 Node 状态
kube-apiserver 日志 以上命令操作假设控制平面以 Kubernetes 静态 Pod 的形式来运行。如果 kube-apiserver 是用 systemd 管理的,则需要登录到 master 节点上,然后使用 journalctl -u kube-apiserver 查
### k8s集群备份与恢复
- URL: https://opscloud.vip/posts/k8s%E9%9B%86%E7%BE%A4%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D
- Type: post
- Language: zh
- Published: 2020-05-29T07:39:00.000Z
- Tags: ETCD, kubernetes
- Summary: k8s集群备份与恢复
- Excerpt: 介绍 k8s集群的备份与恢复,主要就是etcd集群的备份与恢复。
ETCD一些基础查询操作 查看集群状态
获取某个key信息
获取etcd版本信息
获取etcd所有key
备份 本文备份使用 napshot save , 每次备份一个节点就行。
恢复 停止kube-apiserver 服务,确保apiserver 服务已经停止运行 停止集群中所有 ETCD 服务 移除 ETCD 数据 拷贝 ETCD 备份快照 所有master上按照各自etcd的启
### 我们为什么会删除不了集群的NameSpace
- URL: https://opscloud.vip/posts/%E6%88%91%E4%BB%AC%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E5%88%A0%E9%99%A4%E4%B8%8D%E4%BA%86%E9%9B%86%E7%BE%A4%E7%9A%84-namespace
- Type: post
- Language: zh
- Published: 2020-05-28T09:53:00.000Z
- Tags: 排错, kubernetes
- Summary: 我们为什么会删除不了集群的NameSpace
- Excerpt: 背景 今天我们讨论的这个问题,跟 K8s 集群的 Namespace 有关。Namespace 是 K8s 集群资源的“收纳”机制。我们可以把相关的资源“收纳”到同一个 Namespace 里,以避免不相关资源之间不必要的影响。 Namespace 本身也是一种资源。通过集群 API Server 入口,我们可以新建 Namespace,而对于不再使用的 Namespace,我们需要清理掉。Namespace 的 Controller 会通过 API Server,监视集群中 Namespace 的变化,然后根据变化来执行预先定义的动作。
### CKA真题
- URL: https://opscloud.vip/posts/cka%E7%9C%9F%E9%A2%98
- Type: post
- Language: zh
- Published: 2020-05-28T03:19:00.000Z
- Tags: 题目, kubernetes
- Summary: CKA真题
- Excerpt: 1.列出pod并排序 2.找出pod中的错误日志 3.创建一个pod ,并调度到某个节点上 4.列出正常节点的个数 5.pod中挂载volume 更详细用法参考官方文档:https://kubernetes.io/docs/concepts/storage/volumes/ 6.提供一个pod,添加init-container ,在container中添加一个空文件,启动的时候。在另一个containre中检测是否有这个文件,否则退出 7.创建pod,再创建一个service 8.在一个pod中创建2个容器,如redis+nginx 9.找到指定serv
### kafka性能优化-JVM参数配置优化(二)
- URL: https://opscloud.vip/posts/kafka%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-jvm%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%E4%BC%98%E5%8C%96-%E4%BA%8C
- Type: post
- Language: zh
- Published: 2020-05-22T09:46:00.000Z
- Tags: 优化, kafka
- Summary: kafka性能优化-JVM参数配置优化(二)
- Excerpt: Kafka的配置详尽、复杂,想要进行全面的性能调优需要掌握大量信息,这里只记录一下我在日常工作使用中走过的坑和经验来对kafka集群进行优化常用的几点。 1.JVM的优化 java相关系统自然离不开JVM的优化。首先想到的肯定是Heap Size的调整。 推荐配置:一般HEAP SIZE的大小不超过主机内存的50%。 2.网络和ios操作线程配置优化: 推荐配置: num.network.threads 主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1。 num.io.threads 主要进行磁盘io操作,高峰
### 多环境重构和迭代流程方案总结
- URL: https://opscloud.vip/posts/%E5%A4%9A%E7%8E%AF%E5%A2%83%E9%87%8D%E6%9E%84%E5%92%8C%E8%BF%AD%E4%BB%A3%E6%B5%81%E7%A8%8B%E6%96%B9%E6%A1%88%E6%80%BB%E7%BB%93
- Type: post
- Language: zh
- Published: 2020-05-21T07:53:00.000Z
- Tags: 方案总结
- Summary: 多环境重构和迭代流程方案总结
- Excerpt: 自动化发布 前言: 个人现在在 上海一家大数据挖掘公司:负责运维架构,自动化与系统运维相关工作,今天主要是整理了下现在团队APP发布流程: 方案: 因为在项目迭代的过程中,不可避免需要”上线”。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。 个人整理下部署流程说明其实现在很多部署方法,现在我们用目前比较流行的几种部署方案,或者说策略方案对比总结简单讨论一下目前比较流行的几种部署方案,或者说策略。如有不足之处请指出,如有谬误,请指正^^。 我们有自己开
### kafka性能优化-JVM参数配置优化(一)
- URL: https://opscloud.vip/posts/kafka%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-jvm%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%E4%BC%98%E5%8C%96
- Type: post
- Language: zh
- Published: 2020-05-21T06:35:00.000Z
- Tags: 优化, server
- Summary: kafka性能优化-JVM参数配置优化(一)
- Excerpt: Kafka集群稳定 GC调优 调GC是门手艺活,幸亏Java 7引进了G1 垃圾回收,使得GC调优变的没那么难。G1主要有两个配置选项来调优:MaxGCPauseMillis 和 InitiatingHeapOccupancyPercent,具体参数设置可以参考Google,这里不赘述。 Kafka broker能够有效的利用堆内存和对象回收,所以这些值可以调小点。对于 64Gb内存,Kafka运行堆内存5Gb,MaxGCPauseMillis 和 InitiatingHeapOccupancyPercent 分别设置为 20毫秒和 35。Kafka的启
### kubernetes添加新master出现ETCD健康检查失败
- URL: https://opscloud.vip/posts/kubernetes%E6%B7%BB%E5%8A%A0%E6%96%B0master%E5%87%BA%E7%8E%B0etcd%E5%81%A5%E5%BA%B7%E6%A3%80%E6%9F%A5%E5%A4%B1%E8%B4%A5
- Type: post
- Language: zh
- Published: 2020-05-18T06:22:00.000Z
- Tags: 排错, kubernetes
- Summary: kubernetes添加新master出现ETCD健康检查失败
- Excerpt: 系统环境: - Docker 版本:19.03.8 - Kubeadm 版本:1.17.4 - Kubernetes 版本:1.17.4 - Kubernetes Master 数量:3 - Kubernetes 安装方式:Kubeadm 一、问题描述 下面节点信息都是都是为了写博客虚构的,跟真实节点信息大体相同 Kubernetes 集群中总共有三台 Master,分别是: - k8s-master-2-11 - k8s-master-2-12 - k8s-master-2-13 对其中 k8s-master-2-11 Master 节点服务器进行
### 在 Kubernetes 集群中使用 NodeLocal DNSCache
- URL: https://opscloud.vip/posts/%E5%9C%A8kubernetes-%E9%9B%86%E7%BE%A4%E4%B8%AD%E4%BD%BF%E7%94%A8-nodelocal-dnscache
- Type: post
- Language: zh
- Published: 2020-05-15T05:19:00.000Z
- Tags: 部署, Coredns, kubernetes
- Summary: 在 Kubernetes 集群中使用 NodeLocal DNSCache
- Excerpt: 之前在解决 CoreDNS 的5秒超时问题的时候,除了通过 dnsConfig 去强制使用 tcp 方式解析之外,我们提到过使用 NodeLocal DNSCache 来解决这个问题。NodeLocal DNSCache 通过在集群节点上运行一个 DaemonSet 来提高 clusterDNS 性能和可靠性。处于 ClusterFirst 的 DNS 模式下的 Pod 可以连接到 kube-dns 的 serviceIP 进行 DNS 查询。通过 kube-proxy 组件添加的 iptables 规则将其转换为 CoreDNS 端点。通过在每个集
### CoreDNS 自定义域名解析问题
- URL: https://opscloud.vip/posts/coredns-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E9%97%AE%E9%A2%98
- Type: post
- Language: zh
- Published: 2020-05-15T03:19:00.000Z
- Tags: 排错, Coredns, kubernetes
- Summary: CoreDNS 自定义域名解析问题
- Excerpt: 前几天我们在解决 CoreDNS 的5秒超时问题的时候,使用了 NodeLocal DNSCache 来解决这个问题,集群 DNS 的解析性能也明显大幅提升了。但是今天确遇到一个很大的坑,我们在做 DevOps 实验的时候,相关的工具都使用的是自定义的域名,这个时候要互相访问的话就需要添加自定义的域名解析,我们可以通过给 Pod 添加 hostAlias 来解决,但是在使用 Jenkins 的 Kubernetes 插件的时候却不支持这个参数,需要使用 YAML 来自定义,比较麻烦,所以想着通过 CoreDNS 来添加 A 记录解决这个问题。 正
### kubernetes下helm3的安装部署
- URL: https://opscloud.vip/posts/kubernetes%E4%B8%8Bhelm3%E7%9A%84%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2
- Type: post
- Language: zh
- Published: 2020-05-14T02:27:00.000Z
- Tags: 部署, kubernetes
- Summary: kubernetes下helm3的安装部署
- Excerpt: 系统环境: - Helm 版本:v3.1.0 - Kubernetes 版本:v1.16.3 参考地址: - Helm 官网 - Helm Github - Chart 官方仓库 二、下载并安装 Helm 客户端 访问 Helm Github 下载页面 https://github.com/helm/helm/releases 找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。 接下来解压下载的包,然后将客户端放置到 /usr/local/bin/ 目录下: 注意:hel
### kafka-eagel部署kubernetes
- URL: https://opscloud.vip/posts/kafka-eagel%E9%83%A8%E7%BD%B2kubernetes
- Type: post
- Language: zh
- Published: 2020-05-14T01:59:00.000Z
- Tags: 部署, kubernetes
- Summary: kafka-eagel部署kubernetes
- Excerpt: 服务的相关链接 软件开源连接Git hub 软件官方说明文档 官方软件下载包 docker hub 参考文档 kafka-eagel服务部署完日志会有报错 需要使用MYSQL5.6的版本,以下是mysql的yaml部署文件 service.yaml文件做暴露服务端口,type类型根据需求定义 secret.yaml文件做数据库的用户名密码 Pvc.yaml做mysql的动态存储 deployment.yaml应用部署文件 需要创建数据库使用mysql作为源数据存放,需要先创建ke数据库,并赋权,没有kafka认证 完成mysql5.6数据库部署,并创建库
### 解决Kubernetes中Kubelet组件报failed to get cgroup 错误
- URL: https://opscloud.vip/posts/%E8%A7%A3%E5%86%B3kubernetes%E4%B8%ADkubelet%E7%BB%84%E4%BB%B6%E6%8A%A5failed-to-get-cgroup-%E9%94%99%E8%AF%AF
- Type: post
- Language: zh
- Published: 2020-05-13T03:14:00.000Z
- Tags: 排错, kubernetes
- Summary: 解决Kubernetes中Kubelet组件报failed to get cgroup 错误
- Excerpt:
系统环境:
最近查看 Kubelet 日志,发现日志中一堆错误信息,内容如下:
$ journalctl -u kubelet -n 10 19
### 清理Docker的container,image与volume
- URL: https://opscloud.vip/posts/%E6%B8%85%E7%90%86docker%E7%9A%84containerimage%E4%B8%8Evolume
- Type: post
- Language: zh
- Published: 2020-05-13T01:53:00.000Z
- Tags: 优化, Docker
- Summary: 清理Docker的container,image与volume
- Excerpt: Docker的镜像(image)、容器(container)、数据卷(volume), 都是由daemon托管的。 因此,在需要清理时,也需要使用其自带的手段。
本文介绍一些Docker的清理技巧,以及它们的来源。
清理技巧
清理所有停止运行的容器:
docker container prune # or docker
### opscloud.vip
- URL: https://opscloud.vip/en/projects/opscloud-blog
- Type: project
- Language: en
- Published: 2020-05-12T16:00:00.000Z
- Status: active
- Tags: blog, writing, DevOps
- Summary: A 5-year tech blog documenting the journey from traditional ops to cloud-native and AI-assisted development.
### opscloud.vip
- URL: https://opscloud.vip/projects/opscloud-blog
- Type: project
- Language: zh
- Published: 2020-05-12T16:00:00.000Z
- Status: active
- Tags: 博客, 写作, DevOps, 技术分享
- Summary: 维护 5 年的技术博客,记录从传统运维到云原生再到 AI 辅助开发的全过程。
### Kubernetes Ops Toolkit
- URL: https://opscloud.vip/en/projects/k8s-toolset
- Type: project
- Language: en
- Published: 2018-05-31T16:00:00.000Z
- Status: active
- Tags: Kubernetes, Docker, Shell, tools
- Summary: An 8-year collection of K8s ops tools for troubleshooting, tuning, backup, and deployment.
### Kubernetes 运维工具集
- URL: https://opscloud.vip/projects/k8s-toolset
- Type: project
- Language: zh
- Published: 2018-05-31T16:00:00.000Z
- Status: active
- Tags: Kubernetes, Docker, Shell, 工具
- Summary: 8 年积累的 K8s 运维工具箱,排障、调优、备份、部署一键搞定。