自从卸载了kubord之后,k8s集群开始出现polkit问题,无论你启动或者重启任何服务都会出现如下错误。(目前也无法证实与前者直接关系,反正暂时不再用了)
1 2 |
Redirecting to /bin/systemctl restart kube-calico.service Authorization not available. Check if polkit service is running or see debug message for more information. |
先了解一下polkit是什么
1 2 3 |
polkit 是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯:控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程。 Polkit 在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统。和 sudo 等程序不同,Polkit 并没有赋予进程完全的 root 权限,而是通过一个集中的策略系统进行更精细的授权。 Polkit 定义出一系列操作,例如运行 GParted, 并将用户按照群组或用户名进行划分,例如 wheel 群组用户。了解linux 权限, 然后定义每个操作是否可以由某些用户执行,执行操作前是否需要一些额外的确认,例如通过输入密码确认用户是不是属于某个群组。 |
排查:
1 |
service polkit status |

PolicyKit无法启动,并出现错误:polkit.service:主进程已退出,代码已退出,状态为1 / FAILURE
错误原因:
当systemd 启动了这个服务的时候policykit-1的postinst杀掉了polkit的守护进程。在RHEL,CentOS,ubuntu,debain系统上均可以看到相关bug报告反馈。
解决办法:
1.确保存在polkitd系统用户和组
将以下2个复合命令复制/粘贴到根终端以检查并有条件地创建用户/组
1 2 |
getent group polkitd >/dev/null && echo -e "\e[1;32mpolkitd group already exists\e[0m" || { groupadd -r polkitd && echo -e "\e[1;33mAdded missing polkitd group\e[0m" || echo -e "\e[1;31mAdding polkitd group FAILED\e[0m"; } getent passwd polkitd >/dev/null && echo -e "\e[1;32mpolkitd user already exists\e[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd && echo -e "\e[1;33mAdded missing polkitd user\e[0m" || echo -e "\e[1;31mAdding polkitd user FAILED\e[0m"; } |
2.重置polkit和polkit-pkla-compat软件包提供的所有文件的权限和用户/组所有权
将以下compound-command复制/粘贴到根终端,以检查并有条件地重置用户/组权限和所有权
1 |
rpm -Va polkit\* && echo -e "\e[1;32mpolkit* rpm verification passed\e[0m" || { echo -e "\e[1;33mResetting polkit* rpm user/group ownership & perms\e[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; } |
3. 重新启动计算机,以确保所有更改都生效并且polkit已重新连接到dbus
1 |
shutdown -r now |
完整过程

重启后再次restart某个应用程序,发现不会再报错了

- 本文固定链接: https://www.yoyoask.com/?p=4347
- 转载请注明: shooter 于 SHOOTER 发表