如何理解K8s自定义资源(CRD)——从nacos的K8s集群部署开始

简介: 通过部署Nacos实践,解析Kubernetes中自定义资源(CRD)的核心概念。借助Nacos Operator,阐述CRD如何扩展API、实现声明式管理有状态服务,并揭示Operator模式自动化运维的底层逻辑,助力理解云原生应用管理机制。

在接触K8s时,如何理解自定义资源困扰了我很久,在项目上部署nacos时,发现有使用自定义对象,因此进行了一定的研究,并撰写本文用于交流一下K8s中的CRD概念理解。

首先从nacos部署开始

为了实现在集群上进行服务注册、发现的功能,部署一个nacos是一个比较通用的方案;

nacos官方的建议推荐使用Nacos Operator在Kubernetes部署Nacos Server.
部署过程为首先使用helm部署operator

# 直接使用helm方式安装operator
helm install nacos-operator ./chart/nacos-operator

然后启动单实例,standalone模式

kubectl apply -f config/samples/nacos.yaml

测试:

使用 kubectl port-forward(临时调试)
这种方法无需更改任何服务配置,非常适合快速临时访问。

kubectl port-forward service/nacos 8848:8848

这样就实现了通过operator在K8s集群上部署nacos;

验证

输入命令

kubectl get nacos

image.png

可以注意到,这个get命令区别于经常使用的 get pods, get deployments,而是以nacos命名的;

这就涉及到K8s中的自定义资源概念了;

自定义资源(CR)

kubectl get nacos

这条命令查询的是 Kubernetes 集群中的 Nacos 自定义资源对象(Custom Resource),它既不是直接查询 Pod,也不是直接查询 Deployment。下面这个表格能帮你快速理解核心概念:

概念 说明 在命令中的体现
自定义资源 (CR) 一种扩展 Kubernetes API 的方式,用于描述和管理 Kubernetes 原生不支持的特定应用(如 Nacos)。 kubectl get nacos 中的 nacos 就是一种自定义资源类型。
自定义资源定义 (CRD) 定义了自定义资源的“数据结构”,相当于创建了一个新的 API 对象类型。 你的集群中必然存在一个名为 nacos 的 CRD,否则命令无法执行。
Operator 一个特定的控制器,它监听自定义资源的变化,并根据资源描述(如你的 YAML 文件)来创建和管理真实的 Kubernetes 资源(如 StatefulSet, Service)。 你所在的 nacos-k8s\operator 目录暗示了这可能是在使用 Nacos Operator。

🔄 Nacos 与 Deployment 的关系
Nacos 服务本身并不直接“属于”Deployment。在更为复杂的部署场景(尤其是集群模式)下,Operator 通常会使用 StatefulSet 来管理 Nacos Pod。
StatefulSet 与 Deployment 的关键区别在于:

StatefulSet:更适合管理有状态应用(如 Nacos、数据库)。它能提供稳定的网络标识符(如 pod-name-0, pod-name-1)和持久化存储,这对于需要稳定身份和持久化数据的集群应用至关重要。
Deployment:更适合部署和扩展无状态应用(如 Web 前端、无状态 API 服务),通常不提供稳定的网络标识和独立的持久化存储。

所以,虽然你的 Nacos 当前是单机模式(standalone),但背后的控制器(Operator)很可能也是通过一个 StatefulSet(即使副本数为1)来保证其数据持久性,而非 Deployment。

为什么nacos operator采用自定义资源的方式进行部署?

Nacos Operator 采用自定义资源(Custom Resource)的方式进行部署,这背后是云原生领域管理复杂有状态应用的通用模式和深刻考量。简单来说,它通过扩展 Kubernetes 的 API,让你能用声明式的方式像管理原生资源一样管理 Nacos,从而大大简化和自动化了运维工作。

image.png

总而言之,Nacos Operator 选择自定义资源的方式,是为了遵循 Kubernetes 的“控制器模式”最佳实践,将专家的运维知识编码到 Operator 中,让用户能够以 Kubernetes 原生、声明式、自动化 的方式来管理这个有状态的中件间服务。这不仅是技术上的最佳路径,也代表了云原生应用管理的未来趋势。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
Prometheus 监控 Kubernetes
自定义通过helm部署的prometheus+Grafana监控框架
本文基于Helm快速部署kube-prometheus-stack,通过自定义`custom-values.yaml`实现Prometheus与Grafana的精细化配置,涵盖资源限制、持久化存储、服务暴露、告警规则及仪表盘导入,支持K8s集群全方位监控,提升可观测性与运维效率。
169 0
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka
1501 0
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
5342 0
|
Kubernetes NoSQL 测试技术
在 K8S 中快速部署 Redis Cluster & Redisinsight
在 K8S 中快速部署 Redis Cluster & Redisinsight
1827 0
在 K8S 中快速部署 Redis Cluster & Redisinsight
|
2月前
|
IDE Java Maven
使用mvn generate-sources生成在target目录下的代码和类应该如何调用
Maven项目中,执行`mvn generate-sources`后,生成代码位于`target/generated-sources`。该目录会自动加入编译类路径,Maven后续阶段可直接编译。IDE(如IntelliJ IDEA)通常自动识别为源码根目录,若未识别,可刷新Maven项目即可正确调用生成代码。
173 7
|
5月前
|
运维 Kubernetes API
解决Kubernetes集群中master节点无法与node节点通信的策略。
这些策略不仅需要执行命令来获取信息,更要深入理解集群组件如何交互,以便进行准确的故障定位与修复。一条一条地排查,并适时回顾配置文件,证书有效性等,通常可以找到问题所在。给出的命令需要根据具体环境的配置进行适当的修改。故障排除往往是一个细致且需求反复验证的过程,但遵循上述策略可以高效定位大部分通信故障的原因。
460 12
|
5月前
|
Prometheus Kubernetes 监控
Kubernetes(k8s)高可用性集群的构建详细步骤
构建高可用Kubernetes集群涉及到的层面非常广泛,包括硬件资源的配置、网络配置以及集群维护策略的规划。因此,在实际操作中,可能还需要根据特定环境和业务需求进行调整和优化。
2000 19
|
Kubernetes Nacos 数据安全/隐私保护
疯了!Nacos 用 Helm 部署开启授权认证频频出错?别急,秘籍在此!
【8月更文挑战第15天】本文指导您通过Helm部署Nacos并开启授权认证,解决途中遇到的问题。首先确认已安装Helm并了解Kubernetes基础。示例`values.yaml`文件启用认证并设置凭据。运行Helm命令完成部署。若认证失败,请复查用户名及密码准确性。面对权限不足错误,可配置权限策略,示例代码展示基于请求头的简单验证逻辑。Nacos启动异常时,利用`kubectl logs`命令分析Pod日志定位问题。遵循本文步骤与示例,助您成功部署并配置Nacos。
473 0
|
Kubernetes NoSQL Redis
k8s快速部署Redis单机
k8s快速部署Redis单机
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
1069 8