我是这里的新手,我正在为webapp微服务架构准备我的开发和生产环境。我已经通过我的部署文件注入了环境变量,以便控制应用程序的运行环境。例如,在开发模式下运行的微服务将与开发数据库一起工作。因此,我的问题是,您认为控制多环境部署的最佳实践是什么。我是否应该有多个部署文件,同一个微服务的每个环境一个?还是有更好的做法?谢谢
发布于 2018-03-26 13:41:01
通常,您希望在dev
环境中运行的应用程序不会与在production
环境中运行的应用程序发生冲突。使用Kubernetes,您可以获得针对不同环境的这种隔离using different namespaces。这样,production
名称空间上的对象就不同于dev
名称空间上的对象。另一种更昂贵的方法是对不同的环境使用不同的k8s集群。
完成此设置后,您将在要部署到的特定环境的名称空间中部署应用程序,并在该名称空间上创建Deployment
对象。此Deployment
将使用包含应用程序环境变量的ConfigMap
对象。在每个名称空间/环境中,ConfigMap
中的变量都是不同的。这样,您的Deployment
对象在不同的环境中是相同的,这让您更加确信您在dev
上测试的内容与在production
上使用的内容是相同的。Deployment
对象是相同的,但它使用不同的变量来运行。
使用the example Pod from the documentation
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# Define the environment variable
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
# The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEY
name: special-config
# Specify the key associated with the value
key: special.how
restartPolicy: Never
将该内容保存到pod.yaml
中,我们可以使用kubectl -n my-namespace-development create pod.yaml
和kubectl -n my-namespace-production create pod.yaml
在名称空间中创建它。
此Pod将使用一个名为special-config
的ConfigMap。可以像生产中的kubectl -n my-namespace-production create configmap special-config --from-literal=special.how=very
和kubectl -n my-namespace-development create configmap special-config --from-literal=special.how=very-dev
一样创建此配置映射。
如您所见,configmap内容在每个名称空间上都是不同的。因此,在名称空间my-namespace-production
上创建的Pod将使用值very
,但在名称空间my-namespace-development
上创建的pod将使用值very-dev
。
发布于 2018-03-26 17:46:33
除了@fiunchinho回答。Kubernetes文档提供了3种管理部署、服务等的方式:
kubectl创建部署--镜像nginx kubectl编辑部署
有关更多信息,请参阅此link
kubectl创建-f nginx.yaml kubectl替换-f nginx.yaml kubectl删除-f nginx.yaml
有关详细信息,请参阅此link
kubectl
会按对象自动检测创建、更新和删除操作kubectl应用-f nginx.yaml kubectl应用-f配置/
有关更多信息,请访问此link
https://stackoverflow.com/questions/49477706
复制相似问题