首页 > 解决方案 > 使用 Kubespray 安装 kubernetes 时是否可以只安装 master?

问题描述

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

我已经成功配置了master和worker,但是我想知道是否只能安装没有worker的master。在inventory.ini中,仅指定了 master 的主机名并继续安装,并显示以下失败消息。

有没有办法用 kubespray 只安装 master,不包括 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"
}

标签: kubernetesansiblekubespray

解决方案


您可以尝试使用该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=yesoption。

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


推荐阅读