Doc*_*tor 5 kubernetes cilium kubespray cri-o
当使用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": []}
Run Code Online (Sandbox Code Playgroud)
有趣的部分
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"}
Run Code Online (Sandbox Code Playgroud)
--cri-socket在里面设置标志/var/lib/kubelet/kubeadm-flags.env: KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/crio/crio.sock --cri-socket=/var/run/crio/crio.sock"
Run Code Online (Sandbox Code Playgroud)
=> 没有区别
/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
Run Code Online (Sandbox Code Playgroud)
=> 它已经以criSocket标志结束了,所以没什么可做的......
--cri-socket到现有命令中,但失败并显示Unknow command --cri-socket现存的 :
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase`
Run Code Online (Sandbox Code Playgroud)
尝试过:
{% if kubeadm_version is version('v1.14.0', '>=') %}
init phase --crio socket /var/run/crio/crio.sock`
Run Code Online (Sandbox Code Playgroud)
看来问题来自于kubeadm init phase与标志不兼容的命令--crio-socket......(见第3点)
即使使用配置文件设置了正确的套接字(参见第 2 点),但也kubeadm init phase没有使用它。
任何想法将不胜感激;-)
thx
Aup*_*upr 13
这对我来说适用于多个 cri 套接字
kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock
Run Code Online (Sandbox Code Playgroud)
多cri初始化前的镜像拉取命令:
kubeadm config images pull --cri-socket=unix:///var/run/cri-dockerd.sock
Run Code Online (Sandbox Code Playgroud)
您可以从下表中选择 cri 套接字路径。请参阅此处的原始文档
| 运行 | Unix 域套接字的路径 |
|---|---|
| 容器d | unix:///var/run/containerd/containerd.sock |
| CRI-O | unix:///var/run/crio/crio.sock |
| Docker 引擎(使用 cri-dockerd) | unix:///var/run/cri-dockerd.sock |
我终于明白了!
\n\n最初的 kubespray 命令是:
\nkubeadm init phase kubeconfig admin --kubeconfig-dir {{ kube_config_dir }}/external_kubeconfig
\xe2\x9a\xa0\xef\xb8\x8f 看来该--kubeconfig-dir标志没有考虑 crio 套接字的数量。
所以我将行更改为:
\nkubeadm init phase kubeconfig admin --config /etc/kubernetes/kubeadm-config.yaml
对于有类似问题的人:
\n\n使其在主服务器上工作的 InitConfig 部分如下:
\n\napiVersion: kubeadm.k8s.io/v1beta2\nkind: InitConfiguration\nlocalAPIEndpoint:\n advertiseAddress: 10.10.3.15\n bindPort: 6443\ncertificateKey: 9063a1ccc9c5e926e02f245c06b8d9f2ff3c1eb2dafe5fbe2595ab4ab2d3eb1a\nnodeRegistration:\n name: p3kubemaster1\n taints:\n - effect: NoSchedule\n key: node-role.kubernetes.io/master\n criSocket: /var/run/crio/crio.sock\nRun Code Online (Sandbox Code Playgroud)\n\n在 kubespray 中,您必须更新第 57 行附近的文件roles/kubernetes/client/tasks/main.yml。
您必须注释初始--kubeconfig-dir部分并将其替换为 InitConfig 文件的路径。
/etc/kubernetes/kubeadm-config.yaml对我来说,它是由kubemaster 上的kubespray 生成的。检查您这边是否存在该文件,并且它在nodeRegistration部分中包含criSocket密钥。
| 归档时间: |
|
| 查看次数: |
20814 次 |
| 最近记录: |