kubernetes初识
文章目录
最近项目中使用到了kubernetes,把自己在使用的过程遇到的问题以及kubernetes相关组件的使用整理一下,争取每周分享一篇博客。同时也希望大佬们对文档的错误地方和不足之处,给出批评和建议。
1. kubernetes概述
kubernetes是一个容器编排工具,相当于是管理容器的上层应用。像docker容器都是运行在物理机器或者虚拟机上的。对容器的管理需要人为管理,这样既不方便也不能充分的利用机器的资源,不能够物尽其用。而kubernetes可以更好的管理容器,合理的分配机器资源。
一个K8s集群是由分布式存储(etcd)、服务节点和控制节点(Master)构成的。所有的集群状态都保存在etcd中,Master节点上则运行集群的管理控制模块。Node节点是真正运行应用容器的主机节点,在每个node节点上都会运行一个Kubelet代理,控制该节点上的容器、镜像和存储卷等
1.1 kubernetes核心组件
- etcd:保存了整个集群的状态
- apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
- Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
- kube-dns:负责为整个集群提供DNS服务,进行服务发现
- Ingress Controller:为服务提供外网入口
- Heapster:提供资源监控
- Dashboard:提供GUI
2. kubernetes简单架构图
下面我简单的看一下kubernetes一个简单的架构图
master和node都是对应的物理机或者虚拟机
-
master
master是kubernetes的管理者,相当于是整个集群的大脑。集群的所有操作都通过master来完成。master进行node的管理,监视每一个node的资源使用情况,根据资源的情况,对node上的容器进行管理。
-
node
node是集群中启动容器的节点。一个node对应一个物理机或者虚拟机。每一个node上启动的容器都是通过master来调度的。
3. 使用kubernetes的优缺点
3.1 优点
-
故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断。这是docker或普通云主机是不能做到的
-
资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点,新建的pod就会被kube-schedule调度到新扩充的node节点上
-
资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰。传统的主机或只有docker环境中,登录进去就会看到所有的服务或者容器,因为采用容器,进程之间互不影响。
-
安全:不同角色有不同的权限,查看pod、删除pod等操作;RBAC认证增加了k8s的安全
-
负载均衡:k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便。
3.2 缺点
以下缺点是在实际使用中遇到的
- 资源消耗严重:如果使用集群,势必需要多个物理机或者虚拟机,至少需要三个以上的机器(8c,16g),如果机器过少,部署kubernetes集群就需要耗掉的大半的资源。
- 网络复杂:使用kubernetes,如果需要集群外部访问时,需要拥有一定的网络技术基础,才能够使网络通信达到最优。对于tcp长连接通信支持不是很友好。
4. 参考文档
https://www.cnblogs.com/cnblx/p/11653152.html.
https://kubernetes.io/zh/docs/home/.
本文地址:https://blog.csdn.net/youngZ_H/article/details/107427789
上一篇: 4月美国虚拟主机优惠码汇总