[root@control ansible]# ansible-playbook -i inventory k8s-deploy.yml PLAY [Deploy Kubernetes Cluster on openEuler] ************************************************************************* TASK [Gathering Facts] ************************************************************************************************ [WARNING]: Platform linux on host control is using the discovered Python interpreter at /usr/bin/python3, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. ok: [control] [WARNING]: Platform linux on host node02 is using the discovered Python interpreter at /usr/bin/python3, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. ok: [node02] [WARNING]: Platform linux on host node01 is using the discovered Python interpreter at /usr/bin/python3, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. ok: [node01] TASK [Install required packages] ************************************************************************************** fatal: [node02]: FAILED! => {"changed": false, "msg": "Failed to download metadata for repo 'docker-ce-stable': Cannot prepare internal mirrorlist: Cannot resolve path for: \"releasever/$\"", "rc": 1, "results": []} fatal: [control]: FAILED! => {"changed": false, "msg": "Failed to download metadata for repo 'docker-ce-stable': Cannot prepare internal mirrorlist: Cannot resolve path for: \"releasever/$\"", "rc": 1, "results": []} fatal: [node01]: FAILED! => {"changed": false, "msg": "Failed to download metadata for repo 'docker-ce-stable': Cannot prepare internal mirrorlist: Cannot resolve path for: \"releasever/$\"", "rc": 1, "results": []} PLAY RECAP ************************************************************************************************************ control : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 node01 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 node02 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 [root@control ansible]# cat k8s-deploy.yml --- - name: Deploy Kubernetes Cluster on openEuler hosts: k8s_cluster become: yes vars: kubernetes_version: "1.28.0" containerd_version: "1.6.21" tasks: - name: Install required packages dnf: name: - curl - wget - vim - socat - conntrack-tools - ipvsadm - docker state: present - name: Start and enable Docker service systemd: name: docker enabled: yes state: started - name: Disable Swap command: swapoff -a ignore_errors: yes - name: Remove Swap from /etc/fstab replace: path: /etc/fstab regexp: '^([^#].*?\sswap\s+sw\s+.*)$' replace: '# \1' - name: Load Kernel Modules modprobe: name: "{{ item }}" state: present loop: - br_netfilter - overlay - name: Install containerd dnf: name: "containerd.io-{{ containerd_version }}.el7.x86_64" state: present - name: Configure containerd copy: dest: /etc/containerd/config.toml content: | version = 2 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"] - name: Persist Kernel Modules copy: dest: /etc/modules-load.d/k8s.conf content: | br_netfilter overlay - name: Configure Sysctl copy: dest: /etc/sysctl.d/k8s.conf content: | net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 notify: Reload Sysctl - name: Add Kubernetes YUM Repo copy: dest: /etc/yum.repos.d/kubernetes.repo content: | [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg - name: Install Kubernetes components dnf: name: - kubelet-{{ kubernetes_version }} - kubeadm-{{ kubernetes_version }} - kubectl-{{ kubernetes_version }} state: present disable_gpg_check: yes - name: Enable kubelet systemd: name: kubelet state: started enabled: yes - name: Initialize Kubernetes Master (Control Node Only) command: kubeadm init --pod-network-cidr=192.168.0.0/16 when: inventory_hostname == "control" register: kubeadm_init - name: Save kubeadm join Command (Control Node Only) copy: dest: /root/kubeadm-join.sh content: | #!/bin/bash {{ kubeadm_init.stdout_lines[-1] }} mode: '0700' when: inventory_hostname == "control" - name: Get kubeadm join Command from Control Node (Worker Nodes Only) slurp: src: /root/kubeadm-join.sh register: kubeadm_join delegate_to: control when: inventory_hostname != "control" - name: Execute kubeadm join on Worker Nodes command: "{{ kubeadm_join.content | b64decode }}" when: inventory_hostname != "control" handlers: - name: Reload Sysctl command: sysctl --system [root@control ansible]#
时间: 2025-07-08 07:46:36 浏览: 18
### 问题分析
用户在使用 Ansible Playbook 部署 Kubernetes 集群时,在任务 `Install required packages` 中遇到 Docker 仓库配置错误。具体的错误信息为:
```
Failed to download metadata for repo 'docker-ce-stable': Cannot prepare internal mirrorlist: Cannot resolve path for releasever
```
此错误表明 YUM 源配置中存在路径解析失败的问题,主要原因是仓库配置文件中的 `$releasever` 和 `$basearch` 变量未被正确展开。在原始的 Playbook 中,`baseurl` 的值为:
```yaml
https://mirrors.aliyun.com/docker-ce/linux/centos/$ releasever/$ basearch/stable
```
其中,`$ releasever` 和 `$ basearch` 存在多余的空格,导致变量无法正确识别和替换。YUM 在尝试解析路径时会将其视为无效字符串,从而引发元数据下载失败的错误[^1]。
### 解决方案
要解决该问题,需要将 `baseurl` 中的变量写法更正为标准格式,即移除变量前后的空格,并确保其形式为 `$releasever` 和 `$basearch`。正确的配置如下:
```yaml
- name: Configure Docker CE repository (Aliyun Mirror)
block:
- name: Remove existing Docker repo
ansible.builtin.file:
path: /etc/yum.repos.d/docker-ce.repo
state: absent
- name: Add Aliyun Docker repo
ansible.builtin.yum_repository:
name: docker-ce-stable
description: Docker CE Stable - Aliyun
baseurl: https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
gpgcheck: yes
gpgkey: https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
enabled: yes
state: present
when: ansible_os_family == "RedHat"
```
此外,openEuler 系统虽然与 CentOS 兼容性较好,但在实际部署过程中仍需确认系统版本是否被 Docker CE 官方镜像支持。若不确定,可考虑手动验证仓库地址是否能够正常访问,或使用 `yum makecache` 命令强制刷新缓存以排查网络或本地缓存问题。
###
阅读全文
相关推荐


















