潮汐算子如何启动PD集群?

问题描述 投票:0回答:1

我最近在学习 Kubernetes Operator。部署etcd集群时,etcd-operator使用以下创建方法:

  1. 引导阶段:启动种子成员。在相应的启动参数中,选项
    --initial-cluster-state
    将被设置为
    new
  2. 横向扩展阶段:逐步创建新的etcd节点,并将它们一一加入到种子成员所在的集群中,直到集群的副本满足大小要求。在此过程中,选项
    --initial-cluster-state
    将被设置为
    existing
    ,并且相应的
    --initial-cluster
    选项将被配置。

我对 tidb-operator 也很感兴趣。于是,我查看了 tidb-operator 的部署代码。我很好奇 tidb-operator 是如何部署 pd 集群的。

func (pmm *pdMemberManager) getNewPDSetForTidbCluster(tc *v1alpha1.TidbCluster) (*apps.StatefulSet, error) {
    …
    vols := []corev1.Volume{
        annVolume,
        {Name: "config",
            VolumeSource: corev1.VolumeSource{
                ConfigMap: &corev1.ConfigMapVolumeSource{
                    LocalObjectReference: corev1.LocalObjectReference{
                        Name: pdConfigMap,
                    },
                    Items: []corev1.KeyToPath{{Key: "config-file", Path: "pd.toml"}},
                },
            },
        },
        {Name: "startup-script",
            VolumeSource: corev1.VolumeSource{
                ConfigMap: &corev1.ConfigMapVolumeSource{
                    LocalObjectReference: corev1.LocalObjectReference{
                        Name: pdConfigMap,
                    },
                    Items: []corev1.KeyToPath{{Key: "startup-script", Path: "pd_start_script.sh"}},
                },
            },
        },
    }
    …
}

我注意到,在部署 pd 集群时,tidb-operator 会将配置项保存在“/etc/pd/config”中,其中包括

—initial-cluster-state
选项。仅供参考:https://docs-archive.pingcap.com/zh/tidb/v7.0/pd-configuration-file#initial-cluster-state

因此,我有以下疑问:

  1. tidb-operator 也是采用和 etcd-operator 一样的部署方式来部署集群吗?
  2. 如果是这样,为什么要这样设计?我发现这种方法有以下缺点: A。这种部署方式本质上是通过成员资格变更从单个节点扩展到指定数量的节点。然而,在部署初期,当节点数量少于三个时,共识本身并不可靠。 b.对于启动多个节点,这种部署方法会花费更多时间,因为我需要等待成员身份更改完成。
  3. 如果 tidb-operator 也采用这种方式来部署,比如 PD 集群,设计上有哪些取舍?
kubernetes cloud operators tidb tidb-pd
1个回答
0
投票

以下是我所知道的:

  1. Operator 使用 startScript 启动 PD 流程,参见代码 https://github.com/pingcap/tidb-operator/blob/v1.5.1/pkg/manager/member/pd_member_manager.go#L900

  2. 在 pdStartScriptTplText 中,每个 PD 都会连接到 Discovery 来竞争 Leader(仅在 Bootstrap 阶段),参见 Discovery 代码 https://github.com/pingcap/tidb-operator/blob/v1.5.1/pkg/discovery/发现.go

    2.1 PD 获胜领导者竞选将使用“--initial-cluster”来初始化 PD 集群

    2.2 PD 失去领导者活动将使用“--join”加入 PD 集群

  3. PD 有内部 ETCD 来维持领导力,中文社区有中文博客图片见https://tidb.net/blog/66b475c0

    3.1 在 PD 集群本身中维持引导领导地位之后

© www.soinside.com 2019 - 2024. All rights reserved.