目录
使用devspace进行controller/operator开发
e)配置完成后,这些配置会生成为devspace.yaml文件
云原生开发的痛点:
开发controller/crd operator时,需要在集群中运行测试。部署一般是利用pipeline或者二进制进行。而出现问题需进行调试时,一般只能通过打印日志,然后重新运行pipeline,生成新的镜像,然后更新pod。
这样导致效率过低,简单的几行debug都需要走一遍全部流程。
devspace是什么?
DevSpace是Kubernetes的开源开发工具,可以让您更快地开发和部署云本地软件。
安装(以mac为例)
DevSpace是一个仅限客户端的二进制文件。它是超轻量的,不需要任何服务器端组件,并且没有任何依赖性。
curl -s -L "https://github.com/loft-sh/devspace/releases/latest" | sed -nE 's!.*"([^"]*devspace-darwin-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o devspace && chmod +x devspace;
sudo install devspace /usr/local/bin;
使用devspace进行controller/operator开发
1、进入controller的开发文件夹下
比如~./go/src/sample-controller/
2、初始化devspace配置
devspace init
这一步会让我们进行一些配置:
a)如何部署该项目:
给出了几个选择:
用devspace自动生成的helm
用自己的helm
用kubectl,这个需要我们准备好对应的yaml
kustomize,这个也需要我们准备好对应的文件
这里我们选择第一个,devspace自动生成的helm
b)如何编译镜像:
也给出了选择:
用当前目录下的Dockerfile
用其他目录下的dockerfile
使用第三方编译方法,比如jib,bazel
这里我们选择第一个
c)选择镜像仓库:
这一步没什么说的
d)是否需要暴露端口:
如果是web服务,则填入监听的端口就行。否则,则直接回车跳过。
e)配置完成后,这些配置会生成为devspace.yaml文件
接着就可以使用devspace use namespace和devspace dev来debug项目了。
3、开发项目
设置ns
部署项目的namespace,my-namespace,后续开发,部署deploy,都会在这个ns下。
devspace use namespace my-namespace
进行开发
devspace dev
会通过helm部署deployment,然后会把文件夹下的所有文件同步到pod中,
最后自动进入到pod中。 进行go run main.go即可
文件自动同步:
在本地ide修改的文件,都会自动同步到pod中去。大大方便了debug。
注意事项:
1、在pod中,会自动生成rbac,但是权限很小。如果需要起informer拉取资源的。需要修改devspace.yaml,手动添加rbac:
devspace.yaml
deployments:
- name: deploy-service-acccount
kubectl:
manifests:
- folder/serviceaccount.yaml
- name: <name>
helm:
componentChart: true
values:
serviceAccountName: my-service-account
containers:
...
提前准备好sa和clusterrole、rolebinding等yaml文件。保存在folder/serviceaccount.yaml下。
起了一个叫deploy-service-account的deploy job。采用kubectl的方式,把folder/serviceaccount.yaml apply到集群中。
然后在需要这个sa的deploy中,配置下,values,添加serviceAccountName: my-service-account。这样就会在devspace dev时使用这个sa。