活动介绍

**Centos7 yum部署单机kubernetes集群**详细步骤,避坑

时间: 2025-07-29 18:22:09 浏览: 1
<think>我们正在CentOS 7上使用yum部署单节点Kubernetes集群。注意:单节点集群通常用于开发和测试,不适合生产环境。 步骤概述: 1. 准备环境(系统设置,禁用SELinux和防火墙,配置主机名和hosts文件) 2. 安装Docker(Kubernetes的容器运行时) 3. 安装kubeadm, kubelet, kubectl 4. 初始化Kubernetes集群(使用kubeadm init) 5. 配置kubectl(普通用户权限) 6. 安装网络插件(例如Calico或Flannel) 注意:由于Kubernetes版本更新较快,请根据实际情况调整版本号。这里我们以1.23版本为例(因为1.23是一个相对稳定的版本,且与CentOS 7兼容性较好)。如果使用其他版本,注意替换命令中的版本号。 详细步骤: ### 1. 准备环境 #### 1.1 关闭SELinux ```bash sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` #### 1.2 关闭防火墙 ```bash sudo systemctl stop firewalld sudo systemctl disable firewalld ``` #### 1.3 禁用交换分区(swap) Kubernetes要求关闭交换分区以确保kubelet正常工作。 ```bash sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab ``` #### 1.4 配置主机名和hosts文件 假设主机名为`k8s-master` ```bash sudo hostnamectl set-hostname k8s-master echo "127.0.0.1 k8s-master" | sudo tee -a /etc/hosts ``` #### 1.5 配置网络参数 ```bash cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system ``` ### 2. 安装Docker #### 2.1 安装Docker ```bash sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io ``` #### 2.2 配置Docker 修改Docker的cgroup driver为systemd,并设置镜像加速(可选) ```bash sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": ["https://registry.docker-cn.com"] } EOF ``` #### 2.3 启动Docker ```bash sudo systemctl enable docker sudo systemctl start docker ``` ### 3. 安装kubeadm, kubelet, kubectl #### 3.1 添加Kubernetes仓库 ```bash cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF ``` #### 3.2 安装kubelet, kubeadm, kubectl(指定版本1.23.x) ```bash sudo yum install -y kubelet-1.23.17-0 kubeadm-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes ``` #### 3.3 启动kubelet ```bash sudo systemctl enable --now kubelet ``` ### 4. 初始化Kubernetes集群 #### 4.1 初始化控制平面(单节点) 注意:我们使用`--apiserver-advertise-address=0.0.0.0`来允许所有IP访问,但生产环境应指定具体IP。同时,由于是单节点,我们使用`--pod-network-cidr`来指定Pod网络,这里以Calico为例(192.168.0.0/16),如果使用Flannel则使用10.244.0.0/16。 ```bash sudo kubeadm init --apiserver-advertise-address=0.0.0.0 --pod-network-cidr=192.168.0.0/16 ``` #### 4.2 记录kubeadm join命令(虽然单节点不需要,但记录以备后用) ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ### 5. 安装网络插件(Calico) ```bash kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml ``` ### 6. 检查集群状态 ```bash kubectl get nodes kubectl get pods --all-namespaces ``` ### 避坑说明 1. **版本兼容性问题**:Kubernetes与Docker有版本兼容性要求,请确保安装的版本匹配。例如,Kubernetes 1.23支持的Docker版本为19.03.x, 20.10.x等。 2. **镜像拉取问题**:由于网络原因,kubeadm init可能会卡在拉取镜像步骤。可以预先拉取镜像: ```bash kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers ``` 然后使用`--image-repository`参数初始化: ```bash sudo kubeadm init --apiserver-advertise-address=0.0.0.0 --pod-network-cidr=192.168.0.0/16 --image-repository registry.aliyuncs.com/google_containers ``` 3. **cgroup driver不一致**:确保Docker和kubelet的cgroup driver一致(都是systemd)。 4. **网络插件选择**:Calico和Flannel是常用的网络插件,注意`--pod-network-cidr`参数需要与网络插件的默认CIDR匹配。 5. **单节点集群**:默认情况下,Master节点不会调度Pod(出于安全考虑),但单节点集群需要允许Master节点调度Pod: ```bash kubectl taint nodes --all node-role.kubernetes.io/master- ``` 6. **CentOS 7内核问题**:如果遇到网络问题,可能需要升级内核。CentOS 7默认内核(3.10)可能对Kubernetes支持不够好,建议升级到4.x以上。 ### 常见问题解决 - **问题1**: kubeadm init时出现`[ERROR Port-6443]`等端口占用错误。 **解决**:检查6443、10250等端口是否被占用,并释放端口。 - **问题2**: kubelet启动失败,查看日志`journalctl -xeu kubelet`。 **解决**:常见原因包括cgroup driver配置不一致、swap未关闭等。 - **问题3**: Pod处于Pending状态,可能是网络插件未安装或配置错误。 **解决**:重新安装网络插件,并检查`kubectl describe pod <pod-name>`中的事件信息。 - **问题4**: 拉取镜像失败(ImagePullBackOff)。 **解决**:检查镜像名称是否正确,或者手动拉取镜像(如使用阿里云镜像仓库)。 以上步骤在CentOS 7.9上经过测试,使用Kubernetes 1.23.17版本。 §§相关问题§§ 1. 如何验证Kubernetes集群是否正常运行? 2. 如何重置Kubernetes集群以便重新安装? 3. 如何将工作节点加入这个单节点集群(扩展为多节点)? 4. 如何升级Kubernetes集群的版本?</think>### CentOS 7 使用 yum 安装单节点 Kubernetes 集群指南 #### **1. 环境准备** ```bash # 关闭防火墙 sudo systemctl stop firewalld sudo systemctl disable firewalld # 禁用 SELinux sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭交换分区 sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 配置网络参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system ``` #### **2. 安装 Docker** ```bash # 安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加 Docker 仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装 Docker sudo yum install -y docker-ce docker-ce-cli containerd.io # 配置 Docker 使用 systemd 作为 cgroup driver sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } EOF # 启动 Docker sudo systemctl enable docker sudo systemctl start docker ``` #### **3. 安装 Kubernetes 组件** ```bash # 添加 Kubernetes 仓库 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF # 安装 kubelet/kubeadm/kubectl(指定 1.23.x 版本) sudo yum install -y kubelet-1.23.17-0 kubeadm-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes # 启动 kubelet sudo systemctl enable kubelet sudo systemctl start kubelet ``` #### **4. 初始化集群** ```bash # 初始化控制平面(使用阿里云镜像加速) sudo kubeadm init \ --apiserver-advertise-address=$(hostname -i) \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 # 配置 kubectl mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` #### **5. 安装网络插件(Flannel)** ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` #### **6. 允许 Master 节点调度 Pod** ```bash kubectl taint nodes --all node-role.kubernetes.io/master- ``` #### **7. 验证集群状态** ```bash kubectl get nodes # 状态应为 Ready kubectl get pods -n kube-system # 所有 Pod 应为 Running ``` --- ### **避坑说明** 1. **镜像拉取失败** - 问题:`kubeadm init` 卡在 `Pull images` 阶段 - 解决:使用阿里云镜像仓库 `--image-repository registry.aliyuncs.com/google_containers`[^1] 2. **cgroup 驱动不一致** - 问题:kubelet 日志报错 `Detected cgroupfs as cgroup driver` - 解决:确保 Docker 和 kubelet 均使用 `systemd` 驱动(步骤 2 中已配置) 3. **端口冲突** - 问题:`kubeadm init` 报错 `Port 6443 is in use` - 解决:检查端口占用 `sudo netstat -tulnp | grep 6443`,停止冲突服务 4. **Flannel 网络异常** - 问题:Pod 状态为 `ContainerCreating` 或网络不通 - 解决: ```bash # 检查 flannel 日志 kubectl logs -n kube-system kube-flannel-ds-<pod-id> # 常见原因:防火墙未关闭或内核路由问题 ``` 5. **CentOS 7 内核兼容性** - 建议升级内核至 4.x+: ```bash sudo yum install -y kernel-lt sudo reboot ``` --- ### **常用命令参考** ```bash # 重置集群(重新安装时使用) sudo kubeadm reset -f sudo rm -rf /etc/cni/net.d ~/.kube/config # 查看 kubelet 日志 journalctl -xeu kubelet # 强制删除卡在 Terminating 状态的 Pod kubectl delete pod <pod-name> --grace-period=0 --force ```
阅读全文

