最近学习完了docker和containerd,下一步便开始学习K8s,学习操作前必须得了解一下K8S是什么?
1、什么是K8S
kuberbetes这词是起源于希腊语,是舵手的意思,因为k与s之间一共有8个字母,所以大家习惯称呼为K8s;它的logo是一个舵,而舵是用来操控船的;而船不就是docker吗?
当使用docker或containerd作为容器运行时,如果运行大量的容器服务,此时管理这些容器就会很麻烦,而K8S就是这么一个对容器进行统一管理的开源容器编排平台,支持自动部署、扩展和容器化应用程序;
K8S起源
K8s的前身为谷歌的Borg项目;Borg是谷歌内部的一个容器编排工具,大规模运行生产工作十几年,承担了谷歌90%以上的业务,具有非常成熟的架构;
而K8s就是在Borg的基础上开发的轻量级容器编排工具;于2014年6月开源,后于 2015 年捐赠给云原生计算基金会(CNCF);
K8S作用
1)可以对容器自动化部署、自动化扩缩容、跨主机管理等;
2)可以对代码进行灰度发布、金丝雀发布、蓝绿发布、滚动更新等;
3)具有完整的监控系统和日志收集平台,具有故障自恢复的能力;
2、K8S架构
K8s的物理架构为主/从模式,具备至少一个master节点和多个worker节点;master节点是集群的控制节点,负责整个集群的管理和控制;worker节点接受master的命令运行容器;
Kubectl
kubectl是管理运行K8s集群的命令行工具,在**$HOME/.kube
** 目录中可以配置一个**config
**的配置文件去设置操作的K8s集群;
master节点组件
1)Api server:提供了资源操作的唯一入口,所有操作均需要和Api server交互,且Api server自身也提供认证、授权、访问控制、API 注册和发现等机制;
2)Controller-manager:管理控制器,是K8s集群内部的管理控制中心,负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
3)Schedule:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
4)etcd:保存了集群资源状态信息,包括了pod是否创建成功、创建失败原因、异常信息等;它是一个高可用的分布式键值对(key-value)数据库,基于Go语言实现,内部采用raft
协议作为一致性算法;
worker节点组件
1)Kubelet: 负责维护容器的生命周期,它会定期与Api server上报自身节点信息,同时也负责 Volume(CSI)和网络(CNI)的管理;
2)Kube-proxy:提供网络代理和负载均衡;
3)Container:容器运行时;
3、K8S核心资源
1)Pod:是K8s中的最小调度单元;Pod是集群上正在运行的一个进程,然后在Pod中会运行容器,Pod中的容器共享存储、网络;
2)Lable:用于表示各项资源,如Node、Pod、Service等,一个资源可以绑定多个Lable,以键值对(key-value)形式存在;K8s可以通过Lable实现多维度的资源管理,后续可以通过Lable Selector查询和筛选资源对象;
3)ReplicaSet:K8s集群中的副本控制器,管理Pod,使pod副本数量维持在预设个数;
4)Deployment:用于管理ReplicaSet和Pod的副本控制器,比ReplicaSet更为高级,在创建Deployment的时候会自动创建ReplicaSet,ReplicaSet再创建Pod;
5)Service:K8s中Service对象定义了一个服务访问的入口,这个入口是一个在集群内部有效的虚拟IP,可以端访问这个虚拟IP就可以访问服务背后的应用集群实例;
6)Node:是所有 Pod 运行所在的工作主机,Node上会运行Pod;
7)Namespace:设置K8s集群的命名空间,可以提供虚拟的隔离;默认有两个命名空间,分别为default和 kube-system;
8)Job:用来控制批处理型任务的 API 对象;
9)Volume:存储卷,生命周期和作用范围在Pod中;
10)Secret:用与保存和传递密码、密钥、认证凭证等;
11)StatefulSet:有状态服务集,用于控制有状态服务;
12)DaemonSet:后台支撑服务集;
我是chililopp,正在学习k8s,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!