• kubebuilder的安装与基本使用


    目录

    一、kubebuilder的安装

    二、kubebuilder的卸载

    三、创建项目


    一、kubebuilder的安装

    1.下载最新版kubebuilder(建议不要用,要求go的版本在1.19以上才可用)

    1. #查看go环境变量
    2. go env GOOS
    3. go env GOARCH

    1. sudo su -
    2. curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/替换go env GOOS 字段/替换go env GOARCH字段
    3. chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
    4. #验证是否安装成功
    5. kubebuilder version

    2.下载指定版本的kubebuilder(推荐)

    1. os=$(go env GOOS) #替换下面命令的darwin
    2. arch=$(go env GOARCH) #替换下面命令的amd64
    3. wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.1/kubebuilder_2.3.1_darwin_amd64.tar.gz
    4. tar xf kubebuilder_2.3.1_darwin_amd64.tar.gz
    5. sudo mv 你的 kubebuilder_2.3.1_darwin_amd64的位置 /usr/local/kubebuilder
    6. export PATH=$PATH:/usr/local/kubebuilder/bin

    1. #ps:若kubebuilder version 显示“zsh: permission denied: kubebuilder”则执行
    2. vim .zshrc
    3. #文件末添加以下语句
    4. export PATH=/usr/local/kubebuilder/bin:$PATH
    5. source ~/.zshrc

    二、kubebuilder的卸载

    找到安装位置

     删除kubebuilder

    sudo rmdir -rf kubebuilder

    三、创建项目

    1.创建项目

    1. mkdir myCRD
    2. cd myCRD
    3. go mod init nginx-operator #没有gopath的情况下需要先使用gomod初始化项目

    2.脚手架生成框架代码

    1. #kubebuilder init --domain my.domain 这句命令会生成一些文件,包括main.go等文件 --skip-go-version-check 跳过go版本检查(高于1.17的时候)
    2. kubebuilder init --domain nginx-operator --skip-go-version-check

    这里创建的文件包括:

    1. nginx-operator
    2. ├── config #运行 operator 所需的所有配置文件,目前里面包括 Kustomize YAML 配置文件,后续需要加入 CustomResourceDefinitions(CRD)和一些其他的配置文件
    3. │ ├── default #包含 Kustomize base 文件,用于以标准配置启动 controller
    4. │ ├── rbac #包含运行 controller 所需最小权限的配置文件
    5. │ └── default #包含 Kustomize base 文件,用于以标准配置启动
    6. ├── PROJECT #用于创建新组件的 Kubebuilder 元数据
    7. ├── Makefile #用于构建和部署 controller
    8. ├── main.go #程序的入口
    9. └── ...

     

     3.main.go文件中核心方法介绍

    1. func main() {
    2. //为 metrics 绑定一些基本的 flags。
    3. var metricsAddr string
    4. var enableLeaderElection bool
    5. flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
    6. //可添加新flag
    7. flag.StringVar(&metricsAddr, "potato-metrics-addr", ":8081", "The address the metric endpoint binds to.")
    8. flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
    9. "Enable leader election for controller manager. "+
    10. "Enabling this will ensure there is only one active controller manager.")
    11. flag.Parse()
    12. ctrl.SetLogger(zap.New(zap.UseDevMode(true)))
    13. //实例化一个 manager,用于跟踪我们运行的所有 controllers。 设置 shared caches 和可以连接到 API server 的 k8s clients 实例,将 Scheme 配置传入 manager。
    14. mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
    15. Scheme: scheme,
    16. MetricsBindAddress: metricsAddr,
    17. Port: 9443,
    18. LeaderElection: enableLeaderElection,
    19. LeaderElectionID: "70c42966.nginx-operator",
    20. })
    21. if err != nil {
    22. setupLog.Error(err, "unable to start manager")
    23. os.Exit(1)
    24. }
    25. // +kubebuilder:scaffold:builder
    26. //运行我们的 manager, 而 manager 又运行所有的 controllers 和 webhook。 manager 会一直处于运行状态,直到收到正常关闭信号为止。 这样,当我们的 operator 运行在 Kubernetes 上时,我们可以通过优雅的方式终止这个 Pod。
    27. setupLog.Info("starting manager")
    28. if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
    29. setupLog.Error(err, "problem running manager")
    30. os.Exit(1)
    31. }
    32. }

  • 相关阅读:
    全屏组件封装(react18+antd)
    c++学习-STL常用函数
    5张图告诉你:同样是职场人,差距怎么这么大?
    [HNCTF]Web详解_原创
    Stable Diffusion如何生成高质量的图-prompt写法介绍
    nodeJs--egg框架介绍
    Anaconda prompt 启动jupyter时,出现版本的问题
    Libvirt虚拟化管理及计算环境的规划及部署
    力扣26:删除有序数组中的重复项
    线性代数学习笔记8-2:对称矩阵和Hermitian矩阵、共轭转置、正定矩阵
  • 原文地址:https://blog.csdn.net/xueqinglalala/article/details/127870545