相关推荐

最新推荐

recommend-type

CentOS7安装k8s-v1.14.1.docx

总结来说,这个文档详细地介绍了在 CentOS 7 上安装 Kubernetes 1.14.1 的步骤,涵盖了从环境准备到所有关键组件的部署。遵循这些步骤,您可以构建一个高可用、功能完备的 k8s 集群,支持多节点和复杂的微服务架构。...
recommend-type

k8s 1.9.2 离线安装,附离线安装包

在本文中,我们将深入探讨如何在没有互联网连接的环境下安装 Kubernetes (k8s) 版本 1.9.2。...记住,尽管离线安装可能更复杂,但遵循正确的步骤和最佳实践,你可以成功部署和管理 Kubernetes 集群。
recommend-type

汽车电子领域CAN总线通信:DBC与Excel文件互转工具解析 v2.0

内容概要:本文介绍了CAN总线及其通信技术在汽车电子和工业自动化领域的应用,重点讲解了DBC文件与Excel文件之间的高效互转方法。DBC文件作为一种描述CAN通信中消息和信号的规范文件,在汽车电子领域至关重要。文中提到的工具不仅能从DBC文件中提取信息并导入到Excel文件中,还能将Excel文件的数据按DBC格式转换,支持传统CAN、CANFD及J1939协议,极大提高了转换效率和数据准确性。 适合人群:从事汽车电子、工业自动化相关工作的工程师和技术人员。 使用场景及目标:适用于需要频繁处理DBC文件与Excel文件转换的场合,如汽车开发、维护和故障诊断等,旨在提升工作效率和数据准确性。 其他说明:随着汽车电子和工业自动化技术的发展,掌握这些工具对于提高工作效率非常重要。
recommend-type

