K8S技术第一篇

K8S架构介绍

这几天参加了k8s官网培训,在这总结一下学习到的知识给大家分享,后面会陆续更新上来,如果有对k8s感兴趣的,或从事k8s行业的,可以多交流,谢谢

1、k8s是什么?
kubernetes是一个开源,以集群方式部署调度容器应用,弹性伸缩以及运维容器集群的系统。
kubernetes1.0版本在2015年12月21日正式发布,2015年7月google联合Linux基金会(Linux Foundation)创办了CNCF基金会(Cloud Native Foundation)并将kubernetes种子项目捐献给了CNCF基金会。且k8s每三个月发布一个版本,目前最新版本v1.18.4
2、k8s核心组件
master节点是集群的大脑,主要运行的组件 kube-apiservice、kube-controller-manager、kube-scheduler、etcd等组件,主要职责是对资源管理、调度、认证、弹性伸缩、安全认证。
node节点运行容器应用,由master管理,接受master节点的请求,进行容器的创建与管理,并将运行在上面的容器应用上报到master节点
下面分别介绍一下:
etcd保存了整个集群的状态和应用部署的信息
Kube-Controller-manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
Kube-scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet负责节点注册和心跳发送、应用生命周期管理、应用健康检查、CSI存储接口对接存储;
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy负责服务暴露实现;
Add-ons插件
• kube-dns负责为整个集群提供服务注册和服务发现;
• Ingress Controller为服务提供七层负载均衡;
• metric-server收集节点和POD的资源使用;
• Dashboard提供GUI

在这里插入图片描述
3、基本概念
pod
label
anonation
node
namespace
init container
static pod
controller:
replicaset
deployment
statefulset
daemonset
job
cronjob
service

pod
Pod是kubernetes中可以创建和部署的最小也是最简的单位。
Pod中封装着应用的容器(有的情况下是好几个容器),存储、独立的网络IP,管理容器如何运行的
策略选项。可能由一个或者多个容器组合在一起共享资源。
Pod中可以共享两种资源:网络和存储。
• 网络:每个Pod都会被分配一个唯一的IP地址。Pod中的所
有容器共享网络空间,包括IP地址和端口。Pod内部的容
器可以使用localhost互相通信。Pod中的容器与外界通信
时,必须分配共享网络资源(例如使用宿主机的端口映
射)。
• 存储:可以Pod指定多个共享的Volume。Pod中的所有容
器都可以访问共享的volume。Volume也可以用来持久化
Pod中的存储资源,以防容器重启后文件丢失。

label
Label是识别Kubernetes对象的标签,也是不同资源之间互相关联的方式。以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。
anonation
Annotation是注解。Annotation可以将Kubernetes资源对象关联到任意的非标识性元数据。使用客户端(如工具和库)可以检索到这些元数据。
Annotation与Label区别
Label主要用于选择对象,可以挑选出满足特定条件的对象。
annotation 不能用于标识及选择对象。主要用于注释信息。
node
namespace
• 在Kubernetes中用来实现隔离的东西叫Namespace,
Namespace是对一组资源和对象的抽象集合,比如可以用
来将系统内部的对象划分为不同的项目组或用户组。常见的
pods, services, replication controllers和deployments等
都是属于某一个namespace的(默认是default)。
• Kubernetes默认部署后会创建kube-system、default
namespace,kube-system主要用于平台组件运行,
default用于默认的部署namespace。
• 默认get资源对象不指定namespace时,则默认是default
namespace
• 可以给namespace设置配额和默认的资源限制来达到集群
资源的管理目的。
• node, persistentVolumes等集群类资源则不属于任何namespace
init container
Pod 能够具有多个容器,应用运行在容器里面,但是它也可能有一个或
多个先于应用容器启动的 Init 容器。Init容器是一种专用的容器,在应用
程序容器启动之前运行,一般包括一些应用镜像中不存在的实用工具和
安装脚本。Init 容器与普通的容器非常类似,除了如下点:
• Init 容器总是运行到成功完成为止。
• 如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到
Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,
它不会重新启动。
• 如果为一个 Pod 指定了多个 Init 容器,那些容器会按顺序一次运行一
个。 每个 Init 容器必须运行成功,下一个才能够运行。 当所有的 Init
容器运行完成时,Kubernetes 初始化 Pod 并像平常一样运行应用容
器。
应用场景:
• 进行应用的初始化,如,从git或svn拉取应用的最新配置或动态生成配置文件。
• 进行应用的依赖检查,如一些web服务,必须要数据库服务先启动,然后在去启动
web服务,否则会启动失败,此时在web应用pod内定义一个init容器,通过init容器
去对数据库容器进行检测,一旦检测到数据库容器启动成功,就启动web应用pod。
static pod
• Static-Pod由特定节点上的kubelet守护程序直接管理,不需要使用API-server监视它们。
• kubelet会监视每个静态Pod(并在崩溃时重新启动它)。
• 静态Pod始终绑定到一个Kubelet在特定节点上。
• 节点服务器上运行的static-Pod通过API-server上是可见,但不会通过API-server进行控制。
controller:
replicaset用实现pod副本数的管理
deployment是常用的控制器对象,能进行应用部署、副本数管理、滚动升级、弹性伸缩等操作
statefulset用于保证有状态应用
daemonset在每个node上都运行一个pod
job用于执行一次性任务
cron job用于定时执行一次性任务
service
service是为一组功能相同的pod提供统一入口并为它们提供负载均
衡和自动服务发现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章