Java高级全套教程(十一)—— Kubernetes 超详细企业级实战教程(零基础到微服务部署)

发布时间:2026/6/1 12:32:14

Java高级全套教程(十一)—— Kubernetes 超详细企业级实战教程(零基础到微服务部署) Java高级全套教程十一—— Kubernetes 超详细企业级实战教程零基础到微服务部署学习目标本教程聚焦企业生产实战全覆盖K8s核心技术栈完成学习后可独立完成集群搭建、应用部署、服务治理、高可用架构搭建及微服务上云落地具体掌握要求如下Kubernetes 基础概念熟练掌握集群核心组件、资源对象定义、容器编排核心原理Kubernetes 架构精通Master、Node节点组件功能、通信机制与集群运行逻辑Kubernetes 集群搭建熟练使用kubeadm搭建单主多节点集群解决环境适配、网络异常等各类问题部署容器化应用掌握命令行、YAML清单两种部署方式熟练配置镜像策略、资源限制、健康检查Dashboard 可视化工具掌握部署、权限配置、集群可视化运维、资源监控操作Ingress 服务网关理解端口暴露方案优劣精通Ingress-Nginx部署、路由规则配置、域名代理实战Helm 包管理工具掌握仓库配置、Chart创建、模板定制、应用升级与回滚、批量部署方案K8s 高可用集群搭建掌握多Master节点架构、KeepalivedHaproxy高可用方案、集群故障转移原理K8s 微服务项目部署掌握微服务容器化打包、镜像推送、集群部署、网关统一接入、生产环境适配方案第一章 Kubernetes 核心介绍与发展背景1.1 容器编排技术演进历程在云计算与微服务普及之前企业项目部署经历了三次核心架构迭代每一次迭代都是为了解决资源利用率、部署效率、运维复杂度的核心问题第一代物理机部署早期企业直接将项目部署在物理服务器一台物理机运行多个业务应用。核心弊端极其明显硬件成本高昂、资源无法隔离单个应用故障会导致整台服务器所有服务瘫痪扩容、迁移难度极大完全无法适配互联网快速迭代的业务需求。第二代虚拟机部署为解决物理机资源浪费与隔离性问题虚拟化技术应运而生VMware、KVM。通过在物理机上虚拟出多台独立虚拟机每台虚拟机搭载完整操作系统独立部署单个应用。优势是实现了环境隔离但缺陷突出虚拟机操作系统占用大量内存、CPU、磁盘资源启动耗时分钟级资源冗余严重批量部署、扩容效率极低。第三代容器化部署容器技术以Docker为核心摒弃了完整虚拟机操作系统仅封装应用运行所需的依赖、库文件与运行环境内核共享宿主机系统资源。容器具备秒级启动、资源占用极低、环境一致性、可移植性强的核心优势彻底解决了虚拟机的资源冗余问题成为云原生应用的基础载体。第四代容器编排时代微服务架构落地后单一项目会拆分出数十个甚至上百个微服务对应数百个Docker容器。纯手动管理容器的启动、停止、扩容、故障恢复、负载均衡完全不现实容器编排工具应运而生用于自动化批量管理容器生命周期。1.2 Kubernetes 简介与核心优势Kubernetes简称K8s希腊语意为舵手、领航员是Google基于内部Borg系统开源的云原生容器编排引擎使用Go语言开发2014年正式开源后捐赠给CNCF云原生计算基金会目前是容器编排领域的行业标准。相较于传统容器编排工具Docker Swarm、Apache MesosK8s具备全方位优势全自动运维自动故障自愈、自动扩容缩容、滚动更新、版本回滚资源精细化调度基于CPU、内存、节点标签、亲和性策略智能调度容器高可用高可靠支持多主集群、故障转移、服务熔断适配生产高并发场景生态极其完善拥有海量插件、监控、日志、网关、包管理生态全覆盖企业运维需求跨平台兼容支持私有云、公有云、混合云可无缝迁移部署环境第二章 Kubernetes 核心架构与组件详解K8s采用经典的主从架构Master-Node集群所有节点分为控制平面Master和数据平面Node分工明确、解耦彻底保障集群高效稳定运行。2.1 Master 控制节点集群大脑Master节点是整个集群的管控核心负责接收用户操作指令、调度资源、维护集群状态、处理故障不运行业务容器生产环境核心包含四大核心组件全部支持高可用部署2.1.1 kube-apiserver集群唯一入口提供RESTful API接口所有集群操作创建/删除资源、查询状态都必须经过该组件。同时是各组件之间的通信枢纽具备认证、鉴权、限流、资源校验能力是集群最核心的组件。2.1.2 etcd高性能分布式键值对数据库用于持久化存储集群所有资源状态数据节点信息、Pod、服务、配置、权限等支持数据备份与恢复保证集群数据一致性仅部署在Master节点。2.1.3 kube-controller-manager自动化控制中心内置多种控制器持续监控集群资源状态确保集群实际状态与用户期望状态一致。核心包含副本控制器、节点控制器、命名空间控制器、服务账号控制器等实现故障自动修复、资源自动管理。2.1.4 kube-scheduler资源调度器监听未调度的Pod资源根据节点资源使用率、标签亲和性、污点容忍度、地域策略等多重规则智能将Pod分配到最优的Node节点实现集群资源均衡利用。2.2 Node 工作节点业务载体Node节点是真正运行业务容器的工作节点接收Master节点的调度指令执行容器创建、运行、销毁等操作。集群可扩展任意数量的Node节点单节点故障不会影响整体集群运行核心包含三大组件2.2.1 kubelet每个Node节点的专属代理组件直接与Master apiserver通信负责管理当前节点所有Pod与容器。核心功能接收调度指令、创建销毁容器、监控容器运行状态、上报节点资源信息、执行健康检查。2.2.2 kube-proxy节点网络代理组件负责实现集群内部Service的负载均衡与网络转发。通过监听集群服务变化动态更新节点路由规则实现Pod之间、外部与集群内部的网络通信支持IPVS、iptables两种转发模式。2.2.3 容器运行时Container Runtime容器运行环境负责镜像拉取、容器启停、资源隔离等底层操作。K8s1.24版本前默认支持Docker新版兼容containerd、CRI-O等主流运行时是容器运行的底层依赖。第三章 K8s 集群环境搭建kubeadm 企业标准方案3.1 集群搭建方式对比搭建方式优势劣势适用场景二进制部署高度自定义、无版本绑定步骤繁琐、配置复杂、极易出错大型生产定制化集群kubeadm官方工具、一键部署、配置简洁、稳定性高自定义程度有限学习、中小型生产集群主流云平台一键部署零配置、极速搭建、高可用收费、厂商绑定、灵活性差公有云快速落地场景本教程采用kubeadm搭建集群适配学习与企业生产基础环境兼顾简单性与规范性。3.2 环境硬件与系统要求操作系统CentOS 7.9 / Ubuntu 18.04推荐CentOS7硬件配置单节点内存≥2GCPU≥2核磁盘≥20G网络要求所有节点内网互通、可访问外网关闭防火墙与SELinux核心约束必须关闭swap分区否则会导致集群调度异常、Pod启动失败3.3 集群规划搭建经典单主两节点集群后续可无缝扩容为高可用多主集群Master节点1台IP192.168.1.100主机名k8s-masterNode1节点1台IP192.168.1.101主机名k8s-node1Node2节点1台IP192.168.1.102主机名k8s-node23.4 全局环境初始化所有节点执行所有节点统一执行环境预处理规避集群搭建常见报错以下为全套实操命令3.4.1 关闭防火墙与SELinux# 关闭并禁用防火墙systemctl stop firewalld systemctl disable firewalld# 永久关闭SELinuxsed-is/^enforcing/disabled//etc/selinux/config setenforce0# 验证SELinux状态确认显示Permissivegetenforce3.4.2 永久关闭Swap分区# 注释所有swap挂载配置sed-ris/.*swap.*/#/g/etc/fstab# 临时关闭swapswapoff-a# 验证swap是否关闭无输出即为成功swapon-s3.4.3 开启网桥转发与IP转发解决容器跨节点网络通信异常问题开启内核网络转发参数# 写入内核配置cat/etc/sysctl.d/k8s-network.confEOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF# 生效配置sysctl--system# 验证内核参数sysctlnet.ipv4.ip_forward3.4.4 时间同步与主机名配置# 安装时间同步工具yuminstallntpdate-y# 同步阿里云时间服务器ntpdate ntp.aliyun.com# 设置开机自动时间同步echo*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com/var/spool/cron/root# 分别设置各节点主机名三台节点分别执行对应命令hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2# 所有节点配置hosts映射cat/etc/hostsEOF 192.168.1.100 k8s-master 192.168.1.101 k8s-node1 192.168.1.102 k8s-node2 EOF# 验证主机名hostname3.5 安装Docker容器运行时所有节点3.5.1 配置清华镜像源# 安装依赖工具yuminstall-yyum-utils device-mapper-persistent-data lvm2# 配置Docker清华yum源yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo# 更新yum缓存yum makecache fast3.5.2 安装Docker并配置国内镜像加速# 安装稳定版Dockeryuminstall-ydocker-ce docker-ce-cli containerd.io# 配置Docker国内镜像加速器阿里云网易公共镜像mkdir-p/etc/dockercat/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } } EOF# 启动并开机自启Dockersystemctl daemon-reload systemctl startdockersystemctlenabledocker# 验证Docker安装成功docker--versiondockerinfo3.6 安装K8s核心组件所有节点3.6.1 配置阿里云K8s yum源# 新建K8s源文件cat/etc/yum.repos.d/kubernetes.repoEOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck1 repo_gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF# 更新yum缓存yum makecache fast3.6.2 安装指定版本K8s组件统一安装v1.19.4稳定版本企业生产常用版本兼容性极强# 安装kubeadm、kubelet、kubectlyuminstall-ykubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4# 锁定版本防止自动升级yum mark hold kubelet kubeadm kubectl# 开机自启kubeletsystemctlenablekubelet# 此时kubelet启动失败为正常现象等待集群初始化后自动恢复# 验证组件版本kubeadm version kubectl version--client3.7 初始化Master节点仅主节点执行# 初始化K8s主节点kubeadm init\--apiserver-advertise-address192.168.1.100\--image-repository registry.aliyuncs.com/google_containers\--kubernetes-version v1.19.4\--service-cidr10.96.0.0/12\--pod-network-cidr10.244.0.0/16\--ignore-preflight-errorsall执行成功后控制台会输出node节点加入集群指令务必保存示例如下kubeadmjoin192.168.1.100:6443--tokenxxxxx.xxxxxxxxxxxx\--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx3.7.1 配置kubectl管理员权限# 创建.kube目录mkdir-p$HOME/.kube# 复制集群配置文件sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config# 授权当前用户sudochown$(id-u):$(id-g)$HOME/.kube/config# 验证集群状态kubectl get nodes kubectl get cs3.8 加入Node节点所有从节点执行使用Master初始化输出的join指令将两个Node节点加入集群# 节点加入集群替换为自己的token和hashkubeadmjoin192.168.1.100:6443--tokenxxxxx.xxxxxxxxxxxx\--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx# 若token过期在Master节点重新生成tokenkubeadm token create --print-join-command3.9 安装Flannel网络插件仅Master执行K8s集群默认无网络插件节点、Pod之间无法通信必须安装CNI网络插件这里使用企业常用的Flannel# 在线应用Flannel网络配置国内适配稳定版kubectl apply-fhttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml# 等待所有网络Pod启动实时查看集群节点状态kubectl get nodes-w# 查看网络插件Pod运行状态kubectl get pods-nkube-flannel当所有节点状态变为Ready代表集群搭建完成第四章 K8s 核心基础概念与资源对象4.1 Pod 核心原理最小调度单元Pod是K8s集群中最小的资源调度单元不可分割一个Pod封装一个或多个紧密耦合的业务容器是容器的上层包装。4.1.1 Pod 核心特性共享网络栈同一Pod内所有容器共享IP地址、端口、网络命名空间容器之间可直接通过localhost通信共享存储卷同一Pod容器共享挂载的Volume数据卷实现容器间数据共享生命周期一致Pod是原子单位创建则所有容器启动删除则所有容器销毁不支持单个容器启停唯一IP每个Pod拥有集群唯一IP集群内部通过PodIP通信4.1.2 Pod 基础实操命令# 查看所有Pod默认default命名空间kubectl get pods# 查看所有命名空间Podkubectl get pods --all-namespaces# 查看Pod详细信息排查异常必备kubectl describe pod[Pod名称]# 进入Pod容器内部kubectlexec-it[Pod名称]-- /bin/bash# 查看Pod日志kubectl logs[Pod名称]# 强制删除异常Podkubectl delete pod[Pod名称]--grace-period0--force4.2 核心控制器Pod 生命周期管理K8s不直接管理Pod通过控制器实现Pod的批量管理、自愈、扩容、更新六大核心控制器适配不同业务场景4.2.1 ReplicaSet副本控制器核心作用保证集群中始终维持指定数量的Pod副本若Pod异常退出、删除控制器会自动重建若多余Pod则自动回收。仅负责副本数量维持不支持版本更新与回滚现已被Deployment替代。4.2.2 Deployment部署控制器最常用企业生产首选控制器基于ReplicaSet封装新增大量生产级功能支持滚动更新新版本逐步替换旧版本Pod实现服务零停机更新支持版本回滚更新异常时一键回退到历史稳定版本支持弹性扩容缩容动态调整Pod副本数量声明式管理只需定义期望状态控制器自动完成运维操作4.2.3 Deployment 实操命令# 查看所有部署资源kubectl get deployments# 创建Deployment命令行快速创建kubectl create deploy test-nginx--imagenginx:1.21-alpine# 扩容副本数为5kubectl scale deployment test-nginx--replicas5# 滚动更新镜像kubectlsetimage deployment/test-nginxnginxnginx:1.22-alpine# 查看更新历史kubectl rollouthistorydeployment/test-nginx# 回滚上一个版本kubectl rollout undo deployment/test-nginx# 重启部署重建所有Podkubectl rollout restart deployment/test-nginx# 删除Deploymentkubectl delete deployment test-nginx4.2.3 DaemonSet守护进程控制器确保集群每个Node节点仅运行一个指定Pod新节点加入集群自动创建Pod节点下线自动回收。主要用于集群全局组件日志收集、监控采集、网络插件等。4.2.4 Job CronJob任务控制器Job一次性任务控制器保证任务Pod成功执行一次后自动销毁适用于数据备份、脚本执行等一次性场景CronJob定时任务控制器基于Linux cron表达式周期性执行任务适用于定时清理日志、定时统计数据等场景4.2.4 Job/CronJob 实操命令# 查看任务资源kubectl getjobskubectl get cronjobs# 创建定时任务每天凌晨2点执行kubectl create cronjob log-clean--imagebusybox--schedule0 2 * * *--rm-rf/var/log/*# 手动触发定时任务kubectl create job--fromcronjob/log-clean log-clean-manual# 删除任务kubectl delete cronjob log-clean4.3 Service 服务暴露与负载均衡Pod是临时性资源重启、扩容后IP会动态变化无法直接对外提供稳定服务。Service用于为一组Pod提供固定访问入口、负载均衡、服务发现能力四种类型适配不同场景4.3.1 ClusterIP默认类型自动分配集群内部虚拟IP仅支持集群内部服务访问默认负载均衡策略适用于微服务内部互相调用。4.3.2 NodePort节点端口在所有节点开启固定端口外部用户可通过「任意节点IP端口」访问服务端口范围30000-32767适用于测试环境服务暴露。4.3.3 LoadBalancer负载均衡器在NodePort基础上对接云厂商负载均衡服务分配独立公网IP适用于公有云生产环境对外服务。4.3.4 ExternalName外部服务映射将集群外部域名服务映射到集群内部实现集群内部直接访问外部第三方服务无端口、无代理仅做域名转发。4.3.5 Service 实操命令# 查看所有服务kubectl get svc# 查看服务详细信息kubectl describe svc[服务名称]# 暴露Deployment为NodePort服务kubectl expose deployment test-nginx--typeNodePort--port80# 暴露为ClusterIP服务kubectl expose deployment test-nginx--typeClusterIP--port80# 删除服务kubectl delete svc[服务名称]第五章 K8s 容器化应用部署实战本章通过YAML资源清单企业标准方式部署Nginx、Tomcat、SpringBoot微服务全程采用声明式部署包含资源限制、健康检查、镜像策略等生产配置。5.1 YAML资源清单核心字段详解所有K8s资源均通过YAML文件定义核心通用字段apiVersion资源API版本核心资源为v1控制器资源为apps/v1kind资源类型Deployment、Service、Pod等metadata元数据包含资源名称、命名空间、标签、注释spec期望状态定义资源运行参数副本数、镜像、端口、资源限制等status实际状态集群自动生成无需手动配置5.1.1 YAML 通用实操命令# 基于YAML文件创建/更新资源kubectl apply-f[文件名.yaml]# 递归应用文件夹下所有YAMLkubectl apply-f./yaml/# 查看YAML资源配置kubectl get[资源类型][资源名称]-oyaml# 删除YAML定义的资源kubectl delete-f[文件名.yaml]# 校验YAML语法是否正确kubectl apply-f[文件名.yaml]--dry-runclient5.2 生产级部署 Nginx 服务5.2.1 编写部署清单 nginx-deploy.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-webnamespace:defaultlabels:app:nginx-webspec:replicas:3# 启动3个Pod副本selector:matchLabels:app:nginx-webstrategy:type:RollingUpdate# 滚动更新策略rollingUpdate:maxSurge:1# 最多超1个副本maxUnavailable:0# 更新时无不可用Podtemplate:metadata:labels:app:nginx-webspec:containers:-name:nginx-containerimage:nginx:1.21-alpine# 轻量稳定镜像imagePullPolicy:IfNotPresent# 本地有则不拉取ports:-containerPort:80# 资源限制生产必备resources:requests:cpu:100mmemory:128Milimits:cpu:500mmemory:256Mi# 健康检查存活就绪探针livenessProbe:httpGet:path:/port:80initialDelaySeconds:5periodSeconds:10readinessProbe:httpGet:path:/port:80initialDelaySeconds:3periodSeconds:55.2.2 编写服务暴露清单 nginx-svc.yamlapiVersion:v1kind:Servicemetadata:name:nginx-web-svcnamespace:defaultspec:selector:app:nginx-webtype:NodePortports:-port:80# 集群内部端口targetPort:80# 容器端口nodePort:30080# 固定外部访问端口5.2.3 执行部署与验证# 部署资源kubectl apply-fnginx-deploy.yaml kubectl apply-fnginx-svc.yaml# 查看部署状态kubectl get deploy kubectl get pods kubectl get svc# 访问测试任意节点IP:30080# 查看Pod挂载、网络详情kubectl get pods-owide5.3 SpringBoot 微服务容器化部署完整流程5.3.1 项目打包与Dockerfile编写基于JDK8基础镜像优化镜像分层、减小镜像体积生产级Dockerfile# 基础镜像 FROM openjdk:8-jre-alpine # 作者信息 MAINTAINER k8s-admin # 设置时区 ENV TZAsia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone # 复制jar包 COPY target/demo-k8s-1.0.0.jar /app.jar # 启动命令 ENTRYPOINT [java,-jar,/app.jar,--server.port8080]5.3.2 镜像构建与仓库推送# 构建镜像dockerbuild-tdemo-springboot:1.0.# 登录DockerHub/阿里云镜像仓库dockerlogin# 镜像打标签并推送以阿里云镜像仓库为例dockertag demo-springboot:1.0 registry.cn-hangzhou.aliyuncs.com/你的仓库名/demo-springboot:1.0dockerpush registry.cn-hangzhou.aliyuncs.com/你的仓库名/demo-springboot:1.0# 查看本地镜像dockerimages5.3.3 K8s生产级部署清单apiVersion:apps/v1kind:Deploymentmetadata:name:springboot-demonamespace:defaultspec:replicas:2selector:matchLabels:app:springboot-demotemplate:metadata:labels:app:springboot-demospec:containers:-name:springboot-demoimage:registry.cn-hangzhou.aliyuncs.com/你的仓库名/demo-springboot:1.0imagePullPolicy:Alwaysports:-containerPort:8080resources:requests:cpu:200mmemory:256Milimits:cpu:1000mmemory:512MilivenessProbe:tcpSocket:port:8080initialDelaySeconds:10periodSeconds:15---apiVersion:v1kind:Servicemetadata:name:springboot-demo-svcspec:selector:app:springboot-demotype:NodePortports:-port:8080targetPort:8080nodePort:30880# 部署SpringBoot微服务kubectl apply-fspringboot-deploy.yaml# 验证部署状态kubectl get deploy springboot-demo kubectl get pods|grepspringboot kubectl get svc springboot-demo-svc第六章 K8s Dashboard 可视化运维工具6.1 Dashboard 核心作用K8s Dashboard是官方开源Web可视化管理平台替代繁琐的kubectl命令行操作支持可视化查看集群资源、部署应用、监控状态、查看日志、管理权限极大提升运维效率。6.2 部署 Dashboard适配v1.19集群# 下载官方部署清单wgethttps://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml# 修改配置开启NodePort暴露、替换国内镜像解决外网拉取失败问题# 直接应用修改后的配置kubectl apply-frecommended.yaml# 查看Dashboard运行状态kubectl get pods-nkubernetes-dashboard kubectl get svc-nkubernetes-dashboard6.3 配置管理员访问权限默认Dashboard权限受限创建超级管理员账号获取访问Token# 创建管理员服务账号kubectl create serviceaccount dashboard-admin-nkube-system# 绑定集群超级管理员权限kubectl create clusterrolebinding dashboard-admin-binding\--clusterrolecluster-admin\--serviceaccountkube-system:dashboard-admin# 获取登录Tokenkubectl describe secrets-nkube-system$(kubectl-nkube-system get secret|grepdashboard-admin|awk{print $1})通过Token登录Web界面即可实现全集群可视化运维。第七章 Ingress 网关服务实战7.1 传统服务暴露方案弊端NodePort方式每个服务独占一个节点端口微服务数量多会导致端口泛滥、管理混乱、安全性差LoadBalancer依赖云厂商服务、成本高、耦合性强均不适合生产环境。Ingress是生产环境标准服务暴露方案作为K8s集群网关统一入口、统一域名、统一流量管控。7.2 Ingress 核心优势仅暴露一个统一端口通过域名、路径路由区分不同微服务支持HTTP/HTTPS、域名匹配、路径重写、权重分发、黑白名单自带负载均衡、熔断、限流基础能力适配微服务架构无云厂商绑定私有化集群、公有云集群均可使用7.3 部署 Ingress-Nginx 控制器# 下载部署清单wgethttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml# 替换国内镜像修复拉取失败问题部署组件kubectl apply-fdeploy.yaml# 查看Ingress运行状态kubectl get pods-ningress-nginx kubectl get svc-ningress-nginx7.4 自定义 Ingress 路由规则apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:micro-service-ingressnamespace:defaultannotations:nginx.ingress.kubernetes.io/rewrite-target:/kubernetes.io/ingress.class:nginxspec:rules:-host:web.demo.comhttp:paths:-path:/nginxpathType:Prefixbackend:service:name:nginx-web-svcport:number:80-host:api.demo.comhttp:paths:-path:/pathType:Prefixbackend:service:name:springboot-demo-svcport:number:8080# 应用Ingress路由规则kubectl apply-fingress-rules.yaml# 查看Ingress配置kubectl get ingress kubectl describe ingress micro-service-ingress配置本地hosts域名映射即可通过自定义域名访问不同微服务实现统一网关接入。第八章 Helm 包管理工具实战8.1 Helm 核心价值K8s部署复杂应用需要维护大量YAML文件手动修改、升级、回滚效率极低、极易出错。Helm是K8s官方包管理工具类似Linux的yum、Python的pip通过Chart模板统一管理应用资源实现应用一键部署、升级、回滚、批量运维。8.2 Helm 三大核心概念Helm本地命令行工具用于管理Chart、部署应用、管理版本Chart应用安装包包含所有YAML模板、配置文件是应用的封装集合ReleaseChart部署到集群后的运行实例一个Chart可生成多个Release8.3 Helm 安装与国内仓库配置# 上传解压Helm安装包配置全局命令mvlinux-amd64/helm /usr/bin/chmodx /usr/bin/helm# 验证Helm安装helm version# 添加国内稳定仓库helm repoaddstable https://mirror.azure.cn/kubernetes/charts helm repoaddaliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts# 更新仓库索引helm repo update# 搜索仓库应用helm search repo mysql helm search repo nginx8.4 自定义 Chart 模板部署微服务# 创建自定义Chart模板helm create micro-chart# 清空默认模板自定义微服务模板rm-rfmicro-chart/templates/*# 生成Deployment、Service模板文件kubectl create deployment micro-demo--imagedemo-springboot:1.0 --dry-run-oyamlmicro-chart/templates/deploy.yaml kubectl expose deployment micro-demo--port8080--typeClusterIP --dry-run-oyamlmicro-chart/templates/svc.yaml# 基于模板一键部署helminstallmicro-service ./micro-chart# 查看部署版本helm list# 应用升级helm upgrade micro-service ./micro-chart# 版本回滚helm rollback micro-service1# 卸载应用helm uninstall micro-service第九章 K8s 多Master高可用集群搭建9.1 高可用架构原理单Master集群存在单点故障风险Master节点宕机将导致整个集群无法管控。生产环境采用多Master Keepalived Haproxy高可用方案Haproxy实现多个Master节点apiserver负载均衡Keepalived实现虚拟IPVIP故障自动漂移主节点故障自动切换备用节点多Master节点冗余备份杜绝单点故障9.2 高可用核心部署步骤9.2.1 所有Master节点安装组件# 安装依赖与高可用组件yuminstall-ykeepalived haproxy conntrack-tools libseccomp# 配置开机自启systemctlenablekeepalived haproxy# 验证组件状态systemctl status keepalived systemctl status haproxy9.2.2 Keepalived 虚拟IP配置所有Master节点统一配置keepalived.conf设置VIP为192.168.1.50实现故障漂移。# 备份默认配置cp/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak# 写入高可用配置cat/etc/keepalived/keepalived.confEOF global_defs{router_id K8S-MASTER}vrrp_instance VI_1{state MASTER interface eth0 virtual_router_id51priority100advert_int1authentication{

相关新闻