KubeSphere实战:借助kubekey从零到一构建高可用K8s集群与管理平台 1. 为什么选择KubeSphere和kubekey搭建K8s集群在云原生时代Kubernetes已经成为容器编排的事实标准。但对于很多刚接触K8s的开发者来说原生的Kubernetes部署和管理仍然存在较高的门槛。这正是KubeSphere的价值所在 - 它是一款开源的分布式多租户容器管理平台在Kubernetes之上提供了直观易用的操作界面和向导式操作方式。我最初接触KubeSphere时最吸引我的是它的一站式解决方案。传统搭建K8s集群需要手动配置各个组件而KubeSphere提供的kubekey工具可以自动化完成从K8s集群部署到KubeSphere平台安装的全过程。这让我从一个需要花费数天时间搭建环境的运维工程师变成了只需要几小时就能完成生产级部署的技术专家。kubekey作为KubeSphere的官方部署工具用Go语言开发具有以下优势全自动化一条命令完成K8s集群和KubeSphere的安装灵活配置支持自定义K8s版本、网络插件等参数高可用支持内置负载均衡方案轻松构建生产级集群跨平台支持物理机、虚拟机、公有云等多种环境2. 环境准备与初始化配置2.1 服务器规划建议在实际部署前合理的服务器规划至关重要。根据我的经验一个生产可用的最小集群需要至少3个节点控制节点建议2核CPU/4GB内存/50GB磁盘起步工作节点建议4核CPU/8GB内存/100GB磁盘起步存储节点如果需要持久化存储建议单独配置我最近为一个中型项目部署的集群配置如下192.168.1.101 master1 (控制平面) 192.168.1.102 master2 (控制平面) 192.168.1.103 master3 (控制平面) 192.168.1.111 worker1 (工作节点) 192.168.1.112 worker2 (工作节点)2.2 系统初始化配置在所有节点上执行以下配置这是确保K8s稳定运行的基础# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i s/enforcing/disabled/ /etc/selinux/config # 关闭swap swapoff -a sed -ri s/.*swap.*/#/ /etc/fstab # 配置内核参数 cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 EOF sysctl --system # 时间同步 yum install -y ntpdate ntpdate time.windows.com注意这些配置修改后有些需要重启才能生效建议在开始安装前先完成系统重启。3. 使用kubekey部署K8s集群3.1 安装kubekey工具在master节点上执行以下命令安装kubekey# 国内用户推荐使用以下命令加速下载 export KKZONEcn curl -sfL https://get-kk.kubesphere.io | VERSIONv1.2.1 sh - # 将kk移动到PATH目录 mv kk /usr/local/bin/ # 验证安装 kk version如果遇到网络问题可以尝试手动下载并解压wget https://github.com/kubesphere/kubekey/releases/download/v1.2.1/kubekey-v1.2.1-linux-amd64.tar.gz tar -zxvf kubekey-v1.2.1-linux-amd64.tar.gz mv kk /usr/local/bin/3.2 创建集群配置文件kubekey使用YAML文件定义集群配置生成模板kk create config --with-kubernetes v1.22.10 --with-kubesphere v3.3.0这会生成一个config-sample.yaml文件需要根据实际情况修改。以下是我的常用配置示例apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Cluster metadata: name: production spec: hosts: - {name: master1, address: 192.168.1.101, internalAddress: 192.168.1.101, user: root, password: your_password} - {name: worker1, address: 192.168.1.111, internalAddress: 192.168.1.111, user: root, password: your_password} roleGroups: etcd: - master1 control-plane: - master1 worker: - worker1 kubernetes: version: v1.22.10 clusterName: cluster.local autoRenewCerts: true containerManager: docker network: plugin: calico kubePodsCIDR: 10.233.64.0/18 kubeServiceCIDR: 10.233.0.0/18 registry: registryMirrors: - https://docker.mirrors.ustc.edu.cn addons: - name: kubesphere namespace: kubesphere-system sources: chart: name: ks-installer repo: https://charts.kubesphere.io/main valuesFile: /etc/kubesphere.yaml3.3 启动集群部署配置完成后使用以下命令开始部署export KKZONEcn kk create cluster -f config-sample.yaml | tee kk-install.log部署过程会显示详细的日志包括系统依赖检查容器运行时安装Kubernetes组件部署KubeSphere安装整个过程根据网络情况可能需要30-60分钟。我建议使用tee命令将日志保存到文件方便后续排查问题。4. KubeSphere平台初始化与使用4.1 访问KubeSphere控制台部署完成后kubekey会输出访问信息##################################################### ### Welcome to KubeSphere! ### ##################################################### Console: http://192.168.1.101:30880 Account: admin Password: P88w0rd首次登录需要修改默认密码。登录后你会看到直观的仪表盘展示了集群的资源使用情况。4.2 基本功能探索KubeSphere提供了丰富的功能模块应用管理通过应用模板快速部署常见应用监控告警内置Prometheus和Grafana提供多维监控日志查询集中查看所有容器的日志存储管理支持多种存储方案动态供给多租户管理基于RBAC的细粒度权限控制我最常使用的是应用商店功能里面预置了MySQL、Redis、Nginx等常见应用的部署模板点击几下就能完成部署比手动写YAML方便多了。4.3 开启可插拔组件KubeSphere采用模块化设计很多高级功能需要手动开启以admin身份登录进入平台管理 → 集群管理选择CRD搜索ClusterConfiguration编辑ks-installer配置启用所需组件例如要开启DevOps功能devops: enabled: true保存后KubeSphere会自动安装相关组件可以通过以下命令查看进度kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l appks-installer -o jsonpath{.items[0].metadata.name}) -f5. 生产环境最佳实践5.1 高可用架构设计对于生产环境我建议采用多控制平面设计hosts: - {name: master1, address: 192.168.1.101, internalAddress: 192.168.1.101, user: root, password: your_password} - {name: master2, address: 192.168.1.102, internalAddress: 192.168.1.102, user: root, password: your_password} - {name: master3, address: 192.168.1.103, internalAddress: 192.168.1.103, user: root, password: your_password} roleGroups: etcd: - master1 - master2 - master3 control-plane: - master1 - master2 - master35.2 集群维护操作添加新节点修改config-sample.yaml添加新主机执行kk add nodes -f config-sample.yaml升级集群kk upgrade --with-kubernetes v1.23.8 --with-kubesphere v3.3.1 -f config-sample.yaml备份ETCD数据kk create etcd-backup --cluster production --backup-path /opt/etcd-backup5.3 常见问题排查问题1Pod一直处于Pending状态检查节点资源是否充足kubectl describe pod pod-name检查存储配置是否正确问题2节点NotReady检查kubelet服务状态systemctl status kubelet检查网络插件是否正常运行kubectl get pods -n kube-system问题3KubeSphere组件安装失败查看安装器日志kubectl logs -n kubesphere-system ks-installer-xxxx检查网络连接和资源配额在实际项目中我遇到最多的问题是网络插件配置不当导致的跨节点通信问题。Calico是KubeSphere的默认网络插件如果遇到网络问题可以尝试重新配置Calicokubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml