Eu preciso excluir algumas chaves no meu cluster redis que só podem ser acessadas de uma máquina de salto implantada no cluster kubernetes.
Então, se eu souber a chave, posso excluí-la pelo seguinte comando sem problemas:
➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host DEL "the-key"
(interger) 1
Mas se eu quiser fazer isso em lote, ele dará a saída 0, o que significa que não foi excluído:
➜ 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
Eu sou muito novo sobre o uso do xargs
, e não posso dizer onde está errado.
Eu tentei depurá-lo com o seguinte comando, ele fornece todas as chaves sem problemas:
➜ 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
...
Espero que alguém possa me dar uma luz, desde já agradeço!
Eu acho que você deve remover a
kubectl
parte depoisxargs
de , assim:Perceber
xargs -L 1
paraxargs -i
, poisxargs -L 1
é para rodar no mac osx, e agora o aspas simples fazxargs
rodar no linux, então-L
não é reconhecido{}
é crítico, caso contrário você terá(error) CROSSSLOT Keys in request don't hash to the same slot