[转载]ko:Go中的快速Kubernetes微服务开发
原文:
https://medium.com/knative/ko-fast-kubernetes-microservice-development-in-go-f94a934a7240
作者:
Matthew Moore
我最初写信是ko
为了帮助Knative开发人员。我被提示根据社区的积极反馈撰写这篇介绍性文章,包括ko
最近在Kubecon Seattle 2018期间的IBM展位谈话。我希望您喜欢ko
和我们一样使用,我期待您对slack.knative的反馈意见.dev。
在过去的几年里,有很多关于容器的炒作。Docker,Kubernetes和相关技术已经风靡全球(双关语)。与此同时,随着软件项目变得越来越复杂,开发过程也越来越复杂。
什么开始:
很快变成:
诸如skaffold之类的工具可以将这个过程包装成任意语言和Dockerfiles,使其更容易管理(并且更快),但你仍然需要编写手工制作的手工制作的Dockerfiles,并且通常需要编写更多的 yaml(或其他)来告诉工具如何协调这个(例如什么被推到哪里?):
ko
采用一种不同的方法,倾向于Go成语以消除配置。
一个这样的Go成语是二进制文件被“ 导入路径 ” 引用; 安装Go二进制文件的典型方法是:
#例如安装ko本身 去github.com/google/go-containerregistry/cmd/ko
开始使用ko
不带任何其他配置文件,您只需使用导入路径替换对容器图像的引用:
#这个例子是基于: # apiVersion:V1 样:布丁 元数据: 名称:kodata 规格: 容器: - name:test #ko构建并发布此Go二进制文件,并将此 #替换为图像名称。 image:github.com/google/go-containerregistry/cmd/ko/test restartPolicy:从不
而已。
我该如何使用ko
?
ko
还需要知道用户想要发布图像的位置。这是在yaml清单之外定义的,因为团队中的每个开发人员通常都会使用自己的开发人员。
例如,在Knative上开发,我在我的.bashrc
文件中使用它 :
export KO_DOCKER_REPO = gcr.io / mattmoor-private / ko
注意:对于DockerHub用户(可能还有其他用户),这应该是:docker.io/username
因为DockerHub不支持多级存储库名称。
之后,命令行界面建模为kubectl
:
ko apply -f directory / -f file.yaml
这将具有kubectl apply
与之相同的净效果,但它也将构建,容纳和发布从yamls引用的Go微服务,配置明显更少:
你只写Kubernetes yamls和代码。没有Dockerfiles,没有Makefiles。您运行一个命令,并且您的最新代码正在运行。
按照上面的例子(宽度修剪):
〜/ go / src / github.com / google / go-containerregistry $ ko apply -f cmd / ko / test / test.yaml using base ... for github.com/google/go-containerregistry/cmd/ko/test Publishing gcr.io/mattmoor-public/test-01234abcd:latest mount blob:sha256:deadbeef mount blob:sha256:baadf00d push blob sha256:deadf00d push blob sha256:baadbeef push blob sha256:beeff00d gcr.io/mattmoor-public/test- 01234abcd:latest:digest:... size:915 发布gcr.io/mattmoor-public/test-01234abcd @ ... pod / kodata created
〜/ go / src / github.com / google / go-containerregistry $ kubectl get pods NAME READY STATUS RESTARTS AGE kodata 0/1已完成0 1
只是图像
ko
支持的最简单的技巧是简单地容纳和发布图像。关于这一点的一个巧妙的事情是它适用于大多数Go二进制文件而不知道ko
。
例如(为宽度修剪):
〜/ go / src / golang.org / x / tools $ ko publish ./cmd/goimports/ 使用base .. for golang.org/x/tools/cmd/goimports发布gcr.io/mattmoor-public/goimports-01234 :最新 安装的blob:SHA256:DEADBEEF 安装斑点:SHA256:baadf00d 安装斑点:SHA256:deadf00d 推BLOB SHA256:baadbeef 推BLOB SHA256:beeff00d gcr.io/mattmoor-public/goimports-01234:latest:摘要:...尺寸:914 发布gcr.io/mattmoor-public/goimports-01234 @ ...
ko
也适用于发布!
您还可以通过以下ko
方式发布用于重新分发的内容:
#这会做`apply`所做的一切,除了它管道 #stdout而不是kubectl ko resolve -f config /> release.yaml
#Later ... kubectl apply -f release.yaml
例如,我们使用它来释放所有Knative组件。
试一试,告诉我们你的想法。
这只是触及你可以做什么的表面ko
,以及ko
对你有什么用。有关更多信息,请查看README.md。如果您有问题:#ko on slack.knative.dev,或者通过Twitter @mattomata与我联系。
一些常见的陷阱
ko有几点需要注意,因为它依赖于约定:
你需要上电,
${GOPATH}
或者不知道你在哪个套餐。错字是最糟糕的。因为
ko
对模式不敏感,它会忽略任何不是“主”包的导入路径的字符串,所以如果你的导入路径中有一个简单的拼写错误,那么它将保持不变,你可能会看到你的PodErrImagePull
。
- 点赞
- 收藏
- 关注作者
评论(0)