基于CAN通讯的rh850u2a16芯片Bootloader与OTA固件刷写系统 - Bootloader 必备版

基于CAN通讯的RH850U2A16芯片Bootloader及OTA刷写系统的开发过程及其功能特性。主要内容涵盖:1) CAN通讯Bootloader的设计,实现了远程固件升级;2) 配套CAPL上位机程序,便于用户操作;3) UDS服务刷写,支持多种OTA更新模式;4) Flash驱动可在RAM中运行,提升系统性能;5) 支持Boot与App互访数据,增强数据交互能力;6) 实现App有效标记检查与跳转,保障系统稳定性;7) 基于AUTOSAR标准架构,提供完整的配置工程;8) 开发了串口控制台程序,辅助调试;9) 使用量产级代码并采用GHS编译器,确保生产环境中的稳定运行。 适合人群:嵌入式系统开发者、汽车电子工程师、对CAN通讯和Bootloader感兴趣的工程师。 使用场景及目标:适用于需要远程固件升级和高可靠性的汽车电子控制系统。主要目标是提高系统的稳定性和可靠性,满足工业标准和生产需求。 其他说明:文中提到的技术和方法不仅展示了Bootloader的具体实现细节,还强调了系统设计的完整性和标准化,为后续开发和维护提供了坚实的基础。
recommend-type

springbooot+vue基于Java的宠物救助管理系统的设计与实现毕业论文.doc

springbooot+vue基于Java的宠物救助管理系统的设计与实现毕业论文.doc
recommend-type

年轻时代音乐吧二站:四万音乐与图片资料库

