如何在kubernetes中以最小的努力处理多个部署环境?

时间:2018-03-25 15:46:30

标签: docker web-applications kubernetes

我是新手,我正在为webapp微服务架构准备我的开发和生产环境。我通过部署文件注入了环境变量,以便控制应用程序运行的环境。例如,在开发模式下运行的微服务将与开发数据库一起使用。所以我的问题是,您认为控制多个环境部署的最佳实践是什么?我应该有多个部署文件,一个用于同一个微服务的每个环境吗?还是有更好的做法? 感谢

2 个答案:

答案 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.yamlkubectl -n my-namespace-development create pod.yaml在我们的命名空间中创建它。

此Pod将使用名为kubectl -n my-namespace-production create pod.yaml的ConfigMap。可以像生产中的special-configkubectl -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种管理部署,服务等的方法:

  1. 命令式命令 - 用户直接在群集的实时对象上操作,例如

    kubectl create deployment <name-of-deployment> --image nginx
    kubectl edit deployment <name-of-deployment>
    

    有关详情,请参阅此link

  2. 命令式对象配置 - kubectl命令指定操作,可选标志和至少一个文件名。指定的文件必须包含YAML或JSON格式的对象的完整定义,例如

    kubectl create -f nginx.yaml
    kubectl replace -f nginx.yaml
    kubectl delete -f nginx.yaml
    

    有关详情,请参阅此link

  3. 声明对象配置 - 用户对本地存储的对象配置文件进行操作,但用户不定义对文件执行的操作。 kubectl每个对象自动检测创建,更新和删除操作,例如

    kubectl apply -f nginx.yaml
    kubectl apply -f configs/
    

    有关详情,请参阅此link