当前位置:首页 > 技术 > 正文内容

基于kubeadm快速部署Kubernetes集群实战指南

访客 技术 2026年7月21日 2

环境准备与系统调优

部署Kubernetes集群前,需对所有节点执行以下系统级配置:

  • 停用防火墙与SELinux(生产环境建议按需配置)
  • 统一集群节点时间同步,可采用公共NTP服务或自建时间服务器
  • 禁用swap交换分区,避免影响kubelet资源调度
  • 配置主机名解析,确保各节点可通过主机名互相访问
  • 配置控制节点到工作节点的SSH免密登录
  • 启用网桥流量过滤,确保容器网络流量可被iptables处理

执行内核参数配置:

modprobe br_netfilter
cat >> /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

软件源配置与组件安装

配置阿里云镜像源加速软件包获取:

cd /etc/yum.repos.d
rm -f CentOS-*
curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

cat > kubernetes.repo <<'EOF'
[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

curl -o docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all && yum makecache fast

安装指定版本的核心组件(以v1.12.3为例):

yum install -y docker-ce kubelet-1.12.3 kubeadm-1.12.3 kubectl-1.12.3 kubernetes-cni-0.6.0

配置Docker使用阿里云镜像加速器,并启动服务:

mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl enable --now docker kubelet

容器镜像本地化获取

由于网络限制,需通过国内镜像仓库拉取K8s所需镜像并重新标记:

#!/bin/bash
mirror_prefix="registry.cn-hangzhou.aliyuncs.com/kuberimages"
target_images=(
  "kube-apiserver:v1.12.3"
  "kube-controller-manager:v1.12.3"
  "kube-scheduler:v1.12.3"
  "kube-proxy:v1.12.3"
  "etcd:3.2.24"
  "coredns:1.2.2"
  "pause:3.1"
)

for img in "${target_images[@]}"; do
  docker pull "${mirror_prefix}/${img}"
  docker tag "${mirror_prefix}/${img}" "k8s.gcr.io/${img}"
  docker rmi "${mirror_prefix}/${img}"
done

验证镜像就绪:

docker images | grep k8s.gcr.io

控制平面初始化

在首个控制节点执行集群初始化(v1.13+可直接指定镜像仓库):

# v1.12及以下版本
kubeadm init \
  --kubernetes-version=v1.12.3 \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.199.116

# v1.13及以上版本(推荐)
kubeadm init \
  --apiserver-advertise-address=192.168.199.116 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.13.1 \
  --pod-network-cidr=10.244.0.0/16

初始化成功后,配置kubectl访问凭证:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

或设置环境变量:

export KUBECONFIG=/etc/kubernetes/admin.conf

CNI网络插件部署

集群初始化后节点状态为NotReady,需部署网络插件。以Flannel为例:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Flannel支持多种后端模式:

模式说明适用场景
VxLAN封装二层报文实现跨主机通信通用场景,默认启用
Directrouting同网段直接路由,跨网段自动降级为VxLAN性能优先场景
host-gw纯主机路由,无跨网段能力二层互通环境
UDP早期兼容模式,性能较差不推荐生产使用

修改ConfigMap可切换至Directrouting模式提升性能。部署完成后等待片刻,执行kubectl get nodes确认控制节点状态变为Ready

工作节点加入集群

在初始化输出中获取加入命令,于各工作节点执行:

kubeadm join 192.168.199.116:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:xxx...

若token过期,可在控制节点重新生成:

kubeadm token create --print-join-command

返回控制节点验证集群状态:

kubectl get nodes -o wide
kubectl get pods --all-namespaces

待所有工作节点Pod调度完成,集群部署即告成功。

标签: kubeadm

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。