首页 > 运维 > CentOS > 正文

CentOS容器编排如何配置_CentOS部署Kubernetes集群

爱谁谁
发布: 2025-09-16 11:56:01
原创
519人浏览过
答案:在CentOS上部署Kubernetes集群的关键前置准备包括禁用SELinux、关闭防火墙、禁用Swap、配置内核参数及设置hosts解析。这些步骤确保系统安全策略、网络通信和资源管理符合Kubernetes运行要求,是集群稳定部署的基础。

centos容器编排如何配置_centos部署kubernetes集群

要在CentOS上配置容器编排,尤其是部署Kubernetes集群,核心在于系统环境的精心准备、容器运行时的选择与安装,以及Kubernetes组件的正确部署与初始化。这不仅仅是执行一系列命令,更需要理解每个步骤背后的逻辑,确保集群能够稳定、高效地运行。

解决方案

在CentOS系统上部署Kubernetes集群,通常遵循以下步骤,这其中包含了许多细节,需要耐心和细致:

  1. 系统初始化与优化:

    • 更新系统:
      sudo yum update -y
      登录后复制
    • 禁用SELinux: 编辑
      /etc/selinux/config
      登录后复制
      文件,将
      SELINUX=enforcing
      登录后复制
      改为
      SELINUX=disabled
      登录后复制
      ,然后重启系统或运行
      sudo setenforce 0
      登录后复制
      。SELinux有时会无故阻碍Kubernetes组件间的通信。
    • 禁用防火墙
      sudo systemctl stop firewalld && sudo systemctl disable firewalld
      登录后复制
      。为了集群内部通信的顺畅,通常会禁用防火墙,或者精确配置规则,但初期禁用更省心。
    • 禁用Swap分区:
      sudo swapoff -a
      登录后复制
      并注释掉
      /etc/fstab
      登录后复制
      中所有
      swap
      登录后复制
      行。Kubernetes的
      kubelet
      登录后复制
      组件在检测到Swap开启时会拒绝启动。
    • 配置内核参数: 允许
      br_netfilter
      登录后复制
      模块,使Linux桥接流量能够被
      iptables
      登录后复制
      处理,这是Kubernetes网络模型所必需的。
      sudo modprobe br_netfilter
      echo '1' | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
      echo '1' | sudo tee /proc/sys/net/bridge/bridge-nf-call-ip6tables
      echo 'net.bridge.bridge-nf-call-iptables = 1' | sudo tee -a /etc/sysctl.d/k8s.conf
      echo 'net.bridge.bridge-nf-call-ip6tables = 1' | sudo tee -a /etc/sysctl.d/k8s.conf
      sudo sysctl --system
      登录后复制
    • 配置
      /etc/hosts
      登录后复制
      添加所有节点的主机名和IP地址映射,确保节点间可以通过主机名互相解析。
  2. 安装容器运行时(Containerd):

    • 安装必要工具
      sudo yum install -y yum-utils device-mapper-persistent-data lvm2
      登录后复制
    • 添加Docker官方repo(Containerd通常随Docker安装包提供):
      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      登录后复制
    • 安装Containerd:
      sudo yum install -y containerd.io
      登录后复制
    • 配置Containerd: 生成默认配置文件并修改
      SystemdCgroup
      登录后复制
      true
      登录后复制
      sudo mkdir -p /etc/containerd
      sudo containerd config default | sudo tee /etc/containerd/config.toml
      # 修改 config.toml 文件,找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
      # 将 SystemdCgroup = false 改为 SystemdCgroup = true
      # 可以用 sed 命令简化:
      sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
      登录后复制
    • 启动Containerd:
      sudo systemctl enable --now containerd
      登录后复制
  3. 安装Kubernetes组件(kubeadm, kubelet, kubectl):

    • 添加Kubernetes YUM仓库:
      cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
      enabled=1
      gpgcheck=0
      repo_gpgcheck=0
      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
      登录后复制

      (这里使用了阿里云镜像,国内访问更快)

    • 安装组件:
      sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
      登录后复制
    • 启动Kubelet:
      sudo systemctl enable --now kubelet
      登录后复制
      (Kubelet会持续尝试启动,直到集群初始化完成)
  4. 初始化Kubernetes主节点(仅在主节点执行):

    • 拉取镜像:
      sudo kubeadm config images pull
      登录后复制
      (如果网络不佳,可能需要配置镜像加速器或使用国内镜像源)
    • 初始化集群:
      sudo kubeadm init \
        --apiserver-advertise-address=<Master节点IP地址> \
        --pod-network-cidr=<Pod网络的CIDR,例如10.244.0.0/16,取决于你选择的CNI插件> \
        --kubernetes-version v1.28.0 # 根据实际情况调整版本
      登录后复制

      初始化成功后,会输出

      kubeadm join
      登录后复制
      命令,以及配置
      kubectl
      登录后复制
      的方法。

    • 配置kubectl:
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      登录后复制
    • 安装网络插件(CNI): 例如Flannel。
      kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
      登录后复制

      (注意:根据你

      kubeadm init
      登录后复制
      时指定的
      --pod-network-cidr
      登录后复制
      选择合适的CNI插件及其配置)

  5. 加入工作节点(在所有工作节点执行):

    • 在主节点初始化成功后,会得到一个
      kubeadm join
      登录后复制
      命令,将其复制到工作节点上执行。
    • 如果Token过期或丢失,可以在主节点上生成新的:
      sudo kubeadm token create --print-join-command
      登录后复制

