问题描述
我正在尝试使用 kubespray 安装 kubernetes。
我已经成功配置了master和worker,但是我想知道是否只能安装没有worker的master。在 inventory.ini
中,仅指定了 master 的主机名并继续安装,并显示以下失败消息。
有没有办法只安装 master ,不包括 kubespray 的 worker? 帮助!
failed: [node1] (item=kube-node) => {
"ansible_loop_var": "item","assertion": "groups.get('kube-node')","changed": false,"evaluated_to": false,"item": "kube-node","msg": "Assertion failed"
}
解决方法
您可以尝试使用 ignore_assert_errors=yes
选项,我知道这听起来像是一种解决方法,但它似乎按预期工作。
我不确定 kubespray documentation 中是否只涉及安装单个主节点。
我将创建一个简单的例子来说明它是如何工作的。
假设我有一个实例,我希望它成为 Kubernetes 主节点:
# ifconfig ens4
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
inet 10.186.15.206 netmask 255.255.255.255 broadcast 10.186.15.206
首先,我准备了库存文件:
# cat inventory/mycluster/hosts.yaml
all:
hosts:
node1:
ansible_host: 10.186.15.206
ip: 10.186.15.206
access_ip: 10.186.15.206
children:
kube_control_plane:
hosts:
node1:
kube-node:
hosts: {}
etcd:
hosts:
node1:
k8s-cluster:
children:
kube_control_plane:
kube-node:
calico-rr:
hosts: {}
然后我用 Ansible Playbook 部署了 Kubespray:
注意:我使用了 -e ignore_assert_errors=yes
选项。
# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml -e ignore_assert_errors=yes
...
PLAY RECAP ***********************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node1 : ok=555 changed=121 unreachable=0 failed=0 skipped=1128 rescued=0 ignored=2
安装成功后,我们可以检查node1
是否真的是主节点:
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,master 4m30s v1.20.6
# kubectl describe nodes node1 | grep -i taint
Taints: node-role.kubernetes.io/master:NoSchedule
如您所见,节点 node1
有一个 node-role.kubernetes.io/master:NoSchedule
污点,表明它确实是主节点。