K8S 部署OpenSearch
OpenSearch 是一个开源的分布式搜索和分析引擎,适用于日志分析、全文检索、应用监控等场景。本文将介绍如何使用 Helm 在 Kubernetes 集群上快速部署 OpenSearch 及 OpenSearch Dashboards,并通过 Secret 管理密码,避免将敏感信息硬编码在配置文件中。本文的 K8S 环境基于 Amazon EKS,部分步骤涉及 EBS CSI Driver 的配置,如果你使用其他 K8S 发行版可以跳过相关内容。 添加 Helm 仓库官方提供了helm包,这使得我们可以很方便的下载OpenSearch的helm chart并且进行更新下载: 12helm repo add opensearch https://opensearch-project.github.io/helm-charts/helm repo update 创建 Secret 管理密码安装文档上来说,我们需要在value.yml里添加我们的密码,不过在我看来这不是一个比较优雅的做法,于是我采取了使用secret的方式来管理密码,这样可以把密码和Helm Chart进行解...
让 OpenSearch 支持单点登录:从密码登录到 OpenID Connect
之前我们用 Helm 在 Kubernetes 上部署了 OpenSearch 集群,使用默认的数据库密码进行登录。今天来介绍如何接入 Amazon Cognito 作为 OpenID Connect(OIDC)身份提供商,让Dashboard 实现企业级 SSO 单点登录,同时让 OpenSearch API 也支持 JWT Token 认证。 OpenID Connect 的提供商我选择了 Amazon 的 Cognito,然后对应的Dashboards(前端跳转)和 OpenSearch Security(后端验证)都要单独来做集成。 OIDC 是通用协议,Cognito 只是本文选的提供商,换 Keycloak、Okta、Auth0 都一样 第一步:创建 Cognito App Client在 Cognito 控制台创建一个 App Client,因为我做了端口映射,所以回调和注销的URL都是localhost: 勾选”生成客户端密钥”(Generate client secret) 认证流程勾选:授权码授权(Authorization code grant)、U...
在 Kubernetes 上用 Fluent Bit 收集 Nginx 日志到 OpenSearch
上一篇我们用 Helm 部署了 OpenSearch 集群和 Dashboards,这篇接着讲怎么用 Fluent Bit 把 Kubernetes 中 Nginx 的日志采集到 OpenSearch,并在 Dashboards 里查看和过滤。 本文假设你已经有一个运行中的 OpenSearch 集群,如果没有可以参考上一篇文章。 部署一个 Nginx 用于测试先部署一个简单的 Nginx 作为日志来源: 12kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 安装 Fluent Bit添加 Helm 仓库: 12helm repo add fluent https://fluent.github.io/helm-chartshelm repo update Fluent Bit 的配置比较长,建议用 values 文件管理。创建 fluent-bit-values.yaml: 123456789101112131415161718192021222324...
月度TODO
2026.3 月度TODO 极限科技 4篇文章 懒猫微服 4篇文章 生活感悟1篇 纯技术文章 2篇 英语
Go 代理项目:14 周每日学习路线
项目全貌一个从零开始的 Go 反向代理,分四个阶段进化成一个生产级 SRE 工具。每个阶段解决一类真实问题,边学语法边写功能。每周按 5 个工作日拆分,周末可以复习或补进度。 先说一下 gRPC你原始规划里提到了”协议升级:把 HTTP 请求转成 gRPC”。简单解释一下这是什么。 gRPC 是 Google 搞的一个远程过程调用(RPC)框架。普通的 HTTP API 用 JSON 传数据,人能读懂但体积大、解析慢。gRPC 用一种叫 Protocol Buffers(protobuf)的二进制格式传数据,体积小、速度快,而且跑在 HTTP/2 上,天然支持多路复用和流式传输。 在微服务架构里,服务之间的内部通信经常用 gRPC 而不是 HTTP+JSON,因为性能好很多。代理做”协议升级”的意思是:外部客户端发普通 HTTP+JSON 请求进来,代理把它转成 gRPC 格式发给后端微服务。这样外部用户不需要知道后端用的是 gRPC,代理帮你做了翻译。 gRPC 和普通 HTTP API 的区别在于三个层面。传输层:普通 HTTP API 跑在 HTTP/1...
在 Kubernetes 上用 Fluent Bit 收集 Nginx 日志到 Easysearch
本文基于 k3s + Easysearch 2.0.3 实测验证,从零开始搭建一套完整的日志收集方案。 什么是 Fluent BitFluent Bit 是一个轻量级的日志收集和转发工具,用 C 语言写的,内存占用极低(通常只需要几十 MB)。它的工作很简单:从某个地方读日志(INPUT),可选地处理一下(FILTER),然后发到某个地方(OUTPUT)。 12INPUT → FILTER → OUTPUT读日志 处理 发送 常见用法: 从文件读日志(tail 插件,类似 tail -f) 从容器 stdout 读日志 发送到 Elasticsearch / Easysearch / Kafka / S3 等 和 Fluentd 的区别:Fluent Bit 更轻量(C 语言 vs Ruby),适合作为 Agent 部署在每个节点或 Pod 里。Fluentd 功能更丰富,适合做日志聚合层。在 Kubernetes 场景下,Fluent Bit 是更常见的选择。 什么是 EasysearchINFINI Easysearch ...
在AWS EC2 上从零搭建 Kubernetes 集群(kubeadm)
今天讲解在AWS EC2 上使用kubeadm搭建Kubernetes 集群。 kubeadm 是 Kubernetes 官方提供的集群引导工具,用来快速创建符合最佳实践的 K8s 集群。除了初始化集群,它还能做节点的升级、降级等生命周期管理。用 kubeadm 建集群是学习 K8s 的推荐方式,也适合搭建小规模集群或作为更复杂企业级方案的基础组件。 本文基于 Ubuntu,使用三台 EC2 实例:一台作为控制面(Master),两台作为工作节点(Worker)。 我们会在 Master 节点上从头安装 kubeadm 及其依赖,然后初始化集群,最后把 Worker 节点加入进来。 这几台 EC2 使用同一个安全组,入站规则只放行VPC网段和终端访问地址。 第一步:安装 kubeadm 及其依赖以下操作在 Master 节点上执行(Worker 节点如果还没装也要跑一遍)。 1. 关闭 swapkubelet 需要精确管理 Pod 的内存,swap 会让内存数据不准确,导致调度器做出错误判断。kubelet 默认检测到 swap 开着就拒绝启动。 1234# 关闭 s...
修复 GitHub Pages 推送后 CNAME 自动重置旧域名的问题
部署后 GitHub Pages 域名自动变成已经取消的实效的域名,而不是预期的 *.github.io 排查之后是source/CNAME 文件中配置了旧域名 airag.click 删除 CNAME 文件后重新部署就可以解决 1rm source/CNAME CNAME 文件会被 Hexo 复制到生成目录,告诉 GitHub Pages 使用自定义域名 删除后将使用默认的 <username>.github.io 域名
k3s + Helm 部署 Easysearch
最近学了K8S,为了测试方便测试搭了一个K3S集群,然后使用helm运行一下Easysearch。 参考文档:https://docs.infinilabs.com/easysearch/main/docs/deployment/install-guide/helm/ 首先添加helm仓库并更新。 12helm repo add infinilabs https://helm.infinilabs.comhelm repo update 然后新建命名空间,我这里叫做es(下同),也可以使用其他名字。 1kubectl create namespace es Easysearch 依赖 cert-manager 来处理证书。使用这个命令来安装。 1kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml 否则就会收到如下报错。 1234567resource mapping not found for name: "...
k8s yml小抄
源码来自 cloudacademy/intro-to-k8s,用作学习笔记 1. Pod 基础1.1 最简 Pod(1.1-basic_pod.yaml)12345678apiVersion: v1kind: Podmetadata: name: mypodspec: containers: - name: mycontainer image: nginx:latest 这是最小化的 Pod 定义。只需要四个顶级字段: apiVersion: v1 — 核心 API 版本 kind: Pod — 资源类型 metadata.name — Pod 名称,命名空间内唯一 spec.containers — 至少一个容器,必须指定 name 和 image 注意:使用 nginx:latest 时,Kubernetes 默认 imagePullPolicy: Always,每次启动都会拉取镜像。 1.2 声明端口(1.2-port_pod.yaml)12345678910apiVersion: v1kind: Podmetadata: name: ...
