Kubernetes 基础
1.概述
k8s是基于容器技术的分布式架构方案,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
2. k8s 服务架构

API Server:接口服务,提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
Controller Manager:控制器管理器,管理各种类型的控制器,对 k8s 中的各种资源进行管理,比如故障检测、自动扩展、滚动更新等
Scheduler:调度器,负责将 Pod 基于一定算法,调度到合适的节点
etcd:k8s 的数据库,键值类型存储的分布式数据库,提供了基于 Raft 算法实现自主的集群高可用
kubelet:负责 Pod 的生命周期、存储和网络
kube-proxy:网络代理,负责为 Service 提供集群内部的服务发现和负载均衡

3. k8s 核心技术概念
3.1 资源和资源对象
k8s 中所有的对象都被抽象为“资源”,如 Pod、Service、Node 等都是资源。“对象”是“资源”的实例,如某个具体的 Pod、某个具体的 Node。资源和资源对象像面向对象编程中的类和对象的关系,而创建资源对象的yaml文件则像类的属性。

3.2 资源分类
元数据型:Horizontal Pod Autoscaler(HPA)、PodTemplate、LimitRange
集群级:NameSpace、Node、ClusterRole、PersistentVolumeClaim
命名空间级:Pod、Service等
3.3 Pod
Pod(容器组) 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
3.4 Replication Controller
RC 通过监控运行中的 Pod 来保证集群中运行指定数目的 Pod 副本,保证 Pod 高可用的资源。少于指定数目,RC 就会启动运行新的 Pod 副本;多于指定数目,RC 就会杀死多余的 Pod 副本。即使在指定数目为 1 的情况下,通过 RC 运行 Pod 也比直接运行 Pod 更明智,因为 RC 也可以发挥它高可用的能力,保证永远有 1 个 Pod 在运行。
3.5 Replica Set
RS 是新一代 RC,提供同样的高可用能力,区别主要在于 RS 后来居上,支持集合式的 selector。副本集对象一般不单独使用,而是作为 Deployment 的理想状态参数使用。
3.6 Deployment
Deployment 为 Pod 和 Replica Set 提供了一个声明式定义方法。Deployment 是一个比 RS 应用模式更广的 API 对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的 RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧 RS 中的副本数减小到 0 的复合操作。
3.7 Service
Service 提供服务发现和负载均衡能力。一个 Pod 随时可能在一个节点上停止,在另一个节点以一个新的 IP 启动新的 Pod,因此不能以确定的 IP 和端口号提供服务。所以服务发现是针对客户端访问的服务,找到对应的的后端服务实例。在 K8s 集群中微服务的负载均衡是由 Kube-proxy 实现的。Kube-proxy 是一个分布式代理服务器,在 K8s 的每个节点上都有一个。
3.8 Job
Job 是 Kubernetes 用来控制批处理型任务的资源。批处理业务与长期伺服业务的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job 管理的 Pod 根据用户的设置把任务成功完成就自动退出了。
3.9 DaemonSet
DaemonSet 保证每个节点上都有一个此类 Pod 运行。节点可能是所有节点也可能是通过 nodeSelector 选定的一些特定节点。典型的后台支撑型服务包括,存储,日志和监控等在每个节点上支持 Kubernetes 集群运行的服务。
3.10 StatefulSet
StatefulSet 的 Pod 可以通过漂移到不同节点提供高可用,而存储也可以通过外挂的存储来提供高可靠性,StatefulSet 做的只是将确定的 Pod 与确定的存储关联起来保证状态的连续性。
3.11 Volume
Kubernetes 的存储卷的生命周期和作用范围是一个 Pod。每个 Pod 中声明的存储卷由 Pod 中的所有容器共享。
3.12 Node
Node 是 Pod 运行所在的工作主机,可以是物理机也可以是虚拟机。
3.13 Secret
Secret 是用来保存和传递密码、密钥、认证凭证等敏感信息的对象。使用 Secret 的好处是可以避免把敏感信息明文写在配置文件里。
3.14 namespace
命名空间为 Kubernetes 集群提供虚拟的隔离作用。
3.15 Persistent Volume
Persistent Volume(PV) 是 Kubernetes 里的“集群级存储资源对象”,代表一块已经存在 / 可被创建的真实存储(云硬盘、NFS 目录、Ceph RBD、本地磁盘等)。它的生命周期独立于 Pod:Pod 删了、重建了,PV 里的数据还在。
3.16 Persistent Volume Claim
PVC 是用户对 Kubernetes 集群存储资源的请求和申领,充当 Pod 与底层持久存储(PV)之间的抽象中间层。
3.17 ConfigMap
ConfigMap 是 Kubernetes 里用来存配置数据的键值对资源,把配置从容器镜像里解耦出来,实现配置与镜像分离。
3.18 Role
在 Kubernetes 里,Role 是命名空间级别的授权对象,用来定义“某个命名空间内,能对哪些资源做什么操作”。
3.19 ServiceAccount
ServiceAccount(服务账号,简称 SA) 是 Kubernetes 里给 Pod 里的进程用的身份,用来控制应用访问 Kubernetes API 的权限。
3.20 ClusterRole
ClusterRole 是 K8s 中定义集群范围或跨命名空间权限的规则集合,可作用于集群级资源(Node/PVC/ClusterRole)和所有命名空间下的资源
3.21 Cronjob
CronJob 是 Kubernetes 里用来定时跑 Job 的控制器,本质就是“K8s 里的 crontab”。
3.22 Label
Label 是资源上的标识,用来对它们进行区分和选择。
4. k8s 中的重要命令
4.1 kubectl explain <RESOURCE>

- 点赞
- 收藏
- 关注作者
评论(0)