哪种Kubernetes模式适用于对等点配置略有不同的对等点场景?
我试图在kubernetes上运行私有的stellar区块链基础设施(不加入现有的公共或测试stellar网络),但我的问题可以推广到在kubernetes上运行任何对等服务的场景。因此,我将尝试以一种广义的方式解释我的问题(希望它能够给出适用于kubernetes上运行的任何类似拓扑的答案) 以下是场景: 我想运行3个对等点(kube术语:POD),它们能够以分散的方式相互通信,但问题在于每个对等点的配置略有不同。通常,配置如下所示(这是pod0的一个示例):哪种Kubernetes模式适用于对等点配置略有不同的对等点场景?,kubernetes,peer,stellar,Kubernetes,Peer,Stellar,我试图在kubernetes上运行私有的stellar区块链基础设施(不加入现有的公共或测试stellar网络),但我的问题可以推广到在kubernetes上运行任何对等服务的场景。因此,我将尝试以一种广义的方式解释我的问题(希望它能够给出适用于kubernetes上运行的任何类似拓扑的答案) 以下是场景: 我想运行3个对等点(kube术语:POD),它们能够以分散的方式相互通信,但问题在于每个对等点的配置略有不同。通常,配置如下所示(这是pod0的一个示例): NETWORK\u PASSPH
NETWORK\u PASSPHRASE=“我的专用网络”
结籽=
已知的同龄人=[
“恒星-0”,
“恒星1号”,
“恒星-2”]
[法定人数]
验证程序=[,]
问题在于每个吊舱都有不同的:
- 结籽
- 验证程序列表
- 为此配置创建配置映射
- 使用无头服务创建状态集(3个副本),以实现吊舱(stellar-0、stellar-1、stellar-2…等)之间的稳定可达性
- 为每个对等点创建单独的配置映射
- 使用服务创建状态集(1个副本)
感谢您,这样您就可以拥有一个带有多个键的
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。