Kubernetes 使用kubectl的简单构建和部署过程是什么?
我正在尝试理解一个好的实践是什么,我假设这是一个非常常见的场景,即使用kubectl构建和部署kubernetes部署 情景:Kubernetes 使用kubectl的简单构建和部署过程是什么?,kubernetes,kubectl,Kubernetes,Kubectl,我正在尝试理解一个好的实践是什么,我假设这是一个非常常见的场景,即使用kubectl构建和部署kubernetes部署 情景: 我想构建一个项目并将其部署到集群中 我有一个带有部署(和相关内容)的yaml文件,还有一些带有Dockerfile的src代码 我希望避免在图像标记中使用:latest,而是为该图像使用唯一的标记 我可以很容易地访问一个唯一标识符,它可以来自CI或git sha,在构建时作为环境变量提供 所以这看起来很简单: docker build -t my-registry/
- 我想构建一个项目并将其部署到集群中
- 我有一个带有部署(和相关内容)的yaml文件,还有一些带有Dockerfile的src代码
- 我希望避免在图像标记中使用:latest,而是为该图像使用唯一的标记
- 我可以很容易地访问一个唯一标识符,它可以来自CI或git sha,在构建时作为环境变量提供
docker build -t my-registry/my-app:${BUILD_NUMBER} .
docker push my-registry/my-app:${BUILD_NUMBER}
kubectl apply -f kube.yaml
除了没有本地方法告诉kubectl使用什么图像名称之外
我理解这一点,但我从来没有见过明确提到图像标签的使用案例
我可以使用,但这似乎与“无变量模板支持”的精神背道而驰,而且我几乎不了解sed在编写它时的作用,因此我选择了下一个必须阅读我的命令的开发人员
我觉得对于这样一个基本场景“我想构建并部署到我的集群”,可能会有一个更简单的解决方案,它不会与kubectl发生冲突
Skaffold在为每个构建的图像分配标记和摘要方面做得很好,但是在引入更高级的工具之前,最好先有一个简单的过程开始
- 除了“使用Skafold”或“使用Helm”之外,我应该做什么来拥有一个简单的构建+部署过程
- 使用sed、mo或其他替换工具对yaml文件进行模板化可以吗
- 是否有任何示例项目仅使用kubectl和kustomize进行简单的构建和部署管道
这是一种选择吗?它可以满足您的需要,但不会反映在您的本地
kube.yaml
副本中,因此您需要在kube.yaml
中为“我的注册表/我的应用程序”指定一个虚拟映像,以免让其他开发人员感到困惑,他们必须在每次重新部署时更改该值 对于简单的情况,您可以使用。例如:
kubectl运行我的应用程序--image=my registry/my app:${BUILD\u NUMBER}--port=3000--replicas=1--env VAR=value--expose--limits'cpu=300m,内存=600Mi'
从理论上讲,这是一个不推荐使用的命令,但它已经不推荐使用了2年了,现在仍然存在;]无论如何,如果您觉得不安全,该消息会提示您如何浪费一天或两天的时间,以一种不受欢迎的方式完成任务;]
kubectl set image
似乎非常适合对发布版的部署进行最小更改,但正如您所提到的,它没有在yaml中表示,导致下一个kubectl apply
吹走了set image。我认为这将是一个不幸的妥协。不过,如果有一种方法可以批量处理kubectl命令,那么您可以在部署期间将它们作为原子操作来运行?我不认为有,但这可能很酷。所以您希望kubectl
支持env variable template substation,但正如您所说,这不会发生,所以您需要一个不同的工具。我认为bashkubectl apply-f kube.yaml&&kubectl set image
是最简单、最可读的。我不会像你说的那样使用sed。如果你想发疯,试试terraform
。它还可以通过terraform apply
(并且是为了能够处理这种依赖关系而构建的),我觉得如果您正在寻找一个可以实现所有功能的apply
命令,您可以尝试一下。
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: example
name: my-app
spec:
minReadySeconds: 2
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
name: my-app
labels:
app: my-app
spec:
containers:
- name: my-app
image: "my-registry/my-app"
ports:
- containerPort: 3000
resources:
limits:
cpu: 300m
memory: 600m
requests:
cpu: 50m
memory: 100m