一、Kubernetes集群搭建(下篇)
1. 集群搭建核心步骤
- Master节点创建:使用kubeadm工具初始化Master节点
- Node节点加入:通过kubeadm join <Master节点IP和端口>命令将工作节点加入集群
- 网络插件部署:执行kubectl apply -f calico.yaml部署Calico网络插件
- Dashboard安装:部署Web UI管理界面用于可视化操作
2. Calico网络配置
- YAML文件下载:使用wget https://docs.projectcalico.org/manifests/calico.yaml获取配置文件
- 关键参数修改:必须确保CALICO_IPV4_POOL_CIDR与kubeadm init时指定的pod-network-cidr保持一致
- 部署验证:通过kubectl get pods -n kube-system检查所有Calico Pod状态是否为Running
3. 集群测试方法
- 测试Pod创建:
- 服务访问验证:通过http://NodeIP:Port访问暴露的Nginx服务
- 状态检查:使用kubectl get pod,svc查看资源创建状态
4. Dashboard部署
- YAML文件获取:从GitHub下载推荐配置recommended.yaml
- 服务类型修改:将Service类型改为NodePort并指定端口30001
- 访问控制配置:
- 访问方式:通过https://NodeIP:30001使用token登录
5. 常见问题排查
- 节点状态验证:使用kubectl get node检查所有节点是否Ready
- 典型问题现象:
- Pod网络不通(Calico配置错误)
- 节点无法加入集群(token过期或网络连接问题)
- Dashboard访问失败(RBAC权限未正确配置)
- 解决思路:
- 检查/var/log/messages系统日志
- 验证网络插件Pod日志
- 重新生成join命令的token
二、搭建K8S集群常见问题解惑
1. kubeadm init失败
- IP指定问题:在公有云搭建时需指定内网IP而非公网IP,因为公网IP通常是浮动IP未直接配置在虚拟机内
- 初始化准备不足:常见问题包括未关闭swap(日志中会有明显提示)和未关闭selinux(可能导致服务无法启动)
- 重置方法:执行失败后需先运行kubeadm reset清除之前配置,再重新执行init命令
- 重置操作:kubeadm reset会清空主机上所有由kubeadm init或join所做的更改
- 配置文件引导:可使用配置文件替代命令行参数,示例配置包含:
2. Dashboard登录进去没有显示资源
- token复制问题:最常见原因是复制token时包含了末尾空格,导致认证失败
- token验证:需确认获取的token对应的是dashboard-admin账户,可通过检查token上方的Annotations确认
- 错误表现:登录后右上角会出现警告喇叭图标,提示权限不足
- 创建服务账户:
- 替代登录方式:除token外还可使用kubeconfig文件登录,但token方式仍是主流
3. 网络组件启动问题
- 镜像下载慢:部分用户网络可能导致Calico镜像下载缓慢,需等待10-20分钟
- 启动错误排查:
- 使用kubectl get pods -n kube-system查看Pod状态
- 对异常Pod执行kubectl logs <pod-name> -n kube-system查看详细日志
- CoreDNS问题处理:在所有节点执行镜像拉取和重命名:
4. ComponentStatus连接拒绝问题
- 问题本质:v1.19+版本已弃用ComponentStatus检查,但集群实际运行正常
- 验证方法:kubectl get node显示节点Ready即表示集群正常
- 解决方案:
- 进入配置目录:cd /etc/kubernetes/manifests/
- 编辑kube-scheduler.yaml和kube-controller-manager.yaml
- 注释掉--port=0参数
- 等待约30秒组件自动重启
- 配置文件位置:/etc/kubernetes/manifests/目录包含核心组件配置
- 修改要点:找到spec.containers.command中的--port=0参数行,添加#注释
- 生效验证:修改后组件会自动重启,再次执行kubectl get cs应显示Healthy
三、使用kubeadm搭建K8S集群
1. 安装目录结构
- 工作目录:所有Kubernetes组件的工作目录位于/etc/kubernetes/下
- 配置文件:以.conf结尾的文件都是组件的配置文件,包含大量参数配置
- manifests目录:存放Kubernetes核心组件的启动参数配置文件
- pki目录:存放集群所有的证书文件,包括:
- apiserver相关证书(apiserver.crt、apiserver.key等)
- CA根证书(ca.crt、ca.key)
- 前端代理证书(front-proxy-*)
- 服务账户密钥(sa.key、sa.pub)
2. 证书管理机制
- 自动生成:kubeadm会自动处理所有HTTPS通信所需的证书生成
- 证书位置:所有证书默认生成到/etc/kubernetes/pki/目录
- 证书用途:基于根证书颁发各种客户端证书,保障集群组件间安全通信
- 与二进制安装区别:相比手动搭建,kubeadm隐藏了复杂的证书生成过程
3. 部署测试流程
- 创建测试Pod:
- 验证服务:
- 访问地址:http://NodeIP:Port
- Dashboard部署:
4. CoreDNS问题处理
- 手动拉取镜像:
- 自动恢复:完成镜像拉取后,CoreDNS Pod会自动恢复正常状态
四、知识小结
知识点 |
核心内容 |
常见问题/易错点 |
解决方案 |
集群初始化 |
使用kubeadm init命令初始化master节点 |
1. IP指定错误(公有云需用内网IP) 2. swap未关闭 3. selinux未禁用 |
1. 指定正确内网IP 2. 关闭swap 3. 禁用selinux后执行kubeadm reset重置 |
Dashboard访问 |
通过token登录Dashboard |
1. 复制的token包含空格 2. 使用了错误的token |
1. 精确复制token不带空格 2. 确认token对应dashboard-admin账户 |
Calico网络组件 |
部署集群网络插件 |
1. 镜像下载慢导致Pending 2. 组件启动失败(CrashLoopBackOff) |
1. 耐心等待或更换镜像源 2. 查看日志kubectl logs -n kube-system <pod-name> |
节点加入集群 |
使用kubeadm join添加节点 |
系统参数net.ipv4.ip_forward未启用 |
手动设置sysctl net.ipv4.ip_forward=1 |
组件状态检查 |
kubectl get cs查看控制平面状态 |
调度器和控制器显示连接拒绝 |
修改/etc/kubernetes/manifests下对应yaml文件,注释port: 0配置 |
工作目录结构 |
/etc/kubernetes集群配置目录 |
不熟悉各子目录功能 |
pki/存放证书 manifests/组件配置 admin.conf集群凭证 |
学习建议 |
八小时外学习提升 |
职场发展差距源于业余时间利用 |
重点投入技术实践和问题排查能力培养 |
问题排查方法 |
集群故障诊断流程 |
缺乏系统排查经验 |
1. 查看日志 2. 搜索引擎查询 3. 社区求助 4. 保持实践勇气 |