【问题标题】:how kubernetes create deployment replica sets nameKubernetes 如何创建部署副本集名称
【发布时间】:2017-09-19 19:00:11
【问题描述】:

以下是我的 kubernetes 环境中由 deployments 创建的所有副本集(使用 deployment 时,它会首先创建 replica sets):

[root@master24 004-prometheus]# kubectl get rs --all-namespaces
NAMESPACE                  NAME                                  DESIRED   CURRENT   READY     AGE
    dev                        test-ddd-1-0-4129700023               3         3         3         6d
    dev                        test111-1-0-2606576459                3         3         3         6d
    dev                        test2-1-0-568340644                   3         3         0         6d
    kube-system                alertmanager-2876254624               0         0         0         12d
    kube-system                alertmanager-34609585                 0         0         0         31d
    kube-system                alertmanager-646055916                1         1         1         12d
    kube-system                container-terminal-2048074043         1         1         1         26d
    kube-system                container-terminal-2798068035         0         0         0         26d
    kube-system                default-http-backend-2282004791       1         1         1         99d
    kube-system                elastic-hq-1088064035                 0         0         0         62d
    kube-system                elastic-hq-143297398                  1         1         1         32d
    kube-system                elastic-hq-2334099411                 0         0         0         62d
    kube-system                elastic-hq-2453506004                 0         0         0         62d
    kube-system                elastic-hq-963545625                  0         0         0         35d
    kube-system                grafana-2729867605                    1         1         1         32d
    kube-system                kibana-logging-2271207004             1         1         1         39d
    kube-system                kibana-logging-3117667162             0         0         0         65d
    kube-system                kube-dns-1277622866                   1         1         1         103d
    kube-system                kube-dns-418314620                    0         0         0         103d
    kube-system                kube-ops-view-2627512969              1         1         1         62d
    kube-system                kube-state-metrics-290271031          2         2         2         31d
    kube-system                kubernetes-dashboard-102631441        0         0         0         103d
    kube-system                kubernetes-dashboard-2251164715       0         0         0         102d
    kube-system                kubernetes-dashboard-2628062973       1         1         1         25d
    kube-system                kubernetes-dashboard-3038119623       0         0         0         102d
    kube-system                kubernetes-dashboard-4259055596       0         0         0         40d
    kube-system                kubernetes-dashboard-849151901        0         0         0         103d
    kube-system                nginx-ingress-controller-1663470174   0         0         0         65d
    kube-system                nginx-ingress-controller-2772479350   0         0         0         64d
    kube-system                nginx-ingress-controller-3812017923   4         4         4         32d
    kube-system                nginx-ingress-controller-878021172    0         0         0         99d
    kube-system                prometheus-core-1049380509            0         0         0         11d
    kube-system                prometheus-core-1057044748            0         0         0         11d
    kube-system                prometheus-core-124082880             0         0         0         12d
    kube-system                prometheus-core-1274300653            0         0         0         32d
    kube-system                prometheus-core-1496270586            0         0         0         10d
    kube-system                prometheus-core-2953594474            0         0         0         10d
    kube-system                prometheus-core-3816572233            1         1         1         10d
    kube-system                prometheus-core-87115933              0         0         0         22d
    kube-system                prometheus-core-87378077              0         0         0         31d
    kube-system                redmine-sqlite-1134748302             0         0         0         31d
    kube-system                redmine-sqlite-1236657579             1         1         1         31d
    kube-system                redmine-sqlite-2005852822             0         0         0         31d
    kube-system                redmine-sqlite-3063145196             0         0         0         31d
    kube-system                sonarqube-3729821934                  0         0         0         31d
    kube-system                sonarqube-3857878650                  0         0         0         31d
    kube-system                sonarqube-3908538607                  1         1         1         30d

由于某种原因,我需要分析 rs 的名称,并且所有 rs 的名称最终都包含一些随机数字,但数字的数量并不固定(可能是 8、9 或 10)。所以问题是:

  1. 数字的个数是否始终是 8、9 或 10,或者可以是 5 或 15 之类的任何数字?

  2. 在哪里可以找到这个的命名规则?

环境 Kubernetes 1.6.8

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    如果我找到了正确的行,那么这里会生成一个 ReplicaSet 的名称: https://github.com/kubernetes/kubernetes/blob/16670f1a95a61434f8d6c96596a3c541b01fb8aa/pkg/controller/deployment/sync.go#L299

    podTemplateSpecHash := fmt.Sprintf("%d", controller.ComputeHash(&newRSTemplate, d.Status.CollisionCount))
    //...
    Name: d.Name + "-" + rand.SafeEncodeString(podTemplateSpecHash),
    

    d 是一个部署。

    随机方法是这样实现的:

    // SafeEncodeString encodes s using the same characters as rand.String. This reduces the chances of bad words and
    // ensures that strings generated from hash functions appear consistent throughout the API.
    func SafeEncodeString(s string) string {
        r := make([]rune, len(s))
        for i, b := range []rune(s) {
            r[i] = alphanums[(int(b) % len(alphanums))]
        }
        return string(r)
    }
    

    在我看来,随机数的长度是基于 podTemplateSpecHash 的长度,它是 uint32 类型的值。这是哈希函数的方法签名:

    func ComputeHash(template *v1.PodTemplateSpec, collisionCount *int32) uint32 {...}
    

    因此最大位数应为 10。

    【讨论】:

    • 感谢您的回复。从golang.org/pkg/builtin 我看到这个“uint32 是所有无符号 32 位整数的集合。范围:0 到 4294967295。”这是否意味着最小位数为 0 ?
    • 我认为最小位数是 1。即使值 i 为零,您也至少有一位。
    猜你喜欢
    • 2020-11-30
    • 2019-01-20
    • 2018-09-14
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多