Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Peer_Stellar - Fatal编程技术网

哪种Kubernetes模式适用于对等点配置略有不同的对等点场景?

哪种Kubernetes模式适用于对等点配置略有不同的对等点场景?,kubernetes,peer,stellar,Kubernetes,Peer,Stellar,我试图在kubernetes上运行私有的stellar区块链基础设施(不加入现有的公共或测试stellar网络),但我的问题可以推广到在kubernetes上运行任何对等服务的场景。因此,我将尝试以一种广义的方式解释我的问题(希望它能够给出适用于kubernetes上运行的任何类似拓扑的答案) 以下是场景: 我想运行3个对等点(kube术语:POD),它们能够以分散的方式相互通信,但问题在于每个对等点的配置略有不同。通常,配置如下所示(这是pod0的一个示例): NETWORK\u PASSPH

我试图在kubernetes上运行私有的stellar区块链基础设施(不加入现有的公共或测试stellar网络),但我的问题可以推广到在kubernetes上运行任何对等服务的场景。因此,我将尝试以一种广义的方式解释我的问题(希望它能够给出适用于kubernetes上运行的任何类似拓扑的答案)

以下是场景:

我想运行3个对等点(kube术语:POD),它们能够以分散的方式相互通信,但问题在于每个对等点的配置略有不同。通常,配置如下所示(这是pod0的一个示例):

NETWORK\u PASSPHRASE=“我的专用网络”
结籽=
已知的同龄人=[
“恒星-0”,
“恒星1号”,
“恒星-2”]
[法定人数]
验证程序=[,]
问题在于每个吊舱都有不同的:

  • 结籽
  • 验证程序列表
我的第一个想法(在意识到这个问题之前)是:

  • 为此配置创建配置映射
  • 使用无头服务创建状态集(3个副本),以实现吊舱(stellar-0、stellar-1、stellar-2…等)之间的稳定可达性
另一个想法(在意识到这个问题后)是:

  • 为每个对等点创建单独的配置映射
  • 使用服务创建状态集(1个副本)
我想知道是否有更好的解决方案/模式可以用于此目的,而不是使用单独的服务(statefulset、deployment…)运行配置稍有不同的完全相同的服务,通过它们的单独服务这些对等方将可用(但这种做法违背了使用kubernetes高级资源实现复制的目的)


感谢您,这样您就可以拥有一个带有多个键的
ConfigMap
,每个键都是为您的一个副本指定的。您还可以使用
StatefulSet
initContainer
来部署POD来设置配置。这只是一个示例(您必须根据需要调整它):

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: stellar
  labels:
    app: stellar
data:
  stellar0.cnf: |
    NETWORK_PASSPHRASE="my private network"    
    NODE_SEED=<stellar0_private_key>    
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]    
    [QUORUM_SET]
    VALIDATORS=[ <stellar1_pub_key>, <stellar2_pub_key> ]

  stellar1.cnf: |

    NETWORK_PASSPHRASE="my private network"
    NODE_SEED=<stellar1_private_key>
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]

    [QUORUM_SET]
    VALIDATORS=[ <stellar0_pub_key>, <stellar2_pub_key> ]

  stellar2.cnf: |

    NETWORK_PASSPHRASE="my private network"
    NODE_SEED=<stellar2_private_key>
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]

    [QUORUM_SET]
    VALIDATORS=[ <stellar0_pub_key>, <stellar1_pub_key> ]
