网站需要怎么做的吗,广告策划公司简介,装修房屋装修大全,深圳市深企在线技术开发有限公司序言 没等到风来#xff0c;绵绵小雨#xff0c;所以写个随笔#xff0c;聊聊k8s的基本概念。 k8s是一个编排容器的工具#xff0c;其实也是管理应用的全生命周期的一个工具#xff0c;从创建应用#xff0c;应用的部署#xff0c;应用提供服务#xff0c;扩容缩容应用…
序言 没等到风来绵绵小雨所以写个随笔聊聊k8s的基本概念。 k8s是一个编排容器的工具其实也是管理应用的全生命周期的一个工具从创建应用应用的部署应用提供服务扩容缩容应用应用更新都非常的方便而且可以做到故障自愈例如一个服务器挂了可以自动将这个服务器上的服务调度到另外一个主机上进行运行无需进行人工干涉。那么问题来了要运维何用 k8s可以更快的更新新版本打包应用更新的时候可以做到不用中断服务服务器故障不用停机从开发环境到测试环境到生产环境的迁移极其方便一个配置文件搞定一次生成image到处运行。。。 k8s的全生命周期管理 在k8s进行管理应用的时候基本步骤是创建集群部署应用发布应用扩展应用更新应用。 1、创建集群为什么要使用集群 有一句古话叫做三个臭皮匠赛过诸葛亮这就是创建集群的原因。。。 使用集群create cluster是为了掩盖底层的无能在各种环境中底层的硬件各不相同有的是各种低廉的服务器有的各种云环境有的是各种vm有的各种host machine要想屏蔽底层的细节增强可靠性和稳定性从而需要创建集群。 创建集群的好处就是统一对外提供接口无须进行各种复杂的调用提供更好的可靠性服务器宕机那么频繁物理磁盘那么容易损坏无须担心集群统一进行调配提供更好的性能组合集群中各个机器的计算存储网络资源提供更好的TPS和PS提供横向扩容的能力在进行横向扩容的时候性能基本上能呈线性增长。 集群看起来很牛那么创建起来很复杂么并不会在k8s只要使用两条指令就可以创建一个集群一个是kubectl init进行初始化创建一个master节点第二条指令就是kubectl join xxx创建一个node节点加入这个集群。 在这边可以看到k8s在物理上进行划分的时候划分了两种类型的主机一个master节点主要用来调度控制集群的资源等功能而node节点主要是用来运行容器的节点也就是运行服务的节点。 其实集群都差不多master用来控制用来存储各种元数据node节点是一个工作节点真正来干活的node节点定时与master进行通信通过kubelet进程来汇报信息。 创建了集群我要怎么看信息如下 2、 部署应用 使用集群的主要目标是啥用来提供服务让开发开发的应用程序能在集群上运行从而需要让开发能运行一个应用来进行测试。 一条指令就能运行一个服务有了image之后就是这么简单。所以在开发完成程序之后需要将程序打包成image然后放到registry中然后就能够运行应用了。 在部署完成应用之后就可以看到应用的名称期望状态是运行一个pod当前有一个pod活动的也是一个还有启动的时间那么什么是pod呢 在k8s里面集群调度的最小单元就是一个pod一个pod可以是一个容器也可以是多个容器例如你运行一个程序其中使用了nginx使用mysql了使用了jetty那么可以将这三个使用在同一个pod中对他们提供统一的调配能力一个pod只能运行在一个主机上而一个主机上可以有多个pod。 那么有人会问为什么要使用pod为什么不能直接使用容器呢使用pod相当与一个逻辑主机还记得创建一个vm在vm上运行几个进程么其实道理是一样的pod的存在主要是让几个紧密连接的几个容器之间共享资源例如ip地址共享存储等信息。如果直接调度容器的话那么几个容器可能运行在不同的主机上这样就增加了系统的复杂性。 3、发布应用 发布应用主要就是对外提供服务可能会有人提出疑问我都运行了服务为什么还不能提供服务这是因为在集群当中创建的ip地址等资源只有在同一个集群中才能访问每个pod也有独一的ip地址当有多个pod提供相同的服务的时候就需要有负载均衡的能力从而这里就涉及到一个概念就是service专门用来提供服务的。 服务主要是用来提供外界访问的接口服务可以关联一组pod这些pod的ip地址各不相同而service相当于一个复杂均衡的vip用来指向各个pod当pod的ip地址发生改变之后也能做到自动进行负载均衡在关联的时候service和pod之间主要通过label来关联也就是标签-l表示为label。 从而外界就可以访问此应用了如下 4、 扩容缩容 在业务上线之后碰到了双十一怎么办扩容。。。万剑归宗只要有一个pod那么就可以产生无数个pod。。。。 过了双十一怎么办缩容。。。 横向扩展的能力。。每次扩容缩容的时候这种会不会觉得很方便一句话的事儿。。不用创建vm不用去部署中间件不用去各种修改配置这就是自动化。。。 5、 更新 有新版本了我要发布。。。那么。。。 滚动更新。。。根据新的image创建一个pod分配各种资源然后自动负载均衡删除老的pod然后继续更新。。。。不会中断服务。。。 更新错了怎么办不怂不会影响生产业务回滚就好了。。。几秒钟的事儿。。。 后话 k8s的基本入门其实算是一种用户视角只是用来演示如何使用k8s怎么提高了生产力而已。 在给客户演示的时候为啥要选择k8s主要就是如何提高了发布的效率更新版本的效率更方便更快捷的上线新版本。 但是在运维关注的视角下这些远远不够。。。master存储了哪些元数据存储在etcd中如何来进行监控在很多很多系统情况下怎么来部署k8s是一个项目一个k8s还是一个k8s多个项目等等一系列的问题。。。