问题
一个需求:需要写一个shell脚本部署Zookeeper,并且在脚本里需要去对zk的 /节点进行digest权限配置。
尝试了以下命令:
kubectl exec -ti podName -n namespace -- /bin/sh&&zkCli.sh&&setAcl digest:username:password
发现执行后只执行了zkCli.sh命令,后面的setAcl命令并未执行。
后来猜测,执行的命令需要在pod中可以识别才会执行,因此无法通过该命令直接执行setAcl
解决:
- 将命令拆分后,最关键的一步就是如何通过kubectl exec 命令去执行 setAcl命令。
- 正常情况下,setAcl是在zkCli.sh连接后进行命令。此时有交互,因此无法通过一个shell命令去执行。需要用其他方法。
- 通过查阅博客,发现在非k8s环境下,可以通过下面的命令去获取到根节点的结构
zkCli.sh -server 127.0.0.1 ls /
尝试通过kubectl在之心zkCli.sh添加命令参数,去执行
kubectl exec -ti podName -n namespace -- zkCli.sh -server 127.0.0.1 ls /
执行后发现可以打印出节点信息。那么可以得出,在zkCli.sh可以通过添加参数命令的形式,以免交互方式执行命令。
kubectl exec -ti podName -n namespace -- /bin/sh&&zkCli.sh -server 127.0.0.1 \
setAcl / digest:username:BASE64(SHA1(password)):cdrwa
其他命令
ZooKeeper -server host:port -client-configuration properties-file cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b|-N|-B] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b|-N|-B val path
stat [-w] path
sync path
version
whoami
本文介绍如何在Kubernetes环境中使用Shell脚本部署Zookeeper,并实现通过非交互方式设置Zookeeper的节点权限。通过详细步骤说明如何利用zkCli.sh命令行工具配合kubectl命令执行特定的setAcl命令。
1万+

被折叠的 条评论
为什么被折叠?