根据提供的信息,我们可以梳理出以下知识点: ### 知识点一:年轻时代音乐吧二站修正版 从标题“年轻时代音乐吧二站修正版”可以推断,这是一个与音乐相关的网站或平台。因为提到了“二站”,这可能意味着该平台是某个项目或服务的第二代版本,表明在此之前的版本已经存在,并在此次发布中进行了改进或修正。 #### 描述与知识点关联 描述中提到的“近四万音乐数据库”,透露了该音乐平台拥有一个庞大的音乐库,覆盖了大约四万首歌曲。对于音乐爱好者而言,这表明用户可以访问和欣赏到广泛和多样的音乐资源。该数据库的规模对于音乐流媒体平台来说是一个关键的竞争力指标。 同时,还提到了“图片数据库(另附带近500张专辑图片)”,这暗示该平台不仅提供音乐播放,还包括了视觉元素,如专辑封面、艺人照片等。这不仅增强了用户体验,还可能是为了推广音乐或艺人而提供相关视觉资料。 ### 知识点二:下载 影音娱乐 源代码 源码 资料 #### 下载 “下载”是指从互联网或其他网络连接的计算机中获取文件的过程。在这个背景下,可能意味着用户可以通过某种方式从“年轻时代音乐吧二站修正版”平台下载音乐、图片等资源。提供下载服务需要具备相应的服务器存储空间和带宽资源,以及相应的版权许可。 #### 影音娱乐 “影音娱乐”是指以音频和视频为主要形式的娱乐内容。在这里,显然指的是音乐吧平台提供的音乐播放服务,结合上述的图片数据库,该平台可能还支持视频内容或直播功能,为用户提供丰富的视听享受。 #### 源代码 提到“源代码”和“源码”,很可能意味着“年轻时代音乐吧二站修正版”可能是开源的,或者是该平台允许用户下载其应用程序的源代码。在开源的情况下,开发者社区可以查看、修改和分发源代码,促进更多人参与到平台的建设和改进中。 #### 资料 “资料”则指的是与音乐相关的各种信息资料,如歌词、艺人介绍、音乐评论等。该音乐平台可能提供了丰富的背景信息资料,帮助用户更深入地了解音乐及其背后的故事。 ### 知识点三:压缩包子文件的文件名称列表 文件名称列表中仅提到了“年轻时代音乐吧二站修正版”,这可能暗示着整个平台或其下载包是通过压缩技术进行打包和分发的。压缩文件通常用于减少文件大小,以便于网络传输,同时也为用户提供一个集成化的软件包,方便用户一次性下载安装或更新。 ### 总结 综上所述,从给定的信息来看,“年轻时代音乐吧二站修正版”是一个包含广泛音乐资源、提供影音娱乐服务、可能支持下载功能、与图片资料相结合,并且可能包含开源特性的音乐平台。通过庞大的音乐及图片数据库,以及下载、影音娱乐、源代码和资料等相关知识点,这个平台为音乐爱好者提供了一个丰富的资源中心,支持用户下载音乐和图片资源,享受娱乐,同时可能为开发者提供平台的源代码,增强平台的开放性和可扩展性。
recommend-type

macOS PHP环境管理的艺术:掌握配置多个PHP版本的必备技巧与实践

# 1. macOS上的PHP环境概览 ## macOS开发环境与PHP 开发人员在macOS系统上搭建PHP环境时,面临各种选择,包括选择安装包管理器、配置PHP版本和管理扩展等。macOS作为开发者广泛使用的操作系统之一,提供了对PHP良好的原生支持。Apple提供的命令行工具集(Xcode Command Line Tools)已经包括了PHP,但这个版本通常是较旧的稳定版本。 ## PHP在macOS上的安装途径
recommend-type

can通信的位时间

<think>首先,用户的问题是:“我想理解CAN通信中的位时间设置 请问CAN通信 位时间配置 原理 参数设置”。我需要基于系统级指令来回答这个问题。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户的问题是关于CAN通信的位时间配置,包括原理和参数设置。参考引用中提到了CAN的波特率设置,涉及原子时间(TQ)和比特传输的阶段。引用是:[^1],
recommend-type

邮件通知系统:提升网易文章推荐体验

