Serverless入门课
蒲松洋(秦粤)
前百度国际化前端组组长
立即订阅
4719 人已学习
课程目录
已完结 16 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (2讲)
开篇词 | 说来说去,到底Serverless要解决什么问题?
免费
特别放送 | 为什么阿里要举集团之力趟坑Serverless?
基础篇 (4讲)
01|定义:到底什么是Serverless?
02 | 原理:通过一个案例,理解FaaS的运行逻辑
03 | 原理:FaaS的两种进程模型及应用场景
04 | 原理:FaaS应用如何才能快速扩缩容?
进阶篇 (3讲)
05 | 后端BaaS化(上):NoOps的微服务
06 | 后端BaaS化(中):业务逻辑的拆与合
07 | 后端BaaS化(下):Container Serverless
实战篇 (4讲)
08 | 搭建私有Serverless(一):K8s和云原生CNCF
09 | 搭建私有Serverless(二):基于K8s的Serverless
10 | 经验:Serverless架构应该如何选型?
11 | 经验:Serverless开发最佳实践
结束语 (2讲)
结束语 | 带你整体回顾我们的Serverless案例
结课问卷获奖用户名单
期末测试 (1讲)
期末测试 | 有关Serverless,你掌握了多少呢?
Serverless入门课
15
15
1.0x
00:00/00:00
登录|注册

08 | 搭建私有Serverless(一):K8s和云原生CNCF

蒲松洋 2020-05-04
你好,我是秦粤。上节课我们只是用 Docker 部署了 index.js,如果我们将所有拆解出来的微服务都用 Docker 独立部署,我们就要同时管理多个 Docker 容器,也就是 Docker 集群。如果是更复杂一些的业务,可能需要同时管理几十甚至上百个微服务,显然我们手动维护 Docker 集群的效率就太低了。而容器即服务 CaaS,恰好也需要集群的管理工具。我们也知道 FaaS 的底层就是 CaaS,那 CaaS 又是如何管理这么多函数实例的呢?怎么做才能提升效率?
我想你应该听过 Kubernetes,它也叫 K8s(后面统一简称 K8s),用于自动部署、扩展和管理容器化应用程序的开源系统,是 Docker 集群的管理工具。为了解决上述问题,其实我们就可以考虑使用它。K8s 的好处就在于,它具备跨环境统一部署的能力。
这节课,我们就试着在本地环境中搭建 K8s 来管理我们的 Docker 集群。但正常情况下,这个场景需要几台机器才能完成,而通过 Docker,我们还是可以用一台机器就可以在本地搭建一个低配版的 K8s。
下节课,我们还会在今天内容的基础上,用 K8s 的 CaaS 方式实现一套 Serverless 环境。通过这两节课的内容,你就可以完整地搭建出属于自己的 Serverless 了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Serverless入门课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(9)

  • 神仙朱
    文中疑问:又因为 kubectl 是通过加密通信的,所以我们可以在一台电脑上同时控制多个 K8s 集群

    这两者为什么是因果关系没太懂,不是加密通信就不能控制多个集群吗,反正都是指定上下文

    作者回复: 这里加密通信指的TLS,加密管道。上下文建立在加密管道之上。
    我们可以通过切换上下文来操作不同的K8s集群,而Kubectl控制又建立在加密管道之上,比较安全。

    2020-07-08
  • 托尼斯威特
    docker桌面版在preference中enable Kubernetes会自动下载repos.
    docker-k8s-prefetch.sh是用来提前从阿里云的repo下载这些repo,再改名到google的repo的名字.
    但是我发现, 我启动docker带的Kubernetes时, 还是会下载一套新版的repos.

    作者回复: 是的,脚本是预拉取镜像的。这个脚本可能有些旧了,可以查看一下docker里面的K8s版本号,修改脚本里面的对应版本号。

    2020-07-06
  • maomaostyle
    云厂商serverless的最小管理调度粒度是不是就等于k8s的pod?

    作者回复: 最小颗粒度是pod里面的容器,一个pod可以部署多个容器。当然,云厂商除了K8s,还有其他VM和sandbox方案。

    2020-06-30
  • Larry
    一个函数实例对应一个CaaS,还是多个函数实例对应一个CaaS?

    作者回复: 这个跟FaaS的用法是一样的,都可以的。
    具体看资源的复用与隔离,用微服务拆分的角度思考一下。

    2020-05-13
  • miser
    好奇怪 为什么 deployment.apps/myapp READY 是0/1

    NAME READY UP-TO-DATE AVAILABLE AGE
    deployment.apps/load-generator 1/1 1 1 12h
    deployment.apps/myapp 0/1 1 0 2m59s

    作者回复: 这个要通过查看日志去看看卡在哪里了。
    kubectl logs deployment.apps/myapp
    如果调试这些问题,你最好在课程首页申请加微信群,这样我好帮你看看怎么解决问题。

    2020-05-06
  • 春暖花开
    我们在serverless平台下写的函数是怎么被调用的,
    通常java的springboot或者spingcloud应用,会以jar
    的方式启动后,监听端口,http请求数据最终会发送到监听端口,
    然后一些列的解析处理,通过controller层最终到我们的业务逻辑。

    但是serverless是个怎么处理方式,数据是怎么就到我们的处理函数呢?
    是serverless平台怎么包装这个函数?这个一直没有明白。
    2020-05-06
  • 春暖花开
    有个问题没有明白:我们在serverless平台下写的函数是怎么被调用的,
    通常java的springboot或者spingcloud应用,会以jar
    的方式启动后,监听端口,http请求数据最终会发送到监听端口,
    然后一些列的解析处理,通过controller层最终到我们的业务逻辑。

    但是serverless是个怎么处理方式,数据是怎么就到我们的处理函数呢?
    是serverless平台怎么包装这个函数?这个一直没有明白。

    作者回复: 你不明白的应该是如何从0启动吧?
    可能你看完Knative的activator介绍会容易理解一些。

    activator就像一个代理。用户的http请求访问时,如果没有函数实例,activator会先接收请求,并启动函数实例(从0启动)。函数实例启动完成后,再将请求转接过去。

    我用Node.js举例,函数实例启动后,会注册上游的端口号(例如3001)。上游Nginx,当HTTP请求时,会将HTTP request封装成对象,传递给上游的3001端口应用去处理。
    我们之所以要在FaaS函数里面指定入口handler,就是做这个处理的。

    2020-05-06
  • 一步
    在 K8s 中 容器不是部署在 Node 节点上吗? 怎么文中部署在了Master 节点了? Master 节点也可以充当 Node节点吗?

    作者回复: master节点通常不推荐部署,不过例子中本地的minikube或者Docker Desktop为了节省本地资源,只有一个master节点。所以会部署在master节点。

    2020-05-04
    2
  • 我来也
    由于我有现成的k8s环境,所以就不用重新搭建,可以直接使用了.

    最近两天在折腾阿里云的弹性容器实例(ECI).
    想不到这东西还能使用抢占式实例(Spot)的模式,2CPU-2G的实例,不到0.05元每小时的价格.
    跑一些临时的任务还是很好的.
    就是这里的还不太完善,不像竞价实例那样,有具体的规格和历史的参考价格.

    另外Kubernetes还可以与ECI对接,不管是阿里云的k8s集群,还是Serverless Kubernetes,还是自建的k8s集群,
    都可以使用Virtual Kubelet来创建虚拟k8s工作节点,加入到k8s集群中.
    虚拟节点本身不要钱,只是调度到上面的pod需要申请ECI实例,才需要按秒付费.
    我只是在阿里云的k8s上尝试了一下,想折腾的小伙伴可以用它来扩展本地机器上创建的k8s集群.

    相比自建的k8s工作节点,ECI实例就不太灵活.
    一个ECI实例好像对应一个pod,ECI实例的最小规格是0.25CPU和512MB内存.
    对小应用来说,还是蛮浪费的.
    在我们的开发环境中,一个4CPU8G的工作节点,都是跑60+个pod的.

    之前发现在ECI上拉镜像超级超级慢.
    今天又尝试了下ECI的镜像缓存功能.
    这个功能估计目前还不完善,反正我是遇到了缓存的镜像未生效的问题,已提交工单咨询了.
    话说这个功能有点费钱.
    1.制作镜像缓存需要用到ECI.
    2.保存镜像需要用到云盘快照.
    3.使用镜像还会自动创建一个云盘,额外挂载到ECI上.(与ECI同生命周期)
    用的磁盘还都是较好的ESSD,还都是20GB起步,单个镜像缓存最多支持包含20个镜像.

    还不如把镜像同步到阿里云的镜像仓库中,再走私网拉取镜像.

    作者回复: 你可以用ACK,将ECS资源节点化,变成K8s worker节点。这样比较稳定。
    ECI有缓存加速,通常需要你给自己的应用构建一个基础镜像,例如所有的应用都是基于CentOS,在CentOS上加上一些常用的二进制包或者库函数。构建自己的基础镜像。
    这样可以加速。

    2020-05-04
    5
收起评论
9
返回
顶部