apiVersion:v1 种类:配置地图 元数据: 名称:恒星 标签: app:stellar 数据: stellar0.cnf:| 网络\u密码短语=“我的专用网络” 节点_种子= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] stellar1.cnf:| 网络\u密码短语=“我的专用网络” 结籽= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] stellar2.cnf:| 网络\u密码短语=“我的专用网络” 结籽= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] 状态集:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: stellarblockchain
spec:
  selector:
    matchLabels:
      app: stellar
  serviceName: stellar
  replicas: 3
  template:
    metadata:
      labels:
        app: stellar
    spec:
      initContainers:
      - name: init-stellar
        image: stellar-image:version
        command:
        - bash
        - "-c"
        - |
          set -ex
          # Generate config from pod ordinal index.
          [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
          ordinal=${BASH_REMATCH[1]}
          # Copy appropriate conf.d files from config-map to emptyDir.
          if [[ $ordinal -eq 0 ]]; then
            cp /mnt/config-map/stellar0.cnf /mnt/conf.d/
          elif [[ $ordinal -eq 1 ]]; then
            cp /mnt/config-map/stellar1.cnf /mnt/conf.d/
          else
            cp /mnt/config-map/stellar2.cnf /mnt/conf.d/
          fi
        volumeMounts:
        - name: conf
          mountPath: /mnt/conf.d
        - name: config-map
          mountPath: /mnt/config-map

      containers:
      - name: stellar
        image: stellar-image:version
        ports:
        - name: stellar
          containerPort: <whatever port you need here>
        volumeMounts:
        - name: conf
          mountPath: /etc/stellar/conf.d <== wherever your config for stellar needs to be

     volumes:
     - name: conf
       emptyDir: {}
     - name: config-map
       configMap:
         name: stellar
apiVersion:apps/v1 种类:StatefulSet 元数据: 名称:stellarblockchain 规格: 选择器: 火柴标签: app:stellar 服务名称:星 副本:3份 模板: 元数据: 标签: app:stellar 规格: 初始化容器: -名称:init stellar 图片:恒星图片:版本 命令: -猛击 -“-c” - | set-ex #从pod序号索引生成配置。 [[`hostname`=~-([0-9]+)$]||退出1 序号=${BASH_重新匹配[1]} #将相应的conf.d文件从配置映射复制到emptyDir。 如果[$ordinal-等式0]];则 cp/mnt/config map/stellar0.cnf/mnt/conf.d/ elif[$ordinal-等式1]];然后 cp/mnt/config map/stellar1.cnf/mnt/conf.d/ 其他的 cp/mnt/config map/stellar2.cnf/mnt/conf.d/ fi 体积数量: -姓名:conf 挂载路径:/mnt/conf.d -名称:配置映射 装载路径:/mnt/config映射 容器: -名称:恒星 图片:恒星图片:版本 端口: -名称:恒星 集装箱港口: 体积数量: -姓名:conf
mountPath:/etc/stellar/conf.d这样你就可以有一个
ConfigMap
和多个键,每个键都是为你的一个复制品唯一指定的。你也可以使用
StatefulSet
initContainer
来部署你的POD来设置配置。这只是一个例子(你必须根据需要调整它):

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: stellar
  labels:
    app: stellar
data:
  stellar0.cnf: |
    NETWORK_PASSPHRASE="my private network"    
    NODE_SEED=<stellar0_private_key>    
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]    
    [QUORUM_SET]
    VALIDATORS=[ <stellar1_pub_key>, <stellar2_pub_key> ]

  stellar1.cnf: |

    NETWORK_PASSPHRASE="my private network"
    NODE_SEED=<stellar1_private_key>
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]

    [QUORUM_SET]
    VALIDATORS=[ <stellar0_pub_key>, <stellar2_pub_key> ]

  stellar2.cnf: |

    NETWORK_PASSPHRASE="my private network"
    NODE_SEED=<stellar2_private_key>
    KNOWN_PEERS=[
        "stellar-0",
        "stellar-1",
        "stellar-2"]

    [QUORUM_SET]
    VALIDATORS=[ <stellar0_pub_key>, <stellar1_pub_key> ]
apiVersion:v1 种类:配置地图 元数据: 名称:恒星 标签: app:stellar 数据: stellar0.cnf:| 网络\u密码短语=“我的专用网络” 节点_种子= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] stellar1.cnf:| 网络\u密码短语=“我的专用网络” 结籽= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] stellar2.cnf:| 网络\u密码短语=“我的专用网络” 结籽= 已知的同龄人=[ “恒星-0”, “恒星1号”, “恒星-2”] [法定人数] 验证程序=[,] 状态集:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: stellarblockchain
spec:
  selector:
    matchLabels:
      app: stellar
  serviceName: stellar
  replicas: 3
  template:
    metadata:
      labels:
        app: stellar
    spec:
      initContainers:
      - name: init-stellar
        image: stellar-image:version
        command:
        - bash
        - "-c"
        - |
          set -ex
          # Generate config from pod ordinal index.
          [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
          ordinal=${BASH_REMATCH[1]}
          # Copy appropriate conf.d files from config-map to emptyDir.
          if [[ $ordinal -eq 0 ]]; then
            cp /mnt/config-map/stellar0.cnf /mnt/conf.d/
          elif [[ $ordinal -eq 1 ]]; then
            cp /mnt/config-map/stellar1.cnf /mnt/conf.d/
          else
            cp /mnt/config-map/stellar2.cnf /mnt/conf.d/
          fi
        volumeMounts:
        - name: conf
          mountPath: /mnt/conf.d
        - name: config-map
          mountPath: /mnt/config-map

      containers:
      - name: stellar
        image: stellar-image:version
        ports:
        - name: stellar
          containerPort: <whatever port you need here>
        volumeMounts:
        - name: conf
          mountPath: /etc/stellar/conf.d <== wherever your config for stellar needs to be

     volumes:
     - name: conf
       emptyDir: {}
     - name: config-map
       configMap:
         name: stellar
apiVersion:apps/v1 种类:StatefulSet 元数据: 名称:stellarblockchain 规格: 选择器: 火柴标签: app:stellar 服务名称:星 副本:3份 模板: 元数据: 标签: app:stellar 规格: 初始化容器: -名称:init stellar 图片:恒星图片:版本 命令: -猛击 -“-c” - | set-ex #从pod序号索引生成配置。 [[`hostname`=~-([0-9]+)$]||退出1 序号=${BASH_重新匹配[1]} #将相应的conf.d文件从配置映射复制到emptyDir。