在CentOS上部署Kubernetes集群,有哪些关键的系统前置准备工作?

部署Kubernetes集群,系统前置准备工作是基石,它直接决定了集群的稳定性和性能。我的经验告诉我,很多初学者在这一步上踩坑,往往导致后续部署失败或集群运行异常。

首先,禁用SELinux是几乎成了惯例。SELinux的安全机制非常严格,它可能阻止Kubernetes组件,尤其是

kubelet
登录后复制
和容器运行时之间进行必要的通信,导致各种奇怪的权限错误。虽然理论上可以通过精确配置SELinux策略来允许这些操作,但在实际操作中,为了快速部署和减少不必要的复杂性,暂时禁用它是一个普遍且有效的选择。当然,生产环境中应该考虑更安全的替代方案或定制策略。

其次,禁用防火墙(或至少配置精确的规则)也是不可或缺的。Kubernetes集群内部有大量的网络通信,包括Pod到Pod、Pod到Service、API Server到各个组件等等。如果防火墙规则过于严格,这些通信就会被阻断,导致集群无法正常工作。例如,

kube-proxy
登录后复制
需要访问API Server,
kubelet
登录后复制
需要与
containerd
登录后复制
通信,并且需要通过端口暴露Pod服务。全面禁用防火墙虽然简单粗暴,但能有效避免初期因网络策略不当引发的问题。

再者,禁用Swap分区是Kubernetes官方明确要求的。

kubelet
登录后复制
在检测到系统开启了Swap时会拒绝启动,或者即使启动了也可能导致Pod性能下降或不稳定。Kubernetes倾向于将节点视为可支配的计算资源,它希望对内存资源有完全的控制权,Swap的存在会干扰其调度和资源管理。所以,无论是通过
swapoff -a
登录后复制
临时关闭,还是修改
/etc/fstab
登录后复制
永久禁用,都是必须执行的步骤。

琅琅配音
琅琅配音

全能AI配音神器

琅琅配音208
查看详情 琅琅配音

最后,配置内核参数,特别是启用

br_netfilter
登录后复制
模块并设置
net.bridge.bridge-nf-call-iptables
登录后复制
为1,这对于Kubernetes的网络模型至关重要。Kubernetes使用CNI(Container Network Interface)插件来管理Pod网络,这些插件通常依赖于Linux桥接和
iptables
登录后复制
来实现Pod间的通信和Service负载均衡。没有这些内核参数,Pod之间的网络隔离和通信可能会出现问题,Service的虚拟IP也无法正常工作。我曾经就遇到过Pod无法跨节点通信的问题,排查下来就是这个内核参数没有正确设置。

这些前置准备工作,看似琐碎,实则环环相扣,是确保Kubernetes集群健康运行的基石。

CentOS部署Kubernetes时,选择Docker还是Containerd作为容器运行时更合适?

这是一个很有意思的问题,尤其是在Kubernetes社区经历了从Docker到Containerd的“运行时之争”之后。从我的实践经验和社区趋势来看,Containerd无疑是目前更推荐的选择

早期,Docker是容器技术的代名词,Kubernetes也理所当然地将其作为默认的容器运行时。但随着Kubernetes生态的成熟,Docker作为一个包含大量上层工具(如

docker build
登录后复制
docker compose
登录后复制
等)的完整平台,其内部的
containerd
登录后复制
部分才是Kubernetes真正需要的。Docker的架构是“Docker Client -> Docker Daemon -> containerd -> runc”,而Kubernetes通过CRI(Container Runtime Interface)直接与
containerd
登录后复制
通信,绕过了Docker Daemon的很多非核心功能。

