简介及优点
简称:K8S
Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
为容器编排技术,实现了容器的缺点,也就是K8S的优点
为什么需要Kubernetes
容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?
这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。
优点
- 自动装箱,水平扩展,自我修复
- 服务发现和负载均衡
- 自动发布(默认滚动发布)和回滚
- 集中化配置管理和密钥管理(数据中心)
- 存储编排
- 任务批处理运行
基本概念
Pod/Pod控制器
Pod
- Pod是Kubernetes中能够被运行的最小逻辑单元(原子单元)
- 1个Pod里面可以运行多个容器,互相共享UTS+NET+IPC名称空间
- 可以把Pod理解成豌豆荚,而同一个Pod内的每一个容器都是一颗豌豆
- 一个Pod里运行多个容器,又叫:边车(SideCar)模式
Pod控制器
- Pod控制器是Pod启动的一中模板,用来保证Kubernetes里启动的Pod应始终按照人们的预期运行(副本数,生命周期,健康状态检查…)
- Kubernetes内提供了众多的Pod控制器,常用有以下几种
- Deployment
- DaemonSet
- ReplicaSet
- StatefulSet
- Job
- Cronjob
Name/Namespace
Name
- 由于Kubernetes内部,使用”资源”来定义每一个逻辑概念(功能),所以每种资源都应该有自己的”名称”
- 资源有:API版本(apiVersion)\ 类别(kind)\ 元数据(metadata)\ 定义清单(spec)\ 状态(status)等配置信息
- “名称”通常定义在”资源”的”元数据”信息中
NameSpace
- 随着项目增多,人员增加,集群规模的扩大,需要一种能够隔离Kubernetes内部各种资源的方法,称为:名称空间
- 名称空间可以理解为Kubernetes内部的虚拟集群组
- 不同名称空间内的 资源 名称可以相同,相同名称空间内的的同种 资源 名称 不能相同
- 合理的使用Kubernetes的名称空间,使得集群管理员能够更好的对交付到Kubernetes里的服务进行分类管理和浏览
- Kubernetes里默认存在的名称空间有:default,kube-system,kube-public
- 查询Kubernets里特定的资源,需要带上相应的名称空间
Label/Label选择器
Label
- 标签是Kubernetes的特色管理方式,便于分类管理资源对象
- 一个标签可以对应多个资源,一个资源可以对应多个标签,他们是多对多的关系
- 一个资源拥有多个标签,可以实现不同维度的管理
- 标签的组成:key=value
- 与标签类似的,还有一种”注解”(annotations)
Label选择器
- 给资源打上标签后,可以使用标签选择器过滤指定的标签
- 标签选择器目前有两个:
- 基于等值关系(等于|不等于)
- 基于集合关系(属于|不属于|存在)
- 许多资源支持内嵌标签选择器字段
- matchLabels
- matchExpressions
Service/Ingress
Service
- 在Kubernetes的世界里,虽然每个Pod都会分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
- Service就是用来解决这个问题的核心概念
- 一个Service可以看作一组提供服务的Pod的对外访问接口
- Service作用于哪些Pod是通过标签选择器来定义的
Ingress
- Ingress是Kubernetes集群里工作在OSI网络参考模型下,第七层的应用,对外暴露的接口
- Service只能提供L4流量调度,表现形式是IP+PORT
- Ingress则可以调度不同业务域丶不同URL访问路径的业务流量
Kubernetes核心
- 核心组件
- 配置存储中心(etcd服务)> 为kubernetes存储数据服务,可以理解为mysql数据库,为kubernetes提供数据支持
- 主控(Master)节点
- kube-apiserver服务> apiserver服务称之为Kubernetes的大脑
提供了集群管理的RESTAPI接口(包括鉴权,数据,校验及集群状态变更) 负责其他模块之间的数据交互,承担通信枢纽功能 是资源配额控制的入口 提供完备的集群安全机制
- kube-apiserver服务> apiserver服务称之为Kubernetes的大脑
- kube-controller-manager服务> 由一些列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态
Node Controller Deployment Controller Service Controller Volume Controller Endpoint Controller Garbage Controller Namespace Controller Job Controller Resource quta Controller …
- kube-scheduler服务> 主要功能:接收调度pod到适合的运算节点上
预算策略(predict) 优选策略(priorities)
- 运算(Node)节点
- kube-kubelet服务> kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器,运行的副本数量,网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态
定时汇报当前节点的状态给apiserver,以供调度的时候使用 镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出容器不会占用太多资源 容器爹妈级别存在
- kube-kubelet服务> kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器,运行的副本数量,网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态
- Kube-proxy服务> 是Kubernetes在每个节点上运行的网络代理,service资源的载体
建立pod网络和集群网络的关系(clusterip—>podip) 常用三种流量调度模式:
- Userspace(废弃)
- Iptables(濒临废弃)
- Ipvs(推荐)
负责建立和删除包括更新调度规则,通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的
- CLI客户端
- kubectl
- 核心附件
- CNI网络插件(flannel/calico)
- 服务发现用插件(coredns)
- 服务暴露用插件(traefik)
- GUI管理用插件(Dashboard)
