3

我在我的 k8s 集群中部署了一个有状态的 mongodb 设置。每次扩展一个新的 pod,我需要使用 rs.add() 命令从 mongodb 控制台添加 pod。有什么办法可以安排这个吗?..另外,我怎样才能在我的 k8s 集群之外公开我的 mongodb 服务..将服务类型更改为 nodeport 对我不起作用..请帮忙。

下面给出我用来部署 mongodb 的有状态 yaml 文件。

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:3.4
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--bind_ip"
            - 0.0.0.0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo,environment=test"
  volumeClaimTemplates:
  - metadata:
      name: mongo-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi
4

2 回答 2

1

正如@PjoterS 建议的那样,您可以使用 HPA 扩展 kubernetes 内的 mongoDB 副本或 pod。

但是,您还应该注意使用它安装的卷。还有副本之间的数据延迟。

我建议最好先检查由 mongo db 提供的本机扩展集群选项,并自行配置。您可以对 mongoDB 使用一些运算符,例如:https://docs.mongodb.com/kubernetes-operator/master/tutorial/install-k8s-operator/

否则,如果您的当前配置遵循本机集群并支持扩展副本和副本之间的数据复制,您可以选择 HPA。

你也可以看看这个:https://medium.com/faun/scaling-mongodb-on-kubernetes-32e446c16b82

于 2019-09-20T11:32:39.567 回答
1

当您使用 Kubernetes(容器编排平台)时,您始终可以扩展您的deployment/statefulset使用量$ kubectl scale deployment [deployment_name] --repplicas=X ,或者$ kubectl scale statefulset [statefulset-name] --replicas=X X 表示您希望在部署中总共拥有多少个 pod。它将根据您的部署设置自动创建 Pod。如果您不想手动创建它,您应该阅读有关 Kubernetes 自动缩放 - HPA的信息。

关于在 Kubernetes 之外公开应用程序,您必须使用Service. 更多信息可以在这里找到。我不确定NodePort在这种情况下是否正确。您可以检查ServiceType描述。

但是我对 MongoDB 和 Kubernetes 不是很熟悉,但也许这些教程对你有帮助。 在 Kubernetes 上扩展 MongoDB ,使用 Docker 和 Kubernetes 将 MongoDB 作为微服务运行,使用 StatefulSets 在 Kubernetes 上运行MongoDB 。

希望它会有所帮助。

于 2019-09-20T10:09:12.287 回答