您可以尝试使用该ignore_assert_errors=yes
选项,我知道这听起来像是一种解决方法,但它似乎可以按预期工作。我不确定kubespray 文档中的某处是否涵盖了仅安装单个主节点。
我将创建一个简单的示例来说明它是如何工作的。
假设我有一个实例,我希望它成为 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
option。
# 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
污点,表明它确实是主节点。