• 北卡
    2018-10-18
    运维人员会心碎?
    我是运维人员,此刻看完我感到很兴奋。

    作者回复: 没错。我觉得这部分才是运维最喜欢的。谁不喜欢写代码呢?

    
     20
  • 小明root
    2018-11-22
    我是运维人员,我很心碎.....我不会go语言
    
     17
  • 小金刚
    2018-10-28
    可以用 kubebuild 自动生成项目框架,添加自己的 CRD 并实现 controller 即可。
    
     8
  • 虎虎❤️
    2018-10-17
    一般来说,扩展api server (或者说添加自定义 resource )有两种方式:
    1. 通过创建CRDs, 主API server可以处理 CRDs 的 REST 请求(CRUD)和持久性存储。简单,不需要其他的编程。更适用于声明式的API,和kubernetes高度集成统一。
    2. API Aggregation, 一个独立的API server。主API server委托此独立的API server处理自定义resource。 需要编程,但能够更加灵活的控制API的行为,更加灵活的自定义存储,以及与API不同版本之间的转换。一般更适用于命令模式,或者复用已经存在REST API代码,不直接支持kubectl 和 k8s UI, 不支持scope resource in a cluster/namespace.

    自定义 resource 可以使你方便的存取结构化的resource 数据。但是只有和controller组合在一起才是声明式API。声明式API允许你定义一个期望的状态。controller通过解读结构化的resource数据,获得期望状态,从而不断的调协期望状态和实际状态。

    综上,今天文档中的types.go 应该是给controller来理解CRDs的schema用的。只有掌握了resource的schema,才能解释并得到用户创建的resource API object。
    而 kubectl create -f resourcedefinition.yaml 或者 自定义API server, 则定义了RESTful API endpoint. 用于接受 REST 请求,改变 resource 的期望状态。
    展开
    
     7
  • 千寻
    2018-10-17
    我从代码开始,就按着步骤走,最后创建network的CRD和example-network都成功了,
    但是我直接将cdr/network.yml和example/example-network.yml文件单独拿出来,并没有执行代码生成那些步骤,发现也创建成功了,搞得有点懵。
    老师可以说一下这大概是什么回事吗?

    作者回复: 因为生成的代码是给下一篇写控制器代码用的,哈哈

    
     7
  • Joe
    2019-01-10
    Generating deepcopy funcs
    F0110 15:05:38.168635 11946 deepcopy.go:866] Hit an unsupported type invalid type.

    按文档走了一半,报错~ 这个是什么问题呀?
    
     5
  • Leon📷
    2019-01-26
    我是开发人员,会go,也会C++,也自己设计过业务协议,看到这篇异常兴奋
    
     4
  • yuanlinios
    2018-12-28
    ./generate-groups.sh all "$ROOT_PACKAGE/pkg/client" "$ROOT_PACKAGE/pkg/apis" "$CUSTOM_RESOURCE_NAME:$CUSTOM_RESOURCE_VERSION"
    Generating deepcopy funcs
    F1228 01:11:20.543446 2908 deepcopy.go:866] Hit an unsupported type invalid type.
    
     4
  • 小宇宙
    2018-10-17
    用CRD来开发定义自主化的operator ,将有状态的应用自动化
    
     4
  • Vincen
    2018-10-17
    从kubernetes用户到kubernetes玩家成长中...
    
     3
  • 疯狂的小企鹅
    2019-02-09
    提示 Hit an unsupported type invalid type的同学,可以先安装下k8s.io/apimachinery包。应该是deepcopy找不到metav1.ObjectMeta和metav1.TypeMeta
    go get -u k8s.io/apimachinery
    
     2
  • 圣诞使者
    2018-10-22
    老师,我照着你的代码敲了一遍,这个pkg/signals目录是自己创建的吗?我这个生成完代码也没有这个目录。

    作者回复: 这是个自己的帮助库

    
     2
  • shadow
    2018-10-18
    register.go会将自定义Type注册到APIServer,那register.go本身是怎么交给APIServer,然后被APIServer调用注册过程的?

    $ kubectl apply -f crd/network.yaml
    $ kubectl apply -f example/example-network.yaml

    执行完这两步,自定义的Newwork对象被创建出来,怎么感觉register.go并没有被用到
    展开

    作者回复: 因为你还没有调用生成的client,register.go是客户端用来进行初始化的代码的一部分。你这两步做完,服务端已经知道这个crd了,客户端也得有办法知道啊。

    
     2
  • 骨汤鸡蛋面
    2019-01-05
    自定义resource的Controller 单独运行,只是通过client-go 与api 交互? 是否可以认为,k8s内建的Resource 对应的Controller,由Controller-manager 统一管理呢?

    作者回复: 对的,内置和外挂的区别

    
     1
  • blackpiglet
    2018-12-30
    看到这挺兴奋的,感觉 rook、etcd-operator、prometheus-operator 应该都是这么做的。
    
     1
  • zz@zz
    2018-11-09
    报错 Generating deepcopy funcs
    F1109 16:09:50.592462 59073 main.go:81] Error: Failed executing generator: some packages had errors:
    type "vendor/k8s.io/apimachinery/pkg/runtime.Object" in k8s:deepcopy-gen:interfaces tag of type vendor/k8s.io/apimachinery/pkg/runtime.Object is not an interface, but: ""

    go get -u k8s.io/apimachinery 后好了
    展开
    
     1
  • 蜗牛
    2018-10-23
    有一个问题张老师,一直不是特别清楚… 通过 crd 创建的自定义资源我还并没有定义他的结构,为什么就可以通过 kubectl get 拿到这个资源的详情呢?

    作者回复: 你提交了一个CR yaml了不是?反正是存在etcd里,给你返回即可。不过kubernetes 并不懂字段的意思。

    
     1
  • 小伟
    2018-10-18
    老师好,作为一个运维,觉得你讲的内容好深,学得好吃力,不知能否分享一些实际生产环境的troubleshooting 的案例和思路?

    作者回复: 建议还是多实践这里讲解的内容

    
     1
  • 钱晓明
    2018-10-17
    这章会让运维人员心碎的...幸好俺会Go语言!
    请教下这个生成的代码,还得合并到apiserver的代码树中吧?还是得重新编译apiserver吧?毕竟Go目前还没有动态加载机制。

    作者回复: 当然不需要。你就按文章里的步骤来就全妥了。

    
     1
  • Geek_260c9a
    2019-10-20
    没有弄明白生成这些代码和CRD可以被k8s 识别的必然联系。
    
    
我们在线,来聊聊吧