在 kubernetes etcd 中存储一些应用程序值?
storing some application values in kubernetes etcd?
我的应用程序有一些用户设置,它在 kubernetes 集群上运行。
我希望用户设置能够在应用程序 crash/pod 重启后继续存在。
我首先考虑的是拥有一个数据库实例以将其保存在 kubernetes 之外。然后我想,也许我可以滥用 etcd 来存储少量自定义数据。
这是保持简单的好方法吗?
我看到的另一个选项:
- 在 kubernetes 之外单独的数据库实例(矫枉过正)
- kubernetes 中 PV 卷上的某些 json 文件不断被重新读取。
- 也许使用 hashicorp 保险库?
你会用什么?数据量很小
您可以使用 Persistent Volume
和 Persistent Volume claim
。 pvc
或 Persistent Volume claim
将保留数据以防 pod 重启或 pod 崩溃。这是我认为存储用户数据的最佳方式。您可以根据需要选择合适的存储类型和资源大小。你可以查看官方文档。 Ref
您可以使用 etcd,但是对于您上面列出的要求来说,它可能有点矫枉过正。如果您确定要在 k8s 中存储有状态信息,我建议将持久卷安装到您的部署中,然后使用诸如 BoltDB (https://github.com/boltdb/bolt) 之类的文件存储与其交互。
话虽如此,我认为 运行 一个简单的 SQL k8s 之外的数据库是最简单的整体解决方案。使用 kubernetes 任何有状态的东西都不是简单的,这样你就可以轻松地管理数据库。
如果你想使用 etcd,一个 Kubernetes 内置数据库,它不太适合这个目的,不应该在实践中使用。 App 不应该知道 Kubernetes。您需要使用 DB 或 PVC 将与应用程序相关的对象存储在磁盘中(例如 json、yaml 或其他文件)。
ConfigMaps 旨在持久存储应用程序 config/data 并允许您将数据装载到一个或多个应用程序 Pods 中。
它们可以通过多种方式安装,一种常见的方式是通过环境变量。
这是文档中的示例:
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
我的应用程序有一些用户设置,它在 kubernetes 集群上运行。 我希望用户设置能够在应用程序 crash/pod 重启后继续存在。
我首先考虑的是拥有一个数据库实例以将其保存在 kubernetes 之外。然后我想,也许我可以滥用 etcd 来存储少量自定义数据。 这是保持简单的好方法吗?
我看到的另一个选项:
- 在 kubernetes 之外单独的数据库实例(矫枉过正)
- kubernetes 中 PV 卷上的某些 json 文件不断被重新读取。
- 也许使用 hashicorp 保险库?
你会用什么?数据量很小
您可以使用 Persistent Volume
和 Persistent Volume claim
。 pvc
或 Persistent Volume claim
将保留数据以防 pod 重启或 pod 崩溃。这是我认为存储用户数据的最佳方式。您可以根据需要选择合适的存储类型和资源大小。你可以查看官方文档。 Ref
您可以使用 etcd,但是对于您上面列出的要求来说,它可能有点矫枉过正。如果您确定要在 k8s 中存储有状态信息,我建议将持久卷安装到您的部署中,然后使用诸如 BoltDB (https://github.com/boltdb/bolt) 之类的文件存储与其交互。
话虽如此,我认为 运行 一个简单的 SQL k8s 之外的数据库是最简单的整体解决方案。使用 kubernetes 任何有状态的东西都不是简单的,这样你就可以轻松地管理数据库。
如果你想使用 etcd,一个 Kubernetes 内置数据库,它不太适合这个目的,不应该在实践中使用。 App 不应该知道 Kubernetes。您需要使用 DB 或 PVC 将与应用程序相关的对象存储在磁盘中(例如 json、yaml 或其他文件)。
ConfigMaps 旨在持久存储应用程序 config/data 并允许您将数据装载到一个或多个应用程序 Pods 中。 它们可以通过多种方式安装,一种常见的方式是通过环境变量。 这是文档中的示例:
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