验证 Kubernetes 配置的方法
Methods of Verifying Kubernetes Configuration
我一直致力于 small side project to try and learn Kubernetes. I have a relatively simple cluster with two services, an ingress, and working on adding a Redis database now. I'm hosting this cluster in Google Kubernetes Engine (GKE), but using Minikube 到 运行 本地集群,并在我提交任何更改并将它们推送到 GKE 中的生产环境之前尝试一切。
在这个项目中,我注意到 GKE 在配置方式与 Minikube 中的工作方式方面似乎存在一些细微差别。我以前在入口看到过这种情况,现在在持久卷中看到过。
例如,对于运行Redis在GKE中有一个persistent volume,我可以使用:
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
和 PersistentVolumeClaim
添加单独的配置。
我可以很容易地在 Minikube 或 GKE 中获得一些东西,但我不确定获得适用于两者的配置的最佳方法是什么。理想情况下,我希望有一个部署此应用程序的 k8s.yaml
文件,并且 kubectl apply -f k8s.yaml
应该适用于两种环境,允许我使用 Minikube 在本地进行测试,然后在我满意时推送到 GKE。
我知道这两种环境之间存在差异,并且可能会在某种程度上泄漏到配置中,但是在推送配置之前必须有一种有效的方法来验证配置吗?测试配置的最佳实践是什么?我的问题主要归结为:
- 是否可以使用一个 Kubernetes 配置同时适用于 GKE 和 Minikube?
- 如果不是,是否可以主要共享 Kubernetes 配置,覆盖 GKE 和 Minikube 特定部分?
- 现有项目如何解决这个特定问题?
- 最好的方法是在 GKE 中简单地创建一个单独的
dev
集群并对其进行测试,而不是完全使用 Minikube 吗?
是的,您发现 Kubernetes 配置的某些部分从一开始就不完美。但是有更新的解决方案。
存储抽象
较新 Kubernetes 版本中的想法是您的应用程序配置是一个部署为 StorageClass.
引用 PersistentVolumeClaim 的卷
而 StorageClass 和 PersistentVolume 更属于 基础结构配置 。
参见Configure a Pod to Use a PersistentVolume for Storage了解如何为 Minikube 配置持久卷。对于 GKE,您使用 GCEPersistentDisk 配置 Persistent Volume,或者如果您想将应用程序部署到 AWS,您可以使用 Persistent Volume 对于 AWSElasticBlockStore。
入口和服务抽象
类型为 LoadBalancer 和 NodePort 的 Service
与 Ingress
的组合工作方式不同云提供商和 Ingress Controllers. In addition, Services Mesh implementations like Istio have introduced VirtualService
. The plan is to improve this situation with Ingress v2 我的理解。
我一直致力于 small side project to try and learn Kubernetes. I have a relatively simple cluster with two services, an ingress, and working on adding a Redis database now. I'm hosting this cluster in Google Kubernetes Engine (GKE), but using Minikube 到 运行 本地集群,并在我提交任何更改并将它们推送到 GKE 中的生产环境之前尝试一切。
在这个项目中,我注意到 GKE 在配置方式与 Minikube 中的工作方式方面似乎存在一些细微差别。我以前在入口看到过这种情况,现在在持久卷中看到过。
例如,对于运行Redis在GKE中有一个persistent volume,我可以使用:
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
和 PersistentVolumeClaim
添加单独的配置。
我可以很容易地在 Minikube 或 GKE 中获得一些东西,但我不确定获得适用于两者的配置的最佳方法是什么。理想情况下,我希望有一个部署此应用程序的 k8s.yaml
文件,并且 kubectl apply -f k8s.yaml
应该适用于两种环境,允许我使用 Minikube 在本地进行测试,然后在我满意时推送到 GKE。
我知道这两种环境之间存在差异,并且可能会在某种程度上泄漏到配置中,但是在推送配置之前必须有一种有效的方法来验证配置吗?测试配置的最佳实践是什么?我的问题主要归结为:
- 是否可以使用一个 Kubernetes 配置同时适用于 GKE 和 Minikube?
- 如果不是,是否可以主要共享 Kubernetes 配置,覆盖 GKE 和 Minikube 特定部分?
- 现有项目如何解决这个特定问题?
- 最好的方法是在 GKE 中简单地创建一个单独的
dev
集群并对其进行测试,而不是完全使用 Minikube 吗?
是的,您发现 Kubernetes 配置的某些部分从一开始就不完美。但是有更新的解决方案。
存储抽象
较新 Kubernetes 版本中的想法是您的应用程序配置是一个部署为 StorageClass.
引用 PersistentVolumeClaim 的卷而 StorageClass 和 PersistentVolume 更属于 基础结构配置 。
参见Configure a Pod to Use a PersistentVolume for Storage了解如何为 Minikube 配置持久卷。对于 GKE,您使用 GCEPersistentDisk 配置 Persistent Volume,或者如果您想将应用程序部署到 AWS,您可以使用 Persistent Volume 对于 AWSElasticBlockStore。
入口和服务抽象
类型为 LoadBalancer 和 NodePort 的Service
与 Ingress
的组合工作方式不同云提供商和 Ingress Controllers. In addition, Services Mesh implementations like Istio have introduced VirtualService
. The plan is to improve this situation with Ingress v2 我的理解。