当前位置: 首页 > news >正文

保姆级教程:在CentOS 7.9上用kubeadm 1.19.0一次成功初始化K8s集群(避坑`advertiseAddress`配置)

CentOS 7.9环境下一键部署Kubernetes 1.19集群全指南

最近在帮朋友部署一套Kubernetes测试环境时,发现网上很多教程都存在版本兼容性问题。特别是当使用CentOS 7.9搭配Kubernetes 1.19.0时,稍有不慎就会掉进各种坑里。经过多次实践,我总结出一套稳定可靠的部署方案,特别适合需要快速搭建测试环境的开发者。

1. 环境准备与系统配置

在开始安装前,我们需要确保基础环境符合Kubernetes 1.19.0的要求。CentOS 7.9作为长期支持版本,提供了稳定的运行基础,但仍需进行必要的系统调优。

首先检查系统版本并更新所有包:

cat /etc/redhat-release sudo yum update -y

关闭SELinux和防火墙(生产环境请谨慎):

sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config sudo systemctl stop firewalld sudo systemctl disable firewalld

配置系统内核参数并加载必要模块:

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

配置正确的时区和时间同步:

sudo timedatectl set-timezone Asia/Shanghai sudo yum install -y ntpdate sudo ntpdate ntp.aliyun.com

2. 容器运行时与Kubernetes组件安装

Kubernetes 1.19.0官方推荐使用Docker 19.03.5作为容器运行时。这个版本组合经过充分测试,稳定性有保障。

安装Docker CE 19.03.5:

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-19.03.5 docker-ce-cli-19.03.5 containerd.io sudo systemctl enable docker && sudo systemctl start docker

配置Docker镜像加速和cgroup驱动:

sudo mkdir -p /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 sudo systemctl daemon-reload sudo systemctl restart docker

安装kubeadm、kubelet和kubectl 1.19.0:

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=1 repo_gpgcheck=1 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-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 --disableexcludes=kubernetes sudo systemctl enable kubelet

3. 集群初始化配置详解

正确的初始化配置是成功部署的关键。很多初学者在这里容易犯错,特别是advertiseAddress的设置。

首先获取主节点的真实IP地址:

MASTER_IP=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1) echo $MASTER_IP

创建初始化配置文件init-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration localAPIEndpoint: advertiseAddress: ${MASTER_IP} # 必须使用主节点实际IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: k8s-master taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.19.0 imageRepository: registry.aliyuncs.com/google_containers networking: podSubnet: 192.168.0.0/16 serviceSubnet: 10.96.0.0/16 dnsDomain: cluster.local controllerManager: {} scheduler: {} etcd: local: dataDir: /var/lib/etcd

重要提示:advertiseAddress必须设置为Master节点的实际IP地址,使用域名或错误IP会导致kubelet启动超时。

预拉取所需镜像:

sudo kubeadm config images pull --config=init-config.yaml

4. 集群初始化与问题排查

执行初始化命令并监控日志:

sudo kubeadm init --config=init-config.yaml --upload-certs | tee kubeadm-init.log

如果遇到kubelet启动超时问题,可以按以下步骤排查:

  1. 检查kubelet状态:

    systemctl status kubelet -l journalctl -xeu kubelet
  2. 验证容器运行时:

    docker ps -a | grep kube
  3. 检查证书配置:

    openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep -A 1 "Alternative Names"

常见错误解决方案:

  • 证书SAN不匹配:确保init-config.yaml中的advertiseAddress与Master节点IP一致
  • cgroup驱动不一致:确认Docker和kubelet都使用systemd作为cgroup驱动
  • 镜像拉取失败:手动拉取镜像或更换国内镜像源

初始化成功后,配置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. 网络插件安装与节点加入

安装Calico网络插件(与配置的podSubnet匹配):

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

验证核心组件状态:

kubectl get pods -n kube-system kubectl get nodes

获取worker节点加入命令:

kubeadm token create --print-join-command

worker节点上执行类似如下命令加入集群:

kubeadm join 10.0.128.0:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:6bdcf88c58234831bf230cb3836e892d6ae5c007be6093dcc7c699058220d9d8

6. 集群验证与常用操作

验证集群健康状况:

kubectl get cs kubectl cluster-info

部署测试应用:

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx

常用诊断命令:

# 查看事件 kubectl get events --sort-by='.metadata.creationTimestamp' # 检查组件日志 kubectl logs -n kube-system kube-apiserver-k8s-master # 资源使用情况 kubectl top nodes kubectl top pods -A

重置集群(如需重新安装):

kubeadm reset -f rm -rf /etc/cni/net.d rm -rf $HOME/.kube/config iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
http://www.cnnetsun.cn/news/1965268.html

相关文章:

  • 从老式音频发生器到现代信号源:RC文氏电桥振荡器的前世今生与实用设计
  • FPGA开发实战:从Modelsim到Vivado的典型编译报错排查指南
  • 如何快速配置游戏自动化助手:面向新手的完整指南
  • 解锁TMS320F28035 CLA:从零构建高效实时控制任务
  • STM32实战:复用推挽输出模式配置PWM信号(附完整代码)
  • 告别盲调!用逻辑分析仪和CAN盒深度调试S32K144的CAN PAL组件
  • Valgrind不止能查内存泄漏?解锁Memcheck/Callgrind/Cachegrind的隐藏用法,全方位优化你的C++项目性能
  • 从工厂质检到智能运维:YOLOv8仪表盘检测的5个实战项目思路与代码拆解
  • Anaconda / Miniconda 安装与配置:从零到环境搭建的完整指南
  • 四轮转向汽车Carsim-simulink联合仿真滑模控制模型:驾驶员模型、二自由度车辆模型及...
  • DPO:直接偏好优化入门详解
  • 保姆级避坑指南:用IDEA 2024.1 + MySQL 8.0 + Redis 7.2 从零跑通JeecgBoot 3.8.0
  • Win11 + WSL2:一站式搭建CUDA与PyTorch深度学习环境
  • 从方差分解到机器学习:Law of Total Variance的直观应用
  • 【Matlab】服务机器人自然语言交互控制程序
  • 允许自己不被理解,才是一个人强大的开始
  • 为什么你的AGI项目停在L3?:2025年前必须攻克的4个非标瓶颈(含MIT、DeepMind未公开实验数据)
  • 如何用Excalidraw虚拟白板轻松绘制手绘风格图表:完整入门指南
  • FanControl终极指南:5步搞定Windows风扇控制,免费打造静音高效电脑
  • 用MATLAB手把手教你玩转16QAM:从星座图到误码率,一个仿真搞定通信原理实验
  • Arduino Mega2560 Bootloader烧录避坑指南:从连线图到代码上传的完整流程
  • 群核科技登陆港交所:募资12亿港元 成“全球空间智能第一股”
  • WaveTools:解锁鸣潮120帧的终极游戏优化方案
  • STM32驱动ST7789V2 TFT屏:从SPI初始到DMA加速的实战解析
  • ComfyUI-Impact-Pack中Wildcard与ControlNet的架构级兼容性优化
  • C语言联合体:内存共享的艺术与实战解析
  • 图像处理算法
  • 终极指南:如何用EZCard快速批量生成桌游卡牌,效率提升300%
  • Matlab的rgb2gray算法揭秘:为什么是0.2989, 0.5870, 0.1140?从人眼感知到代码实现
  • 开发效率革命:深入解析热重载的核心原理与跨平台实践