用Kubespray安装kubernetes时是否可以只安装master?

Is it possible to install only master when installing kubernetes with Kubespray?

我正在尝试使用 kubespray 安装 kubernetes。

我已经成功配置master和worker,但是我想知道是否可以只安装master而没有worker。在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是否真的是master节点:

# 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 污点,表明它确实是主节点。