邮件通知程序是一种常见的网络应用程序,主要功能是通过电子邮件为用户提供信息通知服务。这种程序能够根据设定的条件,自动向用户发送邮件,通知他们新的内容或信息,这在信息更新频繁的场景中尤其有用。从描述中可知,这个特定的邮件通知程序可能被用来推荐网易上的好文章,表明它是针对内容推送而设计的。这种类型的程序通常被用作网站或博客的内容管理系统(CMS)的一部分,用来增强用户体验和用户粘性。 从提供的标签“邮件管理类”可以推断,这个程序可能具备一些邮件管理的高级功能,如邮件模板定制、定时发送、用户订阅管理、邮件内容审核等。这些功能对于提升邮件营销的效果、保护用户隐私、遵守反垃圾邮件法规都至关重要。 至于压缩包子文件的文件名称列表,我们可以从中推测出一些程序的组件和功能: - info.asp 和 recommend.asp 可能是用于提供信息服务的ASP(Active Server Pages)页面,其中 recommend.asp 可能专门用于推荐内容的展示。 - J.asp 的具体功能不明确,但ASP扩展名暗示它可能是一个用于处理数据或业务逻辑的脚本文件。 - w3jmail.exe 是一个可执行文件,很可能是一个邮件发送的组件或模块,用于实际执行邮件发送操作。这个文件可能是一个第三方的邮件发送库或插件,例如w3mail,这通常用于ASP环境中发送邮件。 - swirl640.gif 和 dimac.gif 是两个图像文件,可能是邮件模板中的图形元素。 - default.htm 和 try.htm 可能是邮件通知程序的默认和测试页面。 - webcrea.jpg 和 email.jpg 是两个图片文件,可能是邮件模板设计时使用的素材或示例。 邮件通知程序的核心知识点包括: 1. 邮件系统架构:邮件通知程序通常需要后端服务器和数据库来支持。服务器用于处理邮件发送逻辑,数据库用于存储用户信息、订阅信息以及邮件模板等内容。 2. SMTP 协议:邮件通知程序需要支持简单邮件传输协议(SMTP)以与邮件服务器通信,发送邮件到用户指定的邮箱。 3. ASP 编程:由于提及了ASP页面,这表明开发邮件通知程序可能用到 ASP 技术。ASP 允许在服务器端执行脚本以生成动态网页内容。 4. 邮件内容设计:设计吸引人的邮件内容对于提高用户互动和兴趣至关重要。邮件模板通常包括文本、图片、链接,以及可能的个性化元素。 5. 用户订阅管理:邮件通知程序需要提供用户订阅和退订的功能,以便用户可以控制他们接收到的信息类型和数量。 6. 邮件发送策略:为了遵守反垃圾邮件法律并提高邮件送达率,邮件通知程序需要实现合理的发送策略,例如定时发送、避免过度发送、邮件列表管理等。 7. 安全性和隐私保护:发送邮件时需要确保邮件内容的安全性和用户隐私,避免敏感信息泄露,并且遵守相关的数据保护法律和规范。 8. 性能优化:邮件通知程序需要有效地处理大量用户的邮件发送请求,保证邮件发送的高效性,并且优化系统性能以应对高峰时段。 9. 用户体验:良好的用户体验设计能够增加用户的互动和满意度,包括清晰的订阅界面、灵活的邮件设置选项、易于理解的通知内容等。 10. 反馈机制:用户对邮件的反馈,如打开率、点击率和退订率,是衡量邮件通知程序效果的重要指标。有效的反馈机制可以帮助改进邮件内容和发送策略。 通过了解这些知识点,我们可以对邮件通知程序的设计、开发和运作有更全面的认识。
recommend-type

【macOS PHP开发环境搭建新手必备】:使用brew一步到位安装nginx、mysql和多版本php的终极指南

# 1. macOS PHP开发环境概述 ## macOS下PHP开发的重要性 在macOS上设置PHP开发环境是开发高效Web应用程序的关键。macOS为开发者提供了一个稳定且用户友好的操作系统环境,结合了Unix的强大功能和苹果的直观界面设计。由于其Linux类似的核心,macOS常被视为Web开发的理想平台,特别是在搭