炼气境—第1层:理解K8S一些基础概念
Hello 小哥,欢迎来到容器世界,我是小K,我会陪着你一起纵横容器世界!目前微服务横行,我们容器天国也不甘落后,我谷歌大朝经过不断努力,完善了一套容器编排的内功心法-Kuberents(K8S),融汇贯通可达武神境!我们先来学习一些基础的东西吧!
K8S 介绍
微服务框架的流行,使得服务越来越精细化,服务也变的越来越多,对于发布和管理而言,产生了巨大的挑战,而Docker 的诞生,给与微服务的资源治理和控制提供了很好的基础—容器化,然后,Docker 对于容器服务的编排没有那么方便,K8S 基于Docker引擎提供了一整套的容器管理方案,说白了,就是对于容器做管理的,并提供了一些自动化的功能,如收缩,扩容等。
使用k8s,你可以得到这些:
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
k8s 特点
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
k8s解决了哪些难题?
- 多个进程(作为容器运行)协同工作
- 存储系统挂载
- Distributing secrets
- 应用健康检测
- 应用实例的复制
- Pod自动伸缩/扩展
- Naming and discovering
- 负载均衡
- 滚动更新
- 资源监控
- 日志访问
- 调试应用程序
- 提供认证和授权
容器编排的基础资源定义和理解
一切皆为资源,一切即可描述,一切皆可管理。
NameSpace
命名空间。一般,一个K8S集群的命名空间是用来隔离和控制资源的,这里的资源指的是服务,CPU,内存等资源,所以,一个命名空间可以认为是一套环境,比如我建立三个命名空间为 dev 、test 、prod ,代表了 开发环境、测试环境、生产环境,环境彼此之间资源可以控制和隔离。
POD
k8s可以是基于Docker 引擎来管理容器的,pod 的存在是因为原生Docker 和K8S 不是一家公司的产品,那么,如果基于原生去修改里面的容器比较困难,所以,K8S 在外部包了一层用作对于原生容器的管理,这就是pod。一个pod 里面可以有多个容器,一般,我们在使用的时候,基本一个pod 只有一个容器。
Deployment
这个资源是一个其实是一个发布控制器,一般用于实战中发布服务使用。这个玩意最核心的功能,就是完成了pod 的控制,建立RC(副本个数控制器,也就是几个实例)来控制一个服务后面的pod 数目,以及pod 的生老病死,pod 使用的资源,pod 是否健康的检查,重启策略等等等。重点关注这个,真实操作的基本都是这个。
Service
Service 名为服务,其实是一层网络抽象,最大的意义就是service管理的是endpoints ,也就是多个pod, Service 作为抽象资源,他所代表的IP,端口是不变的,这是区别于pod 的地方,如果在k8s网络里进行服务互相访问的话,用service 最好不过了。他其实等同于有自动发现后端节点和负载均衡的功能。
Ingress
路由,目前基本上各个厂商都使用的是Nginx Ingrss 做集群的路由管理。
Ingress 这种方式其实主要用于对外提供http服务的访问地址,以Ngxin 来对比的话,
其实就是把location 和server 端动态换,当然,本质上Nginx Ingress 就是基于Nginx Server 和 Tmplate config 做出来的,核心点在Nginx Controlle 对于Location 的刷新和监控。
ConfigMap
配置管理。这个可以作为配置中心。实战中一般使用两种方式,一个是作为环境变量导入,一种是作为配置文件挂载到内部磁盘目录。
Secret
保密字典。 支持三种类型的 : base64 的,TLS证书的,Docker 仓库的镜像认证秘钥的。
PV 和PVC
数据要落盘,如果在pod 中,如果容器销毁,则一切都没有了,所以有了持久化存储的概念。
PV 存储卷,PVC 存储卷申明。
PVC 常用在Deployment 中做数据的持久化存储,程序往指定的目录路径写数据,那么PVC可以 mounts 到改路径下,实现持久化存储。
这里还需要理解一个Volume 的概念,后面在细说。
Labels 和 Selectors
标签和选择器。作用其实就是给每个容器贴个标签,然后呢,各个控制器通过Selector 进行pod 的控制管理,比如Deployment,Service 都是这样控制的。
以上是几种常用的资源的作用,具体点的,等下一层小K会逐渐讲解。