K8s Operator总结----(二) kubebuilder 安装测试

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: kubebuilder 安装测试

kuberbuilder安装

安装go环境,在ubuntu下

  1. Remove any previous Go installation

    by deleting the /usr/local/go folder (if it exists), then extract the archive you just downloaded into /usr/local, creating a fresh Go tree in /usr/local/go:

$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz

  1. (You may need to run the command as root or through sudo).
    Do not untar the archive into an existing /usr/local/go tree. This is known to produce broken Go installations.
  2. Add /usr/local/go/bin to the  PATH  environment variable.
    You can do this by adding the following line to your $HOME/.profile or /etc/profile (for a system-wide installation):

export PATH=$PATH:/usr/local/go/bin

  1. Note: Changes made to a profile file may not apply until the next time you log into your computer. To apply the changes immediately, just run the shell commands directly or execute them from the profile using a command such as source $HOME/.profile.
  2. Verify that you've installed Go by opening a command prompt and typing the following command:

$ go version

  1. Confirm that the command prints the installed version of Go.

安装kubebuilder

# download kubebuilder and install locally.

curl-L-o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"

# 注意如果是直接下载,可能需要修改下文件名字

chmod+x kubebuilder && mv kubebuilder /usr/local/bin/

创建demo

如果出现不能下载的情况,执行下面的命令,对go mod配置proxy,走代理下载: export GOPROXY=https://goproxy.io

export GOPROXY=https://goproxy.io

如果已经创建了,想覆盖,增加--force选型。

user@k8s-master:~/demo1$ kubebuilder create api --group webapp --kind Welcome --version v1 --force

INFO Create Resource [y/n]                        

y

INFO Create Controller [y/n]                      

y

INFO Writing kustomize manifests for you to edit...

INFO Writing scaffold for you to edit...          

INFO api/v1/welcome_types.go                      

INFO api/v1/groupversion_info.go                  

INFO internal/controller/suite_test.go            

INFO internal/controller/welcome_controller.go    

INFO Update dependencies:

$ go mod tidy          

INFO Running make:

$ make generate                

mkdir-p /home/user/demo1/bin

test -s /home/user/demo1/bin/controller-gen && /home/user/demo1/bin/controller-gen --version | grep-q v0.13.0 || \

GOBIN=/home/user/demo1/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.13.0

go: downloading sigs.k8s.io/controller-tools v0.13.0

go: downloading github.com/spf13/cobra v1.7.0

go: downloading github.com/gobuffalo/flect v1.0.2

go: downloading k8s.io/apiextensions-apiserver v0.28.0

go: downloading k8s.io/apimachinery v0.28.0

go: downloading golang.org/x/tools v0.12.0

go: downloading github.com/fatih/color v1.15.0

go: downloading k8s.io/api v0.28.0

go: downloading github.com/mattn/go-colorable v0.1.13

go: downloading github.com/mattn/go-isatty v0.0.17

go: downloading golang.org/x/sys v0.11.0

go: downloading golang.org/x/net v0.14.0

go: downloading golang.org/x/mod v0.12.0

go: downloading golang.org/x/text v0.12.0

/home/user/demo1/bin/controller-gen object:headerFile="hack/boilerplate.go.txt"paths="./..."

Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:

$ make manifests

deployment, err :=r.createWelcomeDeployment(welcome)

iferr!=nil {

returnctrl.Result{}, err

}

log.Info("create deployment success!")

svc, err :=r.createService(welcome)

iferr!=nil {

returnctrl.Result{}, err

}

log.Info("create service success!")

applyOpts := []client.PatchOption{client.ForceOwnership, client.

FieldOwner("welcome_controller")}

err=r.Patch(ctx, &deployment, client.Apply, applyOpts...)

例子welcome.go

 1packagemain

 2  

 3import (

 4         "fmt"

 5         "net/http"

 6         "os"

 7 )

 8funcmain() {

 9       name :=os.Getenv("NAME")

10       hello :=fmt.Sprintf("Hello %s ", name)

11       http.Handle("/hello/", http.StripPrefix("/hello/", http.FileServer(http.Dir("static"))))

12       f, err :=os.OpenFile("./static/index.html", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)

13       iferr!=nil {

14            panic(err)

15       }

16       deferf.Close()

17       if_, err=f.WriteString(hello); err!=nil {

18            panic(err)

19       }

20       port :=os.Getenv("PORT")

21       ifport=="" {

22       port="8080"

23       }

24       // Start the web service on the specified port

25       err=http.ListenAndServe(":"+port, nil)

26       iferr!=nil {

27       panic(err)

28       }

29 }

对应的dockerfile

 1 FROM golang:1.12 as builder

 2 # Copy local code to the container image.

 3 WORKDIR /

 4 COPY . .

 5 COPY static /static

 6 # Build the command inside the container.

 7 RUN CGO_ENABLED=0 GOOS=linux go build -v -o main

 8 # Use a Docker multi-stage build to create a lean production image.

 9 FROM alpine

10 RUN apk add --no-cache ca-certificates

11 # Copy the binary to the production image from the builder stage.

12 COPY --from=builder /main /usr/local/main

13 COPY --from=builder /static /static

14 # Run the web service on container startup.

15 CMD ["/usr/local/main"]

运行

user@gitlabrunner:~/tmp$ docker build -t welcome_operator:v1 .


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
21天前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
39 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
17天前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
48 1
|
28天前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
30天前
|
Kubernetes Docker 容器
rancher docker k8s安装(一)
rancher docker k8s安装(一)
39 2
|
30天前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
111 2
|
30天前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
20 1
|
30天前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
47 1
|
30天前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
111 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
1月前
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
|
2月前
|
Linux
kickstart自动安装系统 --DHCP 配置及测试
PXE+Kickstart自动安装系统需配置DHCP服务器分配IP。dhcpd.conf示例:设置更新样式、忽略客户端更新、指定下一服务器及启动文件。定义子网、网关、掩码、动态地址池并预留特定MAC地址。重启xinetd、NFS、DHCP服务,确保新服务器与Kickstart服务器在同一网络,避免误装其他机器。注意隔离测试网络以防干扰生产环境。
77 18

推荐镜像

更多