k8s学习笔记

一、k8s架构

master/node两层架构;service-client架构

k8s官网架构图如下

k8s学习笔记_第1张图片

简化后如下

k8s学习笔记_第2张图片

二、k8s核心组件

master节点:apiserver,scheduler,controller-manager,etcd

node节点: kubelet,kube-proxy,docker

1、API Server

供Kubernetes API接口,主要处理 REST操作以及更新ETCD中的对象

所有资源增删改查的唯一入口。

2、Scheduler

资源调度,负责Pod到Node的调度。

3、Controller Manager

所有其他群集级别的功能,目前由控制器Manager执行。资源对象的自动化控制中心。

4、ETCD

所有持久化的状态信息存储在ETCD中。etcd组件作为一个高可用、强一致性的服务发现存储仓库。

5、Kubelet

管理Pods以及容器、镜像、 Volume等,实现对集群对节点的管理。

6、Kube-proxy

提供网络代理以及负载均衡,实现与Service通信

7、Docker Engine

负责节点的容器的管理工作

三、k8s常用控制器

控制器:用来控制pod的具体状态和行为;控制器又被称为工作负载,pod通过控制器实现应用的运维,比如伸缩、升级等

1、deployment

适合无状态的部署,用来管理pod和replicaset,具有上线部署、副本设定、滚动更新、回滚等功能,还可提供声明式更新,例如只更新一个新的Image

2、statefulset

适合部署有状态应用

    --解决Pod的独立生命周期,保持Pod启动顺序和唯一性

    --稳定,唯一的网络标识符,持久存储(例如:etcd配置文件,节点地址发生变化,将无法使用)

    --有序,优雅的部署和扩展、删除和终止(例如:mysql主从关系,先启动主,再启动从)

    --有序,滚动更新

3、daemonset

一次部署,所有node节点都会部署;适合以下场景

    --运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph

    --在每个Node上运行日志收集 daemon,例如 fluentd、 logstash

    --在每个Node上运行监控 daemon,例如 Prometheus Node Exporter

4、job

一次性的执行任务

5、cronjob

周期性的执行任务

6、replicaset

用来确保容器应用的副本数量始终保持在用户自定义的副本数,即如果有容器异常退出,会自动创建新的pod来替代;而异常多出的容器也会自动回收;支持集合式的selector

四、常见服务的特点

1、无状态服务的特点:

1)deployment 认为所有的pod都是一样的

2)不用考虑顺序的要求

3)不用考虑在哪个node节点上运行

4)可以随意扩容和缩容

2、有状态服务的特点:

1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper

2)实例之间不对等的关系,以及依靠外部存储的应用。

3、常规的service服务和无头服务的区别:

service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。

Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP,无头服务经常用于statefulset的有状态部署

你可能感兴趣的:(k8s学习笔记)