【问题标题】:CockroachDB distributed workload on all nodesCockroachDB 在所有节点上分布式工作负载
【发布时间】:2021-05-03 20:34:41
【问题描述】:

我使用本指南在 Kubernetes 上部署了 CockroachDB 集群:

https://github.com/cockroachlabs-field/kubernetes-examples/blob/master/SECURE.md

我用

部署了它
$ helm install k8crdb --set Secure.Enabled=true cockroachdb/cockroachdb --namespace=thesis-crdb

这是我用$ helm list --namespace=thesis-crdb 列出它时的样子

NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                  APP VERSION
k8crdb  thesis-crdb     1               2021-01-29 20:18:25.5710691 +0100 CET   deployed        cockroachdb-5.0.4      20.2.4

这是我用$ kubectl get all --namespace=thesis-crdb 列出它时的样子

NAME                                READY   STATUS      RESTARTS   AGE
pod/k8crdb-cockroachdb-0            1/1     Running     0          3h1m
pod/k8crdb-cockroachdb-1            1/1     Running     0          3h1m
pod/k8crdb-cockroachdb-2            1/1     Running     0          3h1m
pod/k8crdb-cockroachdb-init-j2h7t   0/1     Completed   0          3h1m

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)              AGE
service/k8crdb-cockroachdb          ClusterIP   None            <none>        26257/TCP,8080/TCP   3h1m
service/k8crdb-cockroachdb-public   ClusterIP   10.99.163.201   <none>        26257/TCP,8080/TCP   3h1m

NAME                                  READY   AGE
statefulset.apps/k8crdb-cockroachdb   3/3     3h1m

NAME                                COMPLETIONS   DURATION   AGE
job.batch/k8crdb-cockroachdb-init   1/1           33s        3h1m

现在我想模拟到这个集群的流量。首先,我通过以下方式访问 pod:$ kubectl exec -i -t -n thesis-crdb k8crdb-cockroachdb-0 -c db "--" sh -c "clear; (bash || ash || sh)"

这让我进入了第一个 pod/node。

我从这里开始工作

[root@k8crdb-cockroachdb-0 cockroach]# cockroach workload init movr 'postgresql://root@localhost:26257?sslmode=disable' 

然后我运行工作负载 5 分钟

[root@k8crdb-cockroachdb-0 cockroach]# cockroach workload run movr --duration=5m 'postgresql://root@localhost:26257?sslmode=disable' 

我知道我正在一个节点上运行工作负载,但我的表述是工作负载将分布在所有节点之间?因为当我使用 cockroachDB 控制台监控性能时,我发现只有第一个节点在完成所有工作,其他节点处于空闲状态。

如您所见,第二个(和第三个节点)根本没有任何工作负载。这只是控制台中的视觉故障吗?或者如何运行工作负载,使其在集群中的所有节点之间均匀分布?

-更新-

是的,很高兴您提出了cockroachdb-client-secure pod,因为那是我无法再遵循指南的地方。我按照他们在指南中所做的那样尝试:$ curl https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/client-secure.yaml | sed -e 's/serviceAccountName\: cockroachdb/serviceAccountName\: k8crdb-cockroachdb/g' | kubectl create -f -

但是它会抛出这个错误:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1638  100  1638    0     0   4136      0 --:--:-- --:--:-- --:--:--  4146
Error from server (Forbidden): error when creating "STDIN": pods "cockroachdb-client-secure" is forbidden: error looking up service account default/k8crdb-cockroachdb: serviceaccount "k8crdb-cockroachdb" not found

我也不知道我的证书是否已获得批准,因为当我尝试这样做时: $ kubectl get csr k8crdb-cockroachdb-0 --namespace=thesis-crdb

我抛出这个:

Error from server (NotFound): certificatesigningrequests.certificates.k8s.io "k8crdb-cockroachdb-0" not found

当我尝试批准证书时:$ kubectl certificate approve k8crdb-cockroachdb-0 --namespace=thesis-crdb

它抛出:

Error from server (NotFound): certificatesigningrequests.certificates.k8s.io "k8crdb-cockroachdb-0" not found

知道如何从这里开始吗?

【问题讨论】:

    标签: kubernetes cockroachdb traffic-simulation


    【解决方案1】:

    这不是故障。仅当客户端连接到节点并发出 SQL 语句时,节点才会接收 SQL 流量。您似乎正在通过登录其中一个 cockroach pod 并指示它连接到其本地端口上的该 pod 来运行工作负载。这意味着只有该 pod 将接收查询。 cockroach workload 子命令采用任意数量的 pgurl 字符串,并将平衡所有这些字符串的负载。另请注意,k8crdb-cockroachdb-public 代表所有 o 的负载均衡器

    如果您查看您发布的指南,它会继续描述如何部署 cockroachdb-client-secure pod。如果您要运行指向负载均衡器的工作负载,则类似于:

    'postgres://root@k8crdb-cockroachdb-public?sslcert=cockroach-certs%2Fclient.root.crt&amp;sslkey=cockroach-certs%2Fclient.root.key&amp;sslrootcert=cockroach-certs%2Fca.crt&amp;sslmode=verify-full'


    更新

    我不是这里的 k8s 专家,但我认为您创建客户端 pod 的问题与命名空间有关。目前假设所有内容都在默认命名空间中,但您似乎在--namespace=thesis-crdb 中工作。考虑将命名空间标志添加到kubectl create -f - 命令。或者,可能考虑为会话设置命名空间:

    kubectl config set-context --current --namespace=thesis-crdb

    【讨论】:

    • 更新了我关于 cockroachdb-client-secure pod 的帖子
    • 是的,我尝试使用curl https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/client-secure.yaml | sed -e 's/serviceAccountName\: cockroachdb/serviceAccountName\: pod/k8crdb-cockroachdb/g' | kubectl create -f - --namespace=thesis-crdb,但结果相同:(
    猜你喜欢
    • 2015-04-04
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2021-09-23
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多