0

我使用本指南在 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-securepod,因为那是我无法再遵循指南的地方。我像他们在指南中所做的那样尝试了:$ 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

知道如何从这里开始吗?

4

1 回答 1

0

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

如果您查看您发布的指南,它会继续描述如何部署cockroachdb-client-securepod。如果您要运行指向负载均衡器的工作负载,请执行以下操作:

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


更新

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

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

于 2021-01-29T23:35:35.893 回答