选择Containerd的理由很直接:

  1. 轻量与高效: Containerd是专门为Kubernetes设计的CRI运行时,它更轻量、更专注于容器生命周期管理的核心功能。这意味着更少的资源占用和更快的操作响应速度。
  2. 稳定性与兼容性: Kubernetes社区已经将Containerd作为首选和默认的CRI运行时,这意味着它得到了更好的测试和维护,与Kubernetes的兼容性也更强。
  3. 减少抽象层: 直接使用Containerd减少了中间的抽象层,降低了潜在的故障点。当出现问题时,排查起来也相对更容易,因为你不需要去考虑Docker Daemon本身的复杂性。
  4. 未来趋势: 随着Kubernetes的发展,直接与CRI兼容的运行时(如Containerd、CRI-O)将是主流,它们提供了更贴合Kubernetes需求的接口和更优化的性能。

当然,这并不是说Docker不好。Docker仍然是开发和本地测试的优秀工具。但对于生产级别的Kubernetes集群,追求极致的稳定、高效和与Kubernetes的深度集成,Containerd是更明智的选择。在CentOS上安装Containerd,通常也比安装完整的Docker-CE更直接,只需要安装

containerd.io
登录后复制
包并进行简单的配置即可。在配置时,务必注意将Containerd的cgroup驱动设置为
systemd
登录后复制
,与
kubelet
登录后复制
保持一致,这是避免集群启动失败的一个常见陷阱。

使用kubeadm在CentOS上初始化Kubernetes主节点时,常会遇到哪些问题及如何排查?

使用

kubeadm init
登录后复制
命令来初始化Kubernetes主节点,是部署过程中最关键的一步,也常常是问题的高发区。我见过不少人卡在这里,反复尝试,最终发现是某个前置条件没满足。

一个最常见的问题是镜像拉取失败

kubeadm init
登录后复制
会尝试从
k8s.gcr.io
登录后复制
(或
registry.k8s.io
登录后复制
)拉取核心组件镜像,如
kube-apiserver
登录后复制
kube-controller-manager
登录后复制
等。在中国大陆,由于网络限制,直接拉取这些镜像往往会超时或失败。这时候,你需要配置一个国内的镜像加速器,或者在
kubeadm init
登录后复制
命令中指定
--image-repository
登录后复制
参数,指向一个国内可访问的镜像源,例如阿里云的
registry.aliyuncs.com/google_containers
登录后复制
。排查时,可以先手动尝试
sudo crictl pull <image_name>
登录后复制
(如果安装了crictl)或查看
kubeadm config images pull
登录后复制
的输出。

其次,网络配置问题也频繁出现。这包括

--pod-network-cidr
登录后复制
参数与实际CNI插件不匹配,或者主机防火墙、SELinux未正确禁用。如果
kubeadm init
登录后复制
完成后,
kubectl get nodes
登录后复制
显示节点状态为
NotReady
登录后复制
,或者
kubectl get pods -A
登录后复制
发现核心组件(如
coredns
登录后复制
)一直处于
Pending
登录后复制
CrashLoopBackOff
登录后复制
状态,这很可能就是网络问题。排查时,首先检查
kubelet
登录后复制
的日志:
sudo journalctl -u kubelet -f
登录后复制
,看是否有关于网络插件或API Server连接的错误。同时,确保
--pod-network-cidr
登录后复制
与你后续安装的CNI插件(如Flannel的默认CIDR是
10.244.0.0/16
登录后复制
)一致。

Cgroup驱动不匹配是另一个隐蔽的问题。

kubelet
登录后复制
和容器运行时(Containerd)需要使用相同的cgroup驱动(
systemd
登录后复制
cgroupfs
登录后复制
)。如果Containerd的配置文件中
SystemdCgroup
登录后复制
设置为
false
登录后复制
,而
kubelet
登录后复制
默认使用
systemd
登录后复制
,就会导致
kubelet
登录后复制
无法正常启动。排查时,查看
kubelet
登录后复制
日志会发现类似“failed to find cgroupfs mount point”或“cgroup driver mismatch”的错误。解决办法是修改Containerd的
config.toml
登录后复制
文件,将
SystemdCgroup = true
登录后复制
,然后重启Containerd和kubelet。

最后,资源不足也是常见问题。如果你的CentOS虚拟机内存太小(例如低于2GB),

kubeadm init
登录后复制
可能会因为资源限制而失败。虽然
kubeadm
登录后复制
会给出警告,但有时会被忽略。确保每个节点至少有2GB内存和2个CPU核心,是运行Kubernetes的基本要求。

排查这些问题时,始终牢记

sudo journalctl -u kubelet -f
登录后复制
是你的好帮手,它能实时输出
kubelet
登录后复制
的运行日志,是定位问题的关键线索。如果问题复杂,
kubeadm reset
登录后复制
后重新尝试,并仔细检查每一步的前置条件,往往能解决大部分问题。

以上就是CentOS容器编排如何配置_CentOS部署Kubernetes集群的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号