我是新手,我正在为webapp微服务架构准备我的开发和生产环境。我通过部署文件注入了环境变量,以便控制应用程序运行的环境。例如,在开发模式下运行的微服务将与开发数据库一起使用。所以我的问题是,您认为控制多个环境部署的最佳实践是什么?我应该有多个部署文件,一个用于同一个微服务的每个环境吗?还是有更好的做法? 感谢
答案 0 :(得分:3)
通常,您希望在dev
环境中运行的应用程序不会干扰production
环境中运行的应用程序。使用Kubernetes,您可以针对不同的环境获得此类隔离using different namespaces。这样,production
命名空间上的对象与dev
命名空间上的对象不同。另一种更昂贵的方法是在不同的环境中使用不同的k8s群集。
通过此设置,您可以在要部署到的特定环境的命名空间中部署应用程序,在该命名空间上创建Deployment
对象。此Deployment
将使用包含应用程序环境变量的ConfigMap
对象。 ConfigMap
内的变量在每个命名空间/环境中都是不同的。
这样,您的Deployment
对象在不同的环境中是相同的,这使您可以更自信地在dev
上测试的内容与您在{{1}上使用的内容相同}。 production
对象是相同的,但它使用不同的变量来运行。
使用the example Pod from the documentation
Deployment
将该内容保存到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
在我们的命名空间中创建它。
此Pod将使用名为kubectl -n my-namespace-production create pod.yaml
的ConfigMap。可以像生产中的special-config
和kubectl -n my-namespace-production create configmap special-config --from-literal=special.how=very
一样创建此配置图。
如您所见,每个命名空间的configmap内容不同。因此,在名为kubectl -n my-namespace-development create configmap special-config --from-literal=special.how=very-dev
的命名空间上创建的Pod将使用值my-namespace-production
,但在命名空间very
上创建的窗格将使用值my-namespace-development
。
答案 1 :(得分:1)
除了@fiunchinho回答。 Kubernetes文档提供了3种管理部署,服务等的方法:
命令式命令 - 用户直接在群集的实时对象上操作,例如
kubectl create deployment <name-of-deployment> --image nginx
kubectl edit deployment <name-of-deployment>
有关详情,请参阅此link
命令式对象配置 - kubectl命令指定操作,可选标志和至少一个文件名。指定的文件必须包含YAML或JSON格式的对象的完整定义,例如
kubectl create -f nginx.yaml
kubectl replace -f nginx.yaml
kubectl delete -f nginx.yaml
有关详情,请参阅此link
声明对象配置 - 用户对本地存储的对象配置文件进行操作,但用户不定义对文件执行的操作。 kubectl
每个对象自动检测创建,更新和删除操作,例如
kubectl apply -f nginx.yaml
kubectl apply -f configs/
有关详情,请参阅此link