云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
6217 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

05|K8s 极简实战:示例应用介绍

你好,我是王炜。
上一章,我们以一个 Python 应用为例,学习了将应用迁移到云原生架构下的完整过程,也就是从容器化、部署到 K8s、弹性伸缩最后到 GitOps 的全过程。在实战的过程中,我没有太多地介绍概念,而是让你直接上手感受 K8s 和 GitOps 的强大之处。
这一章,我会设计一个更加接近真实业务的示例应用。这个应用会涵盖你在工作中常用的 K8s 对象,包括 Deployment、Service、Ingress、HPA、Namespace、ConfigMap 等。在将这个应用部署到 K8s 的过程中,我们会逐渐深入到每个 K8s 对象中。
这节课,我们先来了解一下这个示例应用。
在开始学习之前,你需要做好以下准备:
准备一台电脑(首选 Linux 或 macOS,Windows 也适用,注意操作差异);

架构介绍

应用架构

我设计的这个示例应用是一套微服务架构的应用,你可以在 GitHub 上获取源码,源码目录结构如下:
$ ls
backend deploy frontend
在这里,backend 目录为后端源码,frontend 目录为前端源码,deploy 目录是应用的 K8s Manifest,前后端都已经包含构建镜像所需的 Dockerfile。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了一个 K8s 极简实战示例应用的部署过程,旨在让读者通过实际操作来感受 K8s 和 GitOps 的强大之处。示例应用是一套微服务架构的应用,包括前端、后端和数据库,展示了前端界面和 K8s 部署架构。文章详细介绍了如何在本地创建新的 K8s 集群,部署示例应用的步骤,包括创建命名空间、部署数据库、前后端工作负载和服务、Ingress 和 HPA 策略等。读者可以通过一次性部署所有示例应用对象或逐个创建对象来部署示例应用。最后,文章展示了如何检查资源状态,并指引读者在浏览器中访问示例应用的前端界面。整体来说,本文通过实际操作向读者展示了 K8s 极简实战示例应用的部署过程,适合读者快速了解 K8s 部署实践的技术特点。文章还提到了 K8s 对象解析和思考题,为读者提供了更多的学习和思考空间。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • includestdio.h
    “首先,你可以使用 kubect get all 来查看某个命名空间下的所有资源” 。命令写错了,kubectl 删除 Postgres Pod 后,添加的数据不存在。原因:写入的数据位于容器的可写层,不commit不保存,delete 后,重新拉起的 Pod 基于原始容器镜像创建,仅存在原始的只读层数据。需要保存数据的话,可以提前通过 volume 等做好持久化方案,把容器和数据解耦

    作者回复: 感谢指正。 回答非常正确!

    2022-12-19归属地:广东
    7
  • Y
    继续追剧

    作者回复: 😄

    2022-12-19归属地:广东
    3
  • GAC·DU
    前端添加的数据会被删除,因为没有挂盘存储。生产环境用那种存储框架?

    作者回复: 在生产环境下有很多存储方案,比如: 1. https://github.com/rook/rook 2. https://github.com/ceph/ceph 3. https://github.com/longhorn/longhorn 如果你用的是云厂商的托管 K8s 集群,云厂商一般会直接提供现成的存储方案,比如结合自家云盘的存储,不需要自建。

    2022-12-19归属地:广东
    2
  • 熊悟空的凶
    老师你好 麻烦问下 您画图工具用什么画的 挺好的

    作者回复: Draw.io

    2022-12-29归属地:广东
    1
  • Amosヾ
    图里不是5个pod吗

    作者回复: 感谢指正。

    2022-12-19归属地:广东
    1
  • Sophia-百鑫
    我在学习后面章节时 ,找到了 503 失败的原因,是在我clone 到本地的代码里, frontend deployment 中 pod定义标签 和 frontend service 中 pod 选择器的标签不同 (估计是我不小心碰到误改了老师的原文),导致后面无法生产endpoint对象 也无法找到frontend service 与 front pod 的对应关系,导致无法提供服务。 能读懂各个manifest文件及里面参数的含义和关联关系非常重要。是学习K8S 的核心。

    作者回复: 👍🏻值得借鉴的解决思路

    2023-07-12归属地:上海
  • Sophia-百鑫
    Mac 上完成集群部署,解决了 frontend pod OOMKILL 问题后,5个pod 都正常 running。 但浏览器访问127.0.0.1 报 503 。 kubernetes-example git:(main) ✗ kubectl get pods -n example NAME READY STATUS RESTARTS AGE backend-f8ffdcdd6-57qkp 1/1 Running 0 28m backend-f8ffdcdd6-7rvhv 1/1 Running 0 28m frontend-696c87cc48-4qqvv 1/1 Running 0 28m frontend-696c87cc48-kg2jw 1/1 Running 0 28m postgres-f4745bb69-2m2bt 1/1 Running 0 28m ➜ kubernetes-example git:(main) ✗ kubectl get all -n example NAME READY STATUS RESTARTS AGE pod/backend-f8ffdcdd6-57qkp 1/1 Running 0 31m pod/backend-f8ffdcdd6-7rvhv 1/1 Running 0 31m pod/frontend-696c87cc48-4qqvv 1/1 Running 0 31m pod/frontend-696c87cc48-kg2jw 1/1 Running 0 31m pod/postgres-f4745bb69-2m2bt 1/1 Running 0 31m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/backend-service ClusterIP 10.96.56.77 <none> 5000/TCP 31m service/frontend-service ClusterIP 10.96.119.215 <none> 3000/TCP 31m service/pg-service ClusterIP 10.96.46.127 <none> 5432/TCP 31m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/backend 2/2 2 2 31m deployment.apps/frontend 2/2 2 2 31m deployment.apps/postgres 1/1 1 1 31m NAME DESIRED CURRENT READY AGE replicaset.apps/backend-f8ffdcdd6 2 2 2 31m replicaset.apps/frontend-696c87cc48 2 2 2 31m replicaset.apps/postgres-f4745bb69 1 1 1 31m NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AG

    作者回复: 是用的 Kind 吗,检查一下 ingress-nginx 是否部署成功,ingress 对象是否正常匹配到了 service,service 关联的 pod 是否正常运行。

    2023-07-09归属地:上海
    3
  • Da Vinci
    部署完ingress,访问404,是有什么不对吗,老师

    作者回复: 检查一下 ingress-nginx pod 是不是 running 状态。

    2023-04-23归属地:广东
  • 渣渣辉
    老师你好,我通过下载github项目进行部署。但是当我访问前端的时候出现了502 BadGateway错误。然后查看pod的时候发现前端的pod重启了。并且在重启成功后再次访问还是出现了502的错误。我用的是m1芯片的macbook。

    作者回复: 方便贴一下 pod 的日志信息吗

    2023-04-13归属地:日本
    3
  • Alex
    针对无法拉取镜像的情况,建议修改下KIND内集群的镜像源到国内阿里的镜像源上 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration imageRepository: registry.aliyuncs.com/google_containers nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP

    作者回复: 👍🏻感谢分享

    2023-04-12归属地:山东
收起评论
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部