Hero Image
使用kubebuilder开发operator详解

基础概念 命令式和声明式 命令式编程(Imperative):详细的命令机器怎么(How)去处理一件事情以达到你想要的结果(What),比如代码详细实现过程。 声明式编程( Declarative):只告诉你想要的结果(What),机器自己摸索过程(How),比如sql查询结果。 简而言之:越接近现实的表达就越“声明式”,越接近于机器的执行过程就越“命令式”。 例如在kubernetes中使用此两种方式来创建服务: 命令式 创建:kubectl create deployment nginx --image nginx 或者 kubectl create -f nginx.yaml 修改:kubectl replace -f nginx.yaml 声明式 创建:kubectl apply -f configs/ 或者 kubectl apply -f nginx.yaml 修改:kubectl apply -f nginx.yaml 从以上两种方式可以看出:声明式对象配置更好地支持对目录进行操作并自动检测每个文件的操作类型(创建,修补,删除),但声明式对象配置难于调试并且出现异常时结果难以理解。 Kubernetes API 在kubernetes集群中,所有需要数据存取的组件都需要和kube-apiserver组件通信,而集群数据都是保存在etcd中。同时,kubernetes也大量使用了声明式api来提高用户开发和使用效率,而其api分别由Group(API 组)、Version(API 版本)和 Resource(API 资源类型)组成。如下图所示: 我们也可以使用以下命令查看有哪些api及其组成方式: kubectl get --raw / { "paths": [ "/api", "/api/v1", "/apis/apps", "/apis/apps/v1", "/apis/batch", "/apis/batch/v1", "/apis/batch/v1beta1", "/apis/apps.