zoukankan      html  css  js  c++  java
  • Kubernetes-CRD-Demo

    创建工程

    利用go module创建模块

    root@ubuntu:~/go_learn/proj1# go mod init  demo-controller
    go: creating new go.mod: module demo-controller
    root@ubuntu:~/go_learn/proj1# ls
    go.mod
    root@ubuntu:~/go_learn/proj1# mkdir  demo-controller
    root@ubuntu:~/go_learn/proj1# 

    编写pkg/api

    code-generator要求工程的目录结构满足一定的规则

    • 目录结构必须为pkg/apis/xxx/yyy/
    • 包含如下文件
      1. doc.go
      2. register.go
      3. types.go

     hack

    这部分内容,我们直接从kubernetes官方示例(sample-controller)中拷贝即可

    执行脚本创建pkg/generated

    在执行脚本前,我们需要先下载一个依赖的脚本,就是update-codegen.sh中提到的generate-groups.sh

    root@ubuntu:~/go_learn/proj1/demo-controller/hack# ls
    boilerplate.go.txt  custom-boilerplate.go.txt  tools.go  update-codegen.sh  verify-codegen.sh
    root@ubuntu:~/go_learn/proj1/demo-controller/hack# cd ../../
    root@ubuntu:~/go_learn/proj1# ls
    demo-controller  go.mod
    root@ubuntu:~/go_learn/proj1# cd $GOPATH
    root@ubuntu:/opt/gopath# mkdir -p src/k8s.io
    root@ubuntu:/opt/gopath# cd src/k8s.io
    root@ubuntu:/opt/gopath/src/k8s.io# git clone https://github.com/kubernetes/code-generator.git
    Cloning into 'code-generator'...
    
    remote: Enumerating objects: 10133, done.
    remote: Counting objects: 100% (511/511), done.
    remote: Compressing objects: 100% (182/182), done.
    remote: Total 10133 (delta 340), reused 483 (delta 325), pack-reused 9622
    Receiving objects: 100% (10133/10133), 9.28 MiB | 9.40 MiB/s, done.
    Resolving deltas: 100% (5440/5440), done.
    root@ubuntu:/opt/gopath/src/k8s.io# 
    root@ubuntu:/opt/gopath/src/k8s.io# cd ~/go_learn/proj1/
    root@ubuntu:~/go_learn/proj1# ls
    demo-controller  go.mod
    root@ubuntu:~/go_learn/proj1# cd ~/go_learn/proj1/demo-controller/
    root@ubuntu:~/go_learn/proj1/demo-controller# ls
    hack  pkg
    root@ubuntu:~/go_learn/proj1/demo-controller# bash hack/update-codegen.sh
    go: downloading k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027
    go: downloading golang.org/x/tools v0.1.2
    go: downloading golang.org/x/mod v0.4.2
    go: downloading golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
    Generating deepcopy funcs
    Generating clientset for democontroller:v1 at demo-controller/pkg/generated/clientset
    Generating listers for democontroller:v1 at demo-controller/pkg/generated/listers
    Generating informers for democontroller:v1 at demo-controller/pkg/generated/informers
    root@ubuntu:~/go_learn/proj1/demo-controller# 
    root@ubuntu:~/go_learn/proj1/demo-controller# ls pkg/
    apis
    root@ubuntu:~/go_learn/proj1/demo-controller# ls pkg/apis/
    democontroller
    root@ubuntu:~/go_learn/proj1/demo-controller# ls pkg/apis/democontroller/
    v1
    root@ubuntu:~/go_learn/proj1/demo-controller# ls pkg/apis/democontroller/v1/
    doc.go  register.go  types.go
    root@ubuntu:~/go_learn/proj1/demo-controller# ls
    hack  pkg
    root@ubuntu:~/go_learn/proj1/demo-controller# cd ..
    root@ubuntu:~/go_learn/proj1# ls
    demo-controller  go.mod
    root@ubuntu:~/go_learn/proj1# ls demo-controller/pkg/generated/listers
    ls: cannot access 'demo-controller/pkg/generated/listers': No such file or directory
    root@ubuntu:~/go_learn/proj1# ls demo-controller/pkg/generated/ 
    ls: cannot access 'demo-controller/pkg/generated/': No such file or directory   --什么都没有
    root@ubuntu:~/go_learn/proj1# ls demo-controller/pkg/
    apis
    root@ubuntu:~/go_learn/proj1# ls demo-controller/pkg/apis/
    democontroller
    root@ubuntu:~/go_learn/proj1# 

    原来是go mod init demo-controller使用了错误的目录

    root@ubuntu:~/go_learn/proj1/demo-controller# go mod init  demo-controller
    go: creating new go.mod: module demo-controller
    root@ubuntu:~/go_learn/proj1/demo-controller# ls
    go.mod  hack  pkg
    root@ubuntu:~/go_learn/proj1/demo-controller#  bash hack/update-codegen.sh
    Generating deepcopy funcs
    Generating clientset for democontroller:v1 at demo-controller/pkg/generated/clientset
    Generating listers for democontroller:v1 at demo-controller/pkg/generated/listers
    Generating informers for democontroller:v1 at demo-controller/pkg/generated/informers
    root@ubuntu:~/go_learn/proj1/demo-controller# ls demo-controller/pkg/generated
    ls: cannot access 'demo-controller/pkg/generated': No such file or directory
    root@ubuntu:~/go_learn/proj1/demo-controller# ls demo-controller/pkg/
    ls: cannot access 'demo-controller/pkg/': No such file or directory
    root@ubuntu:~/go_learn/proj1/demo-controller# ls
    go.mod  go.sum  hack  pkg
    root@ubuntu:~/go_learn/proj1/demo-controller# ls pkg/
    apis  generated
    root@ubuntu:~/go_learn/proj1/demo-controller# 

    root@ubuntu:~/go_learn/proj1/demo-controller# cat hack/update-codegen.sh
    #!/usr/bin/env bash

    # Copyright 2017 The Kubernetes Authors.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.

    set -o errexit
    set -o nounset
    set -o pipefail

    SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
    CODEGEN_PKG=${GOPATH}/src/k8s.io/code-generator

    # generate the code with:
    # --output-base because this script should also be able to run inside the vendor dir of
    # k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir
    # instead of the $GOPATH directly. For normal projects this can be dropped.
    bash "${CODEGEN_PKG}"/generate-groups.sh "deepcopy,client,informer,lister"
    demo-controller/pkg/generated demo-controller/pkg/apis
    democontroller:v1
    # --output-base "$(dirname "${BASH_SOURCE[0]}")/../../.."
    # --go-header-file "${SCRIPT_ROOT}"/hack/boilerplate.go.txt

    # To use your own boilerplate text append:
    # --go-header-file "${SCRIPT_ROOT}"/hack/custom-boilerplate.go.txt

    更改

    Kubernetes-CRD-Demo

    good code-generator使用

    code-generator使用

  • 相关阅读:
    set的使用
    dict的使用
    tuple的使用
    Python数据类型字符串
    spring与redis集成之aop整合方案
    MySQL 对于大表(千万级),要怎么优化呢?
    MYSQL千万级数据量的优化方法积累
    Java:按值传递还是按引用传递详细解说
    常用正则表达式
    Java中equals和==的区别
  • 原文地址:https://www.cnblogs.com/dream397/p/14977387.html
Copyright © 2011-2022 走看看