k8s常见错误问题整理

问题1 

 [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR Port-10251]: Port 10251 is in use
        [ERROR Port-10252]: Port 10252 is in use
        [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
        [ERROR Port-10250]: Port 10250 is in use

  解决方法:

echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/rc.local \
&& echo 1 > /proc/sys/net/ipv4/ip_forward \
&& chmod +x /etc/rc.d/rc.local \
&& ll /etc/rc.d/rc.local \
&& cat /proc/sys/net/ipv4/ip_forward

问题2 

[root@k8s-master ~]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决方法: 

关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld

关闭swap
$ swapoff -a $ 临时
$ vim /etc/fstab $ 永久

问题3

Unable to update cni config: No networks found in /etc/cni/net.d

 解决方法: 

安装flannel
$ kubectl apply -f kube-flannel.yml

问题4  重启master后

k8s-master   NotReady   master   26h    v1.15.0

解决方法: 

$ systemctl restart kubelet

 

<think>好的,我现在需要帮助用户了解如何在CentOS上使用Ansible搭建Kubernetes集群,并将节点加入集群。首先,我要回忆一下Ansible和Kubernetes的基本知识,以及它们结合使用的常见方法。 首先,Ansible是一个自动化工具,可以通过playbook来批量管理多台服务器。Kubernetes集群的搭建通常涉及master节点和worker节点的配置,包括安装docker、kubeadm、kubelet等组件,然后初始化master,再让worker节点加入。 用户提供的引用中有几个相关的命令,比如使用Ansible批量安装docker的shell命令,这可能是在安装前的准备工作。还有关于kubelet可能出现的错误,比如没有运行或者配置问题,这提示在安装过程中需要检查kubelet的状态和配置。此外,设置代理和更新kube-proxy的命令可能是在集群配置后的步骤。 接下来,我需要整理搭建Kubernetes集群的步骤,并考虑如何用Ansible实现自动化。可能的步骤包括: 1. 准备环境:所有节点需要满足Kubernetes的要求,比如关闭swap、配置防火墙、设置主机名和hosts文件等。 2. 安装Docker:所有节点都需要安装容器运行时,这里使用Docker。 3. 安装Kubernetes组件:kubeadm、kubectl、kubelet。 4. 初始化Master节点。 5. 加入Worker节点。 6. 配置网络插件,比如Calico。 7. 验证集群状态。 现在要思考如何将这些步骤转化为Ansible的任务。例如,使用Ansible的模块来执行shell命令、复制配置文件、管理服务等。需要编写playbook,可能分为多个角色,比如common(基础配置)、docker、k8s-master、k8s-worker等。 在引用中提到的批量安装docker的命令,可以用Ansible的shell模块执行,但更推荐使用yum模块来安装rpm包。另外,用户引用中的错误提示说明在安装后需要确保kubelet服务正常运行,可能需要使用systemd模块来启用和启动服务。 初始化master节点后,会生成加入集群的命令,需要将这个命令捕获并传递给worker节点执行,这可以通过Ansible的register模块获取输出,然后提取token和ca证书哈希,再在worker节点的playbook中使用。 网络插件的安装可能需要使用kubectl apply命令,可以在master节点上执行,可以通过Ansible的shell模块调用。 可能遇到的问题包括:节点间的通信问题,需要正确配置防火墙;kubelet服务启动失败,需要检查cgroups配置;加入节点时的token过期,需要生成新的token或者调整参数。 用户提供的引用[2]提到kubelet可能由于配置错误或cgroups禁用而不健康,所以在配置过程中需要确保/etc/sysconfig/kubelet中的配置正确,比如添加--cgroup-driver=systemd参数。 引用[4]中的kubectl patch命令用于更新kube-proxy的配置,这可能是在集群维护时的操作,但在初始搭建时可能不需要,不过可以作为后续优化的参考。 现在需要将这些思考整理成一个步骤清晰的指南,结合Ansible playbook的示例,并注意引用相关的参考内容。同时,要生成相关问题,帮助用户进一步学习。</think>### 在CentOS上使用Ansible搭建Kubernetes集群的步骤 #### 1. 环境准备 - **所有节点**需满足以下条件: - CentOS 7/8系统 - 禁用Swap:`swapoff -a` 并注释`/etc/fstab`中的swap行 - 关闭SELinux:`setenforce 0`,修改`/etc/selinux/config`为`disabled` - 开放防火墙端口(如6443、2379-2380等)[^2] - 配置主机名解析:在`/etc/hosts`中添加节点IP与主机名映射 #### 2. 编写Ansible Playbook 创建目录结构: ```bash mkdir -p k8s-ansible/{roles,group_vars} cd k8s-ansible ``` 创建`ansible.cfg`和`hosts`文件: ```ini # ansible.cfg [defaults] inventory = hosts remote_user = root ``` ```ini # hosts [k8s_cluster] k8s-master ansible_host=192.168.1.10 k8s-node1 ansible_host=192.168.1.11 k8s-node2 ansible_host=192.168.1.12 ``` #### 3. 安装Docker(使用Ansible批量操作) ```yaml # roles/docker/tasks/main.yml - name: 安装依赖包 yum: name: yum-utils device-mapper-persistent-data lvm2 state: present - name: 添加Docker仓库 get_url: url: https://download.docker.com/linux/centos/docker-ce.repo dest: /etc/yum.repos.d/docker-ce.repo - name: 安装Docker yum: name: docker-ce-19.03.* state: present - name: 启动并启用Docker服务 systemd: name: docker enabled: yes state: started ``` #### 4. 安装Kubernetes组件 ```yaml # roles/k8s-base/tasks/main.yml - name: 添加Kubernetes仓库 yum_repository: name: kubernetes description: Kubernetes Repo baseurl: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck: no enabled: yes - name: 安装kubeadm/kubelet/kubectl yum: name: ["kubelet-1.23.0", "kubectl-1.23.0", "kubeadm-1.23.0"] state: present - name: 配置cgroup驱动 lineinfile: path: /etc/sysconfig/kubelet line: 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' create: yes - name: 启用kubelet服务 systemd: name: kubelet enabled: yes state: started ``` #### 5. 初始化Master节点 ```yaml # roles/k8s-master/tasks/main.yml - name: 初始化控制平面 shell: | kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.10 register: kubeadm_init args: chdir: $HOME creates: /etc/kubernetes/admin.conf - name: 保存join命令 set_fact: join_command: "{{ kubeadm_init.stdout | regex_search('kubeadm join.*') }}" - name: 配置kubectl copy: src: /etc/kubernetes/admin.conf dest: /root/.kube/config remote_src: yes ``` #### 6. 节点加入集群 ```yaml # roles/k8s-node/tasks/main.yml - name: 执行加入集群命令 shell: "{{ hostvars['k8s-master']['join_command'] }}" when: inventory_hostname != 'k8s-master' ``` #### 7. 部署网络插件(Calico) ```yaml - name: 安装Calico网络 shell: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml delegate_to: k8s-master ``` #### 8. 验证集群状态 ```bash ansible k8s-master -m shell -a 'kubectl get nodes' ``` ### 完整Playbook示例 ```yaml # site.yml - hosts: all roles: - docker - k8s-base - hosts: k8s-master roles: - k8s-master - hosts: k8s-node* roles: - k8s-node - hosts: k8s-master tasks: - name: 部署网络插件 shell: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` 执行命令: ```bash ansible-playbook site.yml ``` ### 关键配置说明 1. 使用阿里云镜像加速组件下载(避免国内网络问题) 2. 配置`--cgroup-driver=systemd`保持与Docker一致 3. Calico网络插件需要匹配`--pod-network-cidr`参数 4. 通过`delegate_to`在master节点执行kubectl命令
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值