Kubespray 失败 "Found multiple CRI sockets, please use --cri-socket to select one"
Kubespray fails with "Found multiple CRI sockets, please use --cri-socket to select one"
遇到问题
当使用 Kubespray、CRI-O 和 Cilium 部署集群时,我得到一个关于有多个 CRI 套接字可供选择的错误。
完全错误
fatal: [p3kubemaster1]: FAILED! => {"changed": true, "cmd": " mkdir -p /etc/kubernetes/external_kubeconfig && /usr/local/bin/kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes/external_kubeconfig --cert-dir /etc/kubernetes/ssl --apiserver-advertise-address 10.10.3.15 --apiserver-bind-port 6443 >/dev/null && cat /etc/kubernetes/external_kubeconfig/admin.conf && rm -rf /etc/kubernetes/external_kubeconfig ", "delta": "0:00:00.028808", "end": "2019-09-02 13:01:11.472480", "msg": "non-zero return code", "rc": 1, "start": "2019-09-02 13:01:11.443672", "stderr": "Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock", "stderr_lines": ["Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock"], "stdout": "", "stdout_lines": []}
有趣的部分
kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes/external_kubeconfig [...] >/dev/null,"stderr": "Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock"}
我试过的
- 1) 我尝试在
/var/lib/kubelet/kubeadm-flags.env
中设置 --cri-socket
标志:
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/crio/crio.sock --cri-socket=/var/run/crio/crio.sock"
=> 没有区别
- 2) 我检查了
/etc/kubernetes/kubeadm-config.yaml
但它已经包含以下部分 :
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.10.3.15
bindPort: 6443
certificateKey: 9063a1ccc9c5e926e02f245c06b8d9f2ff3xxxxxxxxxxxx
nodeRegistration:
name: p3kubemaster1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
criSocket: /var/run/crio/crio.sock
=> 它已经以 criSocket
标志结束,因此无事可做...
- 3) 试图编辑 ansible 脚本以将
--cri-socket
添加到现有命令,但失败并显示 Unknow command --cri-socket
现有:
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase`
尝试过:
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase --crio socket /var/run/crio/crio.sock`
理论
问题似乎出在命令 kubeadm init phase
上,它与 --crio-socket
标志不兼容...(见第 3 点)
即使使用配置文件设置了正确的套接字(参见第 2 点),kubeadm init phase
也没有使用它。
如有任何想法,我们将不胜感激 ;-)
谢谢
我做了一些研究,发现了 this github 话题。
这让我想到了另一个 here。
这似乎是一个 kubeadm
问题,该问题已得到修复,因此该解决方案在 v1.15 中可用
您能否升级到该版本(根据我处理过的两个问题,我不确定您使用的是哪个版本),看看问题是否仍然存在?
我终于明白了!
最初的 kubespray 命令是:
kubeadm init phase kubeconfig admin --kubeconfig-dir {{ kube_config_dir }}/external_kubeconfig
⚠️ --kubeconfig-dir
标志似乎没有考虑到 crio 插座的数量。
所以我将行更改为:
kubeadm init phase kubeconfig admin --config /etc/kubernetes/kubeadm-config.yaml
遇到类似问题的人:
使它在 master 上工作的 InitConfig 部分如下:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.10.3.15
bindPort: 6443
certificateKey: 9063a1ccc9c5e926e02f245c06b8d9f2ff3c1eb2dafe5fbe2595ab4ab2d3eb1a
nodeRegistration:
name: p3kubemaster1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
criSocket: /var/run/crio/crio.sock
在 kubespray 中,您必须在第 57 行附近更新文件 roles/kubernetes/client/tasks/main.yml
。
您必须注释初始 --kubeconfig-dir
部分并将其替换为 InitConfig 文件的路径。
对我来说,它是由 kubespray 在 /etc/kubernetes/kubeadm-config.yaml
在 kube master 上生成的。检查此文件是否存在于您这边,并且它在 nodeRegistration 部分中包含 criSocket 密钥。
遇到问题
当使用 Kubespray、CRI-O 和 Cilium 部署集群时,我得到一个关于有多个 CRI 套接字可供选择的错误。
完全错误
fatal: [p3kubemaster1]: FAILED! => {"changed": true, "cmd": " mkdir -p /etc/kubernetes/external_kubeconfig && /usr/local/bin/kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes/external_kubeconfig --cert-dir /etc/kubernetes/ssl --apiserver-advertise-address 10.10.3.15 --apiserver-bind-port 6443 >/dev/null && cat /etc/kubernetes/external_kubeconfig/admin.conf && rm -rf /etc/kubernetes/external_kubeconfig ", "delta": "0:00:00.028808", "end": "2019-09-02 13:01:11.472480", "msg": "non-zero return code", "rc": 1, "start": "2019-09-02 13:01:11.443672", "stderr": "Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock", "stderr_lines": ["Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock"], "stdout": "", "stdout_lines": []}
有趣的部分
kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes/external_kubeconfig [...] >/dev/null,"stderr": "Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock"}
我试过的
- 1) 我尝试在
/var/lib/kubelet/kubeadm-flags.env
中设置--cri-socket
标志:
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/crio/crio.sock --cri-socket=/var/run/crio/crio.sock"
=> 没有区别
- 2) 我检查了
/etc/kubernetes/kubeadm-config.yaml
但它已经包含以下部分 :
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.10.3.15
bindPort: 6443
certificateKey: 9063a1ccc9c5e926e02f245c06b8d9f2ff3xxxxxxxxxxxx
nodeRegistration:
name: p3kubemaster1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
criSocket: /var/run/crio/crio.sock
=> 它已经以 criSocket
标志结束,因此无事可做...
- 3) 试图编辑 ansible 脚本以将
--cri-socket
添加到现有命令,但失败并显示Unknow command --cri-socket
现有:
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase`
尝试过:
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase --crio socket /var/run/crio/crio.sock`
理论
问题似乎出在命令 kubeadm init phase
上,它与 --crio-socket
标志不兼容...(见第 3 点)
即使使用配置文件设置了正确的套接字(参见第 2 点),kubeadm init phase
也没有使用它。
如有任何想法,我们将不胜感激 ;-)
谢谢
我做了一些研究,发现了 this github 话题。
这让我想到了另一个 here。
这似乎是一个 kubeadm
问题,该问题已得到修复,因此该解决方案在 v1.15 中可用
您能否升级到该版本(根据我处理过的两个问题,我不确定您使用的是哪个版本),看看问题是否仍然存在?
我终于明白了!
最初的 kubespray 命令是:
kubeadm init phase kubeconfig admin --kubeconfig-dir {{ kube_config_dir }}/external_kubeconfig
⚠️ --kubeconfig-dir
标志似乎没有考虑到 crio 插座的数量。
所以我将行更改为:
kubeadm init phase kubeconfig admin --config /etc/kubernetes/kubeadm-config.yaml
遇到类似问题的人:
使它在 master 上工作的 InitConfig 部分如下:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.10.3.15
bindPort: 6443
certificateKey: 9063a1ccc9c5e926e02f245c06b8d9f2ff3c1eb2dafe5fbe2595ab4ab2d3eb1a
nodeRegistration:
name: p3kubemaster1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
criSocket: /var/run/crio/crio.sock
在 kubespray 中,您必须在第 57 行附近更新文件 roles/kubernetes/client/tasks/main.yml
。
您必须注释初始 --kubeconfig-dir
部分并将其替换为 InitConfig 文件的路径。
对我来说,它是由 kubespray 在 /etc/kubernetes/kubeadm-config.yaml
在 kube master 上生成的。检查此文件是否存在于您这边,并且它在 nodeRegistration 部分中包含 criSocket 密钥。