开发者学堂课程【云原生实践公开课:第一步如何创建集群及部署应用】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/698/detail/12266
第一步如何创建集群及部署应用
- 基础篇∶5步上手K8s
- 第1步︰如何创建集群及部署应用?
- 第2步∶上K8s 到生产环境之前,有哪些是需要注意事项?
- 第3步:Kubernetes集群的监控与日志
- 第4步∶关注K8s集群的弹性伸缩问题
- 第5步∶怎样升级一个Kubernetes集群?
内容介绍:
一、 集群部署的常用方法
二、 手把手带你创建一个集群
三、 手把手教你部署应用
一、集群部署的常用方法
- minikube :本地开发测试 minikube start
https://github.com/kubernetes/minikube
minikube 原理,在机器上面启动一个虚拟机,然后在虚拟机里面部署相应的这个环境。
当然了,随着这个minikube的演进,里面的驱动,支持的越来越多了。
- kind : K8s相关的集成测试
kind create cluster
https://github.com/kubernetes-sigs/kind
kind,围绕kubernetes来创建一个 K8s 环境,很启动很快。
那kind常用的用途,做 K8s 开发相关的极限测试的时候,提前在测试前把 kind 启动起来。
- kubeadm :高可用环境
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
安装方式在普遍的官方文档里面,有介绍,怎么去部署一个高可用的这个课内环境、一系列的这个组件是如何安装的。相对来说,安装会比较复杂一些,因为一个高可用的集群,配置起来麻烦。
二、手把手带你创建一个集群
1. 下载并安装 minikube 二进制文件
社区版: https://minikube.sigs.k8s.io/docs/start/
中国版: https://developer.aliyun.com/article/221687
- 这个版本,是在社区版的 minikube 的这个基础上,做了一些优化,把里面的
一些镜像,换成了阿里默认的镜像源,使用起来非常方便的,是完全免费的。
- 安装:只要把根据系统,照着文档去执行就可以了。命令执行了,就会下载,
输入机器的密码,就下载完成了。在本地做调试的时候很方便的。
- 正常情况下启动一个集群,只要输入 minikube version,会有一些 driver 选
项,默认情况下选择 docker driver。
- 不同的driver之间,会有差异。
- Minikube:支持很多种 driver,第一种,是 docker 比较清亮,背后是在一个
docker 的这个容器里面,启动 K8S 的一个集群,但是不支持 arm 架构。偶尔需要重启一下,因为不稳定。Ingress 无法使用,做某些实验的时候,可能不太好用。
- Hyperkit:对应 hypervisor, 是一种裁剪过的一个虚拟机。在开发环境中,大部
分情况下都是用 Hyperkit,然后对应到 Windows 上面就是 Hyperv。在使用的过程中,其实就把这 minikube start --driver 中的 driver 改一下,改成 hyperkit。启动方式后面加一个参数就可就可以了,非常方便。
- 最主要的问题是对 Cpu 消耗比较多,把 Minikube 的关掉就可以解决
- virtualbox :更稳定,实际上相当于启动了一个完整的虚拟机。
2. Minikube常用命令∶
启动集群: minikube start
插件系统: minikube addons
Dashboard 界面: minikube dashboard
查看集群状态: minikube status
使用阿里云 ACK_快速创建一个生产可用的集群
- minikube启动的过程是:通过 status来启动,有几个组件,最常用的是
kubelet和 apiserver,一启动就配置成功了,可以直接在本地的 minikube 上使用。
- Minikube 会安装一些默认的插件,可以在 minikube addons list 上看到。
Minikube 默认创建了一个本地的存储的供应,相当于把本地的磁盘当成存储,这个应用以及插件就可以使用了。
- 不知道命令怎么输入,可以输入 help
- Dashboard 的安装。在 K8S 体系里,一切都是 K8S 上面的插件,背后的模卡
是ContainerC。在 minikube 里面,通过 dashboard的命令就可以使用了,一个集群就已经创建好了。
三、手把手教你部署应用
访问 github.com/search?o=desc&q=golang+前端&s=stars&type=Repositories网页,选择 Sort: Most stars,找到 flipped-aurora / gin-vue-admin 应用,该应用大致分为三个组件 service、mysql、redis。也可以分这样三个结构, server 的一个应用、mysql的一个存储应用, redis 的缓存应用。
- 创建一个包含前端、缓存以及数据库的应用。
怎么创建应用?首先把刚搜索的应用复制到本地,写三个 yaml 文件即可完成应用部署。第一个 yaml 文件是 mysql。组件之间如何访问的 mysql?可以配置一个service,Service 通过 label 和 K8S 里的 pod 进行对应。所以其他的组件,去访问这个service,就可以访问到 K8S 上的这个 pod。 Mysql 的存储持久化可以通过配置一个持久化存储。用 K8S 里面 deployment 模式,把整个应用的这个配置起来。
填补镜像,涉及到一些环境变量,环境变量,就是通过这个KS里面的env传入进去。里面有一些细节,比如,imagePullPolicy: IfNotPresent 这个 IfNot,这里可以填 always,也可以填 if not present always,就是每次这个 pod 重启的时候,都会把镜像拉一下。if not present 就是,如果当前的这个本地的 docker 镜像仓库里面存在这样一个镜像,就可以直接使用他。
redis 如何被其他的组件访问?通过 service 去访问,配置的端口是6379,然后有一个 department 去配置的。同时,也是通过这个 label 来这个筛选到。
然后一个对应关系,就是应启动 webservice 的启动了。然后,这里面也是一个镜像拉取的方式,这里有一些访问的端口,就是这个 readinessProbe 和
livenessProbe,可以判断这个应用有没有正常启动。里面有一些配置,通过configmap 的方式,写进来,一些配置通过 config map 绑定到 volumes 里面去,然后再把这个 rom 的绑定进去。password,这里其实是应该配置成 secret 的。这样的话就能避免铭文去使用了。
password 里面有一个访问的方式,正常情况下,就里面的不同的组件怎么去访问?因为配置的 service,所以有一个 service 的地址,如果是本地的这个 service,直接就使用 default.svc.cluster.local 的后缀,加上这个 service 名称就可以了,然后配合上端口号。
service 机制的好处,就是假设 service 背后的这个 pod 销毁了,有一个新的 pod出现,那么这个服务,其实是可以正常使用的,并不会因为某一个 pod 销毁,或者说因为绑定了某一个 IP,导致这个背后的实际运行的进程销毁,这个访问服务就出现问题了,所以service机制带一定程度的这个负载均衡,同时,也为后续的一系列的这个功能来做好这个铺垫。
最后再来部署一下。本地部署了 K8S 的这个文件夹,可以通过 Watch 的命令,看到创建情况,最后会慢慢的这个去启动。
- 组件之间是如何互相访问的?
可以配置一个 service,Service 通过 label 和 K8S 里的 pod 进行对应。所以其他的组件,去访问这个 service,就可以访问到 K8S 上的这个 pod。
- 应用之间的依赖关系怎么办?如何探测应用已经存活?
web 应用,是依赖于 mysql 的,mysql 如果还没启动, web 应用肯定就无法启动。在 K8S 里面的理念,就是 pod 是可以不断的重启的。怎样保证这个应用已经正常的运行?就是有一个测活的机制,就是刚刚介绍的 readinessProbe 和livenessProbe,就是保证了这个应用已经正常的这个存活了。在 web service 里面,配置 readinessProbe 和 livenessProbe,代表这个进程,已经正常在运行,可以正常的工作了。
- 参数、配置文件该如何处理?
- 数据库的持久化存储怎么处理?
- 小技巧∶本地的镜像如何调试?
- service的这个类型clusterIP、nodeport、loadbalancer这三个经常有同学分不
清楚是什么意思。
- clusterIP:是最小的一个范畴,就是在这个集群范围内才能使用,这个service
出了这个集群可能就用不了,就是一个集群范围内的一个IP。
- Nodeport:node是节点的node,port是端口的port。Note的这个使用这个方
式,就是在这个宿主机上面去开一个端口,通过宿主机的IP就可以去访问了。
loadbalancer一般情况下有外部的组建要访问的话,会使用这个loadbalancer,会配置一个集群中的这个负载均衡器所分配的一个地址,比如阿里云上面的SLB那种负载均衡,就是实际上就是一个可以外网访问的一个IP或者域名等等,类似于这种方式就可以正常的这个外部的去访问。
- 网络慢的解决方法:在本地的这个docker里面,先把image铺起来,本地的话
就会快很多,把本地铺起来。就会很快。把本地的这个docker镜像的保存起来,相当于本地已经拉取了这样一个镜像,可以保存起来多次save。
- 创建一个文件夹build-image把save这个镜像放进去。之后,把镜像放到这个
Minikube master的这个命令库里面去,然后master,相当于本地的build-image文件夹,复制到docker里面,就是Minikube的这个环境里面去了。
- 通过Minikube SSH命令进去Minikube。进去就是docker load。把它load进
去,已经把docker image载入进去了。
- yaml文件中使用docker is not present的好处:如果本地已经有镜像就不会再
导入。在开发的过程中,遇到了镜像的这个问题?使用Minikube,可以非常容易解决。镜像已经放到Minikube里面的镜像仓库了。其实整体来说,已经运行起来了。
- 访问可以通过Minikube service。
- 我们先看一下到底有哪些service,因为我们刚刚创建了service。通过
coolcity or get service,可以看到这个web server已经启动起来,然后通过url访问这个应用,让一个url加上一些命令。
- 登录页面,然后默认情况,应用的密码123456以及验证码七五。进到这个页面
里面了,这里面会有一些功能,比如角色管理等等。整体、应用的附属的,没有太多的问题。那这个应用,就算部署成功了。
四、应用部署成功了,我还会遇到什么问题?
遇到的问题
流水线、迁移、均衡、负载、调度、隔离、安全弹性、沙箱、高可用、编排、路
由、监控、日志、报警、金丝雀、证书、灰度
原生应用要真正做到生产可用,其实是有非常多的问题要去解决的。比如隔离。
应用都在一个 doc 环境里面,没有太多的隔离性的。那可能区分不同的机器,或者说配置不同的安全策略,那可能就有很好的隔离性。其次,正常情况下,弹性以及
这个高可用、日志,监控如何去配置,怎么去使用。
日志,包括监控报警,是非常重要的一个环节。如何做这个灰度发布、金丝雀部署等等一系列的这个问题,都会这个接踵而至,所以,在后面的课程,会为大家分分门别类的。
一步一步解开这些问题到底该如何解决,为大家深入的介绍怎么去实践这些这些技术。