云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
5442 人已学习
新⼈⾸单¥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
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(23)

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

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

    归属地:广东
    7
  • Y
    继续追剧

    作者回复: 😄

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

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

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

    作者回复: Draw.io

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

    作者回复: 感谢指正。

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

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

    归属地:上海
  • 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 是否正常运行。

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

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

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

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

    归属地:日本
    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

    作者回复: 👍🏻感谢分享

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