Kubernetes:是否可以为包括本地在内的所有环境使用完全相同的部署描述符?
Kubernetes: Is it possible to have the exact same deployment descriptor for all environments including local?
我是 Kubernetes 和 Minikube 的新手。两者看起来都很棒,但我想知道是否有任何方法可以让一个 .yml 文件在所有环境中部署我的 services/deployments,包括本地开发环境...
我看到的第一个限制与服务发现有关,因为我希望我的服务在云上的负载均衡器后面,但在开发环境中,我不能,因为 minikube 不支持它,所以我必须回退到 NodePort。
你能给我提供一些关于这件事的信息吗?
如果我正确理解了您的问题,您希望使用一个命令和一个文件启动您的基础架构。
有可能;但是,这取决于您的服务。如果一些 pods 需要另一个 运行 才能开始,这可能会变得棘手。但是从技术上讲,您可以将所有清单文件放在一个包中。然后,您可以使用 kubectl apply -f bundle.yml
创建所有部署服务等
要创建此捆绑包,您需要用三重破折号 (---
)
分隔每个清单(部署、服务配置映射等)
示例:
apiVersion: v1
kind: Namespace
metadata:
name: namespace-1
---
apiVersion: v1
kind: Namespace
metadata:
name: namespace-2
环境名称之间还有其他常见差异;任何数据库或其他许可资源的凭据; RAM/CPU 的分配;副本计数。与生产 k8s 相比,minikube 作为运行时存在一些限制。
因此,虽然 可以 在不同的环境中使用同一个 yaml 文件,但通常这并不是 想要的 。
人们通常想要的是让解决方案的总体架构形状在不同环境中保持相同,将差异提取到简约配置中,然后使用模板呈现到 environment-specific 文件中以在部署时使用。
最常用于支持这种方法的工具是 helm:
Helm 基本上是围绕 kubectl 的美化模板包装器(尽管它有一个 in-cluster 组件)。使用 helm,您可以使用相同的资源文件基础集,将环境差异提取到配置文件中,然后使用 helm 对每个环境进行适当的部署。
我是 Kubernetes 和 Minikube 的新手。两者看起来都很棒,但我想知道是否有任何方法可以让一个 .yml 文件在所有环境中部署我的 services/deployments,包括本地开发环境...
我看到的第一个限制与服务发现有关,因为我希望我的服务在云上的负载均衡器后面,但在开发环境中,我不能,因为 minikube 不支持它,所以我必须回退到 NodePort。
你能给我提供一些关于这件事的信息吗?
如果我正确理解了您的问题,您希望使用一个命令和一个文件启动您的基础架构。
有可能;但是,这取决于您的服务。如果一些 pods 需要另一个 运行 才能开始,这可能会变得棘手。但是从技术上讲,您可以将所有清单文件放在一个包中。然后,您可以使用 kubectl apply -f bundle.yml
要创建此捆绑包,您需要用三重破折号 (---
)
示例:
apiVersion: v1
kind: Namespace
metadata:
name: namespace-1
---
apiVersion: v1
kind: Namespace
metadata:
name: namespace-2
环境名称之间还有其他常见差异;任何数据库或其他许可资源的凭据; RAM/CPU 的分配;副本计数。与生产 k8s 相比,minikube 作为运行时存在一些限制。
因此,虽然 可以 在不同的环境中使用同一个 yaml 文件,但通常这并不是 想要的 。
人们通常想要的是让解决方案的总体架构形状在不同环境中保持相同,将差异提取到简约配置中,然后使用模板呈现到 environment-specific 文件中以在部署时使用。
最常用于支持这种方法的工具是 helm:
Helm 基本上是围绕 kubectl 的美化模板包装器(尽管它有一个 in-cluster 组件)。使用 helm,您可以使用相同的资源文件基础集,将环境差异提取到配置文件中,然后使用 helm 对每个环境进行适当的部署。