Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes配置的验证方法_Kubernetes_Google Kubernetes Engine_Minikube - Fatal编程技术网

Kubernetes配置的验证方法

Kubernetes配置的验证方法,kubernetes,google-kubernetes-engine,minikube,Kubernetes,Google Kubernetes Engine,Minikube,我一直在努力学习库伯内特斯。我有一个相对简单的集群,它有两个服务,一个入口,现在正在添加一个Redis数据库。我在中托管这个集群,但使用在本地运行集群,并在提交任何更改并将其推送到GKE中的prod环境之前尝试所有操作 在这个项目中,我注意到GKE在想要配置的方式和在Minikube中工作的方式上似乎有一些细微的差异。我以前在ingresses中看到过这一点,现在在持久卷中看到了这一点 例如,要在GKE中使用持久卷运行Redis,我可以使用: apiVersion: apps/v1 kind:

我一直在努力学习库伯内特斯。我有一个相对简单的集群,它有两个服务,一个入口,现在正在添加一个Redis数据库。我在中托管这个集群,但使用在本地运行集群,并在提交任何更改并将其推送到GKE中的prod环境之前尝试所有操作

在这个项目中,我注意到GKE在想要配置的方式和在Minikube中工作的方式上似乎有一些细微的差异。我以前在ingresses中看到过这一点,现在在持久卷中看到了这一点

例如,要在GKE中使用持久卷运行Redis,我可以使用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chatter-db-deployment
  labels:
    app: chatter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chatter-db-service
  template:
    metadata:
      labels:
        app: chatter-db-service
    spec:
      containers:
      - name: master
        image: redis
        args: [
          "--save", "3600", "1", "300", "100", "60", "10000",
          "--appendonly", "yes",
        ]
        ports:
        - containerPort: 6379
        volumeMounts:
        - name: chatter-db-storage
          mountPath: /data/
      volumes:
      - name: chatter-db-storage
        gcePersistentDisk:
          pdName: chatter-db-disk
          fsType: ext4
末尾的
gcePersistentDisk
部分指的是我使用
gcloud compute disks create
创建的磁盘。但是,这在Minikube中根本不起作用,因为我不能用这种方式创建磁盘

相反,我需要使用:

      volumes:
      - name: chatter-db-storage
        persistentVolumeClaim:
          claimName: chatter-db-claim
我还需要为
PeristentVolume
peristentvolumeclaim
提供单独的配置

我可以很容易地在MinikubeGKE中找到工作,但我不确定获得一个同时适用于两者的配置的最佳方法是什么。理想情况下,我希望有一个部署此应用程序的
k8s.yaml
文件,并且
kubectl apply-f k8s.yaml
应适用于这两种环境,允许我使用Minikube进行本地测试,然后在满意时推送到GKE

我知道这两个环境之间存在差异,可能会在某种程度上泄漏到配置中,但在推送配置之前必须有一种有效的方法来验证配置?测试配置的最佳实践是什么?我的问题主要是:

  • 拥有一个既可用于GKE又可用于Minikube的Kubernetes配置是否可行
  • 如果没有,是否可以使用大部分共享Kubernetes配置,覆盖GKE和Minikube特定部分
  • 现有项目如何解决这个特殊问题
  • 在GKE中简单地创建一个单独的
    dev
    集群并对其进行测试,而不是使用Minikube,这是最好的方法吗

  • 是的,您已经发现Kubernetes配置的某些部分从一开始就不是完美的。但有新的解决方案

    存储抽象 在较新的Kubernetes版本中,您的应用程序配置是一个部署,其中的卷引用了StorageClass的PersistentVolumeClaim

    而PersistentVolume则更多地属于基础架构配置

    有关如何为Minikube配置持久卷的信息,请参见。对于GKE,您可以使用GCEPersistentDisk配置一个持久卷,或者如果您想将应用部署到AWS,您可以为AWSElasticBlockStore使用一个持久卷

    入口和服务抽象
    服务
    与类型LoadBalancer和NodePort结合使用
    入口
    在云提供商和应用程序之间的工作方式不同。此外,像Mesh这样的服务实现引入了
    VirtualService
    。该计划旨在根据我的理解改善这种情况。

    是的,您发现Kubernetes配置的某些部分从一开始就不完美。但有新的解决方案

    存储抽象 在较新的Kubernetes版本中,您的应用程序配置是一个部署,其中的卷引用了StorageClass的PersistentVolumeClaim

    而PersistentVolume则更多地属于基础架构配置

    有关如何为Minikube配置持久卷的信息,请参见。对于GKE,您可以使用GCEPersistentDisk配置一个持久卷,或者如果您想将应用部署到AWS,您可以为AWSElasticBlockStore使用一个持久卷

    入口和服务抽象
    服务
    与类型LoadBalancer和NodePort结合使用
    入口
    在云提供商和应用程序之间的工作方式不同。此外,像Mesh这样的服务实现引入了
    VirtualService
    。我们的计划是以我的理解来改善这种情况。

    感谢这里提供的更多细节,使问题更加清晰,尽管我不确定这里是否有解决方案。应用程序配置和基础架构配置之间有什么区别?您是否建议我可以为我的通用应用程序配置一个配置,并为Minikube/GKE特定部分单独配置一个配置?或者这仅仅是Kubernetes中已知的设计缺陷,打算在某一点上“修复”@DouglasParker所有平台(如Minikube和GKE)的应用程序配置都是相同的。但基础设施配置取决于平台,例如Minikube和GKE的配置不同,希望这只是配置的一小部分。@DouglasParker是的,每个平台上的服务和入口可能略有不同。。。如果您可以在每个平台上使用相同的入口控制器,这是最简单的。。。但有时您希望使用云提供商设置。。。。所以这取决于什么对你最重要。但我关于持久卷的链接解释了如何为Minikube做持久卷。。。因此,最好在您的平台上配置一个通用的StorageClass。。。但是使用一个依赖于平台的PersistentVolume。我想我已经开始理解这个概念了,但是我正在努力实现它。为了现在特别关注PVs,我会为Minikube使用一个
    StorageClass
    ,为GKE使用另一个
    StorageClass
    ,然后从我的
    PersistentVolume
    中引用
    StorageClass
    ?如果是,我如何获得使用正确的
    StorageClass
    的配置?我看到的唯一方法是使用相同的
    app.yaml
    minikube.yaml
    gke.yaml