如何自定义CentOS上的Kubernetes安装过程
导读:在 CentOS 上自定义 Kubernetes 安装的可落地方案 一 规划与前置条件 明确目标拓扑与网络:至少准备 1 台 Master 与 1 台 Node;规划 Service CIDR 与 Pod CIDR,避免与宿主机网段冲突。...
在 CentOS 上自定义 Kubernetes 安装的可落地方案
一 规划与前置条件
- 明确目标拓扑与网络:至少准备 1 台 Master 与 1 台 Node;规划 Service CIDR 与 Pod CIDR,避免与宿主机网段冲突。
- 主机基线:建议 2 核 CPU / 2GB 内存 以上;各节点配置 静态 IP 与 主机名,并做好 /etc/hosts 解析;启用 NTP/chrony 时间同步。
- 容器运行时:选择 Docker 或 containerd;如使用 Docker,将 cgroup 驱动设为 systemd;如使用 containerd,准备 cri-dockerd(适配 kubelet)。
- 系统与安全:临时关闭 Swap,并按需调整 firewalld/SELinux 策略(生产环境建议精细化放通而非全关)。
- 软件源与版本:配置 Kubernetes 与 Docker 仓库;如需加速,可使用国内镜像源;明确 Kubernetes 版本 并在所有节点保持一致。
二 最小化自定义流程 kubeadm 方式
- 安装与配置容器运行时
- Docker 示例:
- 安装:yum install -y docker-ce docker-ce-cli containerd.io
- 配置 cgroup:/etc/docker/daemon.json 写入 { “exec-opts”: [“native.cgroupdriver=systemd”]}
- 启动:systemctl enable --now docker
- containerd 示例:安装 containerd,部署 cri-dockerd 并启用 systemd 驱动。
- Docker 示例:
- 安装 kubeadm/kubelet/kubectl
- 添加仓库(示例):
- Kubernetes:cat > /etc/yum.repos.d/kubernetes.repo < < EOF … EOF
- Docker:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装指定版本:yum install -y kubelet- kubeadm- kubectl-
- 启用 kubelet:systemctl enable --now kubelet
- 添加仓库(示例):
- 内核与网络参数
- 启用桥接与转发:/etc/sysctl.d/k8s.conf 写入
- net.bridge.bridge-nf-call-iptables=1
- net.bridge.bridge-nf-call-ip6tables=1
- net.ipv4.ip_forward=1
- 生效:modprobe br_netfilter & & sysctl -p /etc/sysctl.d/k8s.conf
- 启用桥接与转发:/etc/sysctl.d/k8s.conf 写入
- 初始化控制平面(示例)
- kubeadm init --apiserver-advertise-address < MASTER_IP> \ –pod-network-cidr < POD_CIDR> --service-cidr < SERVICE_CIDR> \ –image-repository --kubernetes-version
- 配置 kubectl
- mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 CNI 网络插件
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 加入工作节点
- 使用 kubeadm init 输出或 kubeadm token create --print-join-command 生成的 join 命令在各 Node 执行。
三 常用自定义项与推荐值
- 自定义 Pod/Service CIDR:初始化时通过 –pod-network-cidr 与 –service-cidr 指定,确保与现有网络不冲突;例如 Pod 使用 10.244.0.0/16(Flannel 常见),Service 使用 10.96.0.0/12(默认)。
- 镜像仓库与版本锁定:通过 –image-repository 指定国内镜像源(如 registry.aliyuncs.com/google_containers),并固定 kubelet/kubeadm/kubectl 的 版本号,避免滚动差异。
- 控制平面高可用:准备 多 Master 并使用 kubeadm init --config 指定 InitConfiguration/ClusterConfiguration 与 JoinConfiguration,配合 keepalived/haproxy 或云厂商 LB 暴露 API Server VIP。
- 容器运行时与驱动:Docker 使用 systemd cgroup;containerd 使用 systemd 并启用 cri-dockerd 适配;kubelet 启动参数与容器运行时保持一致。
- 内核网络优化:启用 IPVS 提升大规模 Service 转发性能(需安装 ipvsadm/ipset 并配置 kube-proxy mode=ipvs)。
- 安全基线:生产环境不建议直接关闭 firewalld/SELinux,改为按需放通端口(如 6443/10250/10251/10252/8472(UDP) 等);Swap 永久关闭并验证。
- 时间同步:启用 chrony/ntpd,保证节点间 时间一致性,避免证书与调度异常。
四 进阶自定义与自动化
- 使用 kubeadm 配置文件
- 生成模板:kubeadm config print init-defaults > kubeadm-config.yaml
- 按需修改:networking、apiServer.advertiseAddress、nodeRegistration、criSocket、imageRepository、kubernetesVersion 等
- 初始化:kubeadm init --config kubeadm-config.yaml
- 生成 join 配置:kubeadm config print join-defaults > join-config.yaml
- 使用 Sealos 定制镜像与 Clusterfile
- 通过 kubeadm.yml 定制 ClusterConfiguration(如 serviceSubnet/podSubnet),构建自定义镜像
- 在 Clusterfile 中编排 Master/Node 主机、镜像、应用(如 Calico) 与 SSH 连接,支持 values 合并与一键 apply
- 适合大规模、标准化交付与版本化复现。
五 验证与常见问题排查
- 基础验证
- 节点状态:kubectl get nodes(应为 Ready)
- 系统 Pod:kubectl get pods -A(核心组件 Running)
- 组件日志:journalctl -u kubelet -f;必要时查看容器运行时与 CNI 插件日志
- 常见问题速查
- cgroup 驱动不一致:kubelet 与 Docker/containerd 驱动需一致(建议 systemd)
- Swap 未关闭:kubelet 会拒绝启动,确认 swapoff -a 与 /etc/fstab 注释
- Pod 网段冲突:确认 Pod CIDR 与宿主机/内网网段无重叠
- 镜像拉取失败:使用 国内镜像源 或配置 imagePullSecrets
- 节点 NotReady:检查 CNI 插件 是否成功部署、内核参数是否生效、端口是否放通。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何自定义CentOS上的Kubernetes安装过程
本文地址: https://pptw.com/jishu/770694.html
