如何从本地机器以及通过 kubernetes 集群内的跳转机器批量删除 redis 键?

如何从本地机器以及通过 kubernetes 集群内的跳转机器批量删除 redis 键?

我需要删除我的 redis 集群中的一些键,这些键只能从部署在 kubernetes 集群中的跳转机访问。

所以如果我知道密钥,我可以通过以下命令毫无问题地删除它:

➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host DEL "the-key"
(interger) 1

但如果我想批量执行则它会输出 0,这意味着未删除:

➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -L 1 kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host -c DEL

Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0

我对使用还很陌生xargs,我不知道哪里出了问题。

我尝试使用以下命令对其进行调试,它毫无问题地给出了所有键:

➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -L 1 echo

the-key-pattern-1
the-key-pattern-2
the-key-pattern-3
...

希望有人可以阐明这一点,提前谢谢!

答案1

我认为你应该删除kubectl后面的部分xargs,如下所示:

kubectl exec -it jump-machine -- bash -c '/usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -i /usr/local/bin/redis-cli -c -h redis-cluster-host DEL {}'

注意

  1. 单引号至关重要
  2. 更改为xargs -L 1xargs -i因为xargs -L 1是在 mac osx 上运行的,而现在单引号使得xargs在 linux 上运行,因此-L无法识别
  3. {}至关重要,否则你会得到(error) CROSSSLOT Keys in request don't hash to the same slot

相关内容