08 | 搭建私有Serverless(一):K8s和云原生CNCF
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何搭建私有Serverless环境的第一步:Kubernetes(K8s)和云原生CNCF。作者首先介绍了K8s的重要性和优势,以及在本地环境中搭建K8s的步骤。通过详细的操作指南,读者可以了解如何在个人电脑上安装和启动K8s,并查看其运行状况。接着,文章简要介绍了K8s的原理和架构,包括Master节点和Worker节点的作用,以及K8s集群的私有网络构建和服务暴露。最后,作者提到下一节课将基于K8s的CaaS方式实现一套Serverless环境,为读者展示如何完整搭建自己的Serverless系统。整体而言,本文为读者提供了一份清晰的K8s入门指南,让他们能够快速了解K8s的重要性和基本操作,为进一步学习和应用K8s打下基础。文章还介绍了K8s如何实现扩缩容,以及如何利用metrics组件进行实时监控,为读者提供了实用的技术知识。
《Serverless 入门课》,新⼈⾸单¥29
全部留言(11)
- 最新
- 精选
- Demon.Lee请教老师一个部署的问题:与后端代码交互,前端代码在k8s体系下怎么部署才是最佳实践。 参考官网上的例子(https://kubernetes.io/zh/docs/tasks/access-application-cluster/connecting-frontend-backend/),我理解是将前端代码放在nginx里面,同时在nginx.conf中配置后台api的反向代理(我的理解是解决跨域问题),然后将其部署为一个pod,并暴露出该前端工程的service ip 和 nodePort。 1)如果这里不直接暴露前端服务ip和nodePort,而走ingress,是否有必要,个人觉得没必要,因为多绕了一层。 2)nginx.conf中给后台服务配置的反向代理,是配置后台应用程序对应 service 的 ingress 地址,还是直接配置后台应用程序对应 service 的内部 ip 和端口 (或直接就是 service name) 。 2.1)如果配置的是对应 service 的 ingress 地址,那又多绕了一层。但又想到两个点,一是前端代码如果某一天单独拎出去部署,而不是在k8s中,不受影响(可能是伪需求);二是通过nginx-ingress-controller,Prometheus可以拿到相关api调用的监控指标(请求延迟,请求量等,但也只能获得 ingress 中对应配置的 path 数据,https://github.com/kubernetes/ingress-nginx/pull/2701)。 2.2)如果配置的是对应service 内部 ip 和端口,提高了速度,但为了获取监控指标,也要部署一套 nginx exporter。 我们的部署方案是否欠妥(前端代码这么部署是最佳实践吗?nginx 反向代理配置呢?获取服务请求相关监控指标的方式是正确的吗?)想听听老师的想法,您所在的团队是如何做的,谢谢。(如果不是好问题,还请老师见谅,我对部署这一块做的不多,不是很熟悉。)
作者回复: 我最后的课后习题讲解有关于部署的内容。现在云服务通常会提供负载均衡服务,给你一个高负载的IP。 域名解析配置这个IP就可以了。负载均衡服务,可以将你的容器IP挂载上。 如果你自己搭建的k8s集群,也不建议直接暴露到外网环境,因为面对ddos攻击,流量攻击时比较难解。最好是隐藏在云服务商的接入服务之后。
2021-08-03 - pop老师我在阿里云上的centos7机器上实践,很多镜像拉取不下来。例如myapp.yaml里面的registry.cn-shanghai.aliyuncs.com/jike-serverless/todolist:latest是找不到的;我配置了阿里云的镜像加速,但是还是会去dockerhub中去搜索镜像。请教如何正确的拉取镜像,包括下一章的istio也是同样的问题。
作者回复: 这个镜像是需要自己构建的,私有镜像中有很多信息不可以被别人获取。例如ak/sk。 这个todolist是私有镜像,你自己构建好,修改成自己的镜像仓库才行。
2020-12-072 - 神仙朱文中疑问:又因为 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 - 小谢同学云厂商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平台怎么包装这个函数?这个一直没有明白。
作者回复: 你不明白的应该是如何从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-043 - 我来也由于我有现成的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-046