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

sha*_*ite 2 web-applications docker kubernetes

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

Jos*_*sto 6

通常,您希望在dev环境中运行的应用程序不会干扰在production环境中运行的应用程序。使用 Kubernetes,您可以针对不同的环境使用不同的命名空间来获得这种隔离。这样,production命名空间上的对象就不同于dev命名空间上的对象。另一种更昂贵的方法是为不同的环境使用不同的 k8s 集群。

完成此设置后,您可以在要部署到的特定环境的命名空间中部署应用程序,并在该命名空间上创建Deployment对象。这Deployment将使用一个ConfigMap包含您的应用程序环境变量的对象。ConfigMap每个命名空间/环境中的变量都不同。这样,您的Deployment对象在不同的​​环境中是相同的,这让您更有信心在测试上dev的内容与将在 上使用的内容相同production。该Deployment对象是相同的,但它使用不同的变量来运行。

使用文档中的示例 Pod

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
Run Code Online (Sandbox Code Playgroud)

将该内容保存到 中pod.yaml,我们可以在我们的命名空间中使用kubectl -n my-namespace-development create pod.yaml, 和来创建它kubectl -n my-namespace-production create pod.yaml

这个 Pod 将使用一个名为 的 ConfigMap special-config。可以像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 内容都不同。所以在被调用的命名空间上创建的 Podmy-namespace-production将使用该值very,但在命名空间上创建的 Podmy-namespace-development将使用该值very-dev

  • 我如何通过配置映射控制命名空间?我的意思是如何使部署文件中的命名空间参数从 configmap 中获取其值?谢谢 (2认同)