集群架构与组件
一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。
master:集群的控制平面,负责集群的决策 ( 管理 )
api-server : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
controller-manager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
etcd :负责存储集群中各种资源对象的信息
node:集群的数据平面,负责为容器提供运行环境 ( 干活 )
kubelet : 负责维护容器的生命周期,通过控制docker,来创建、更新、销毁容器
kube-proxy : 负责提供集群内部的服务发现和负载均衡
docker : 负责节点上容器的各种操作
以部署一个nginx服务来说明kubernetes系统各个组件调用关系:
首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
一个nqinx服务的安装请求会首先被发送到master节点的api-server组件
api-server组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
scheduler从etcd中读取各个node节点的信息,按照一定的算法进行选择,并将结果告知api-server
aapi-server调用controller-manager来调度node节点安装nginx服务
kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod(pod是kubernetes的最小操作单元,容器必须跑在pod中)
一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理
这样,外界用户就可以访问集群中的nginx服务了
资源的分类
元数据级
Horizontal Pod Autoscaler(HPA)
PodTemplate
LimitRange
集群级
Namespace
Node
ClusterRole
ClusterRoleBinding
命名空间级
工作负载型 Pod
Pod(容器组)是Kubernetes 中最小的可部署单元。一个 Pod容器组包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络 P 地址、以及一些确定容器如何运行的选项。Pod 容器组代表了 Kubernetes 中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在起的容器组成。Docker是Kubernetes Pod 中使用最广泛的容器引擎。Kubernetes Pod 同时也支持其他类型的容器引擎。Kubernetes集群中的 Pod 存在如下两种使用途径:
一个 Pod 中只运行一个容器。此时可以认为 Pod容器组是该容器的 wrapper,Kubernetes 通过 Pod 管理容器,而不是直接管理容器。
一个 Pod 中运行多个需要互相协作的容器。可以将多个紧密耦合、共享资源且始终在一起运行的容器编排在同一个Pod 中
pod中增加了pause容器的概念
副本(replicas)
一个Pod可以被复制成多份,每份称为一个replicas。replicas属性指定了特定 Pod 的副本的数量,当当前集群中Pod 的数量与该属性指定的值不一致时,k8s 会采取一些策略去使得当前状态满足配置的要求。
控制器
适用无状态服务
RC、RS、Deployment
Deployment在ReplicaSet的基础上提供更多功能,包括:
创建ReplicaSet / Pod
滚动升级、回滚
平滑扩容和缩容
暂停与恢复Deployment
image.png
适用有状态服务
StatefulSet
守护进程
DaemonSet
任务/定时任务
Job
CronJob
服务发现service
ingress
存储
Volume
CSI
特殊类型配置
ConfigMap
Secret
DownwardAPI
其他
Role
RoleBinding
参考链接
资源清单采用yaml/json文件配置
理解container runtime https://zhuanlan.zhihu.com/p/338036211
k8s的controller介绍 http://t.csdn.cn/4XLKX
Kubernetes入门:应用部署方式的演变
master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
service:pod对外服务的统一入口,下面可以维护同一类的多个pod
label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
namespace:命名空间,用来隔离pod的运行环境