K8S基本概念
Posted 伍妖捌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S基本概念相关的知识,希望对你有一定的参考价值。
简介
Kubernetes简称k8s。用于自动部署,扩展和管理容器化应用程序的开源系统。
功能
服务发现和负载均衡
Kubernetes可以使用DNS名称或自己的IP地址公开容器,如果到容器的流量很大,Kubernetes可以负载均衡并分配网络流量,从而使部署稳定。
存储编排
Kubernetes允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
自动部署和回滚
您可以使用Kubernetes描述已部署容器得所需状态,它可以以受控得速率将实际状态更改为所需状态。例如,您可以自动化Kubernetes来为您得部署创建新容器,删除现有容器并将它们得所有资源用于新容器。
自动二进制打包
Kubernetes允许您指定每个容器所需CPU和内存(RAM)。当容器指定了资源请求时,Kubernetes可以做出更好的决策来管理容器的资源。
自我修复
Kubernetes重新启动失败的容器、替换容器、杀死不响应用户定义的运行状态检查的容器,并且在准备好服务之前不将其通告给客户端。
密钥与配置管理
Kubernetes允许您存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
整体架构
主从方式
一个主结点+N个从结点
Kubernetes Master
kube-apiserver
- 对外暴露K8S的api接口,是外界进行资源操作的唯一入口
- 提供认证、授权、访问控制、api注册和发现等机制
etcd
- etcd是兼具一致性和高可用性的键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库。
- Kubernetes集群的etcd数据通常需要有个备份计划
kube-scheduler
主节点上的组件,该组件监视那些新创建的未指定运行节点的Pod,并选择节点让Pod在上面运行。
所有对K8S的集群操作,都必须经过主节点进行调度。
kube-controller-manager
- 在主节点上运行控制器的组件
- 这些控制器包括:
1.节点控制器:负责在节点出现故障时进行通知和响应。
2.副本控制器:负责为系统中的每个副本控制器对象维护正确数量的Pod。
3.端点控制器:填充端点对象(即加入Service与Pod)
4.服务账户和令牌控制器:为新的命名空间创建默认账户和API访问令牌。
Kubernetes Node
kubelet
- 一个在集群中每个节点运行的代理。它保证容器都运行在Pod中。
- 负责维护容器的生命周期、同时也负责Volume(CSI)和网络(CNI)的管理。
kube-proxy
+负责为Service提供cluster内部的服务发现和负载均衡。
容器运行环境(Container Runtime)
- 容器运行环境是负责运行容器的软件。
- Kubernetes支持多个容器运行环境Dockers、Container、cri-o、rktlet以及任何实现Kubernetes CRI(容器运行环境接口)。
fluentd
是一个守护进程,它有助于提供集群层面日志。
整体架构
Container
容器,可以是docker启动的一个容器
Pod
- k8s使用Pod来组织一组容器
- 一个Pod中的所有容器共享同一个网络
- Pod是k8s中最小部署单元
Volume
- 声明在Pod容器中可以访问的文件目录
- 可以被挂载在Pod中一个或多个容器指定路径下
- 支持多种后端存储对象(本地存储、分布式存储、云存储…)
Controllers
更高层次对象,部署和管理Pod
- ReplicaSet: 确保预期的Pod副本数量
- Deplotment:无状态应用部署
- StatefulSet:有状态应用部署
- DaeemonSet:确保所有Node都运行一个指定Pod
- Job:一次性任务
- Cronjob:定时任务
Deployment
- 定义一组Pod的副本数目、版本等
- 通过控制器(Controller)维持Pod数目
- 通过控制器以指定的策略控制版本(滚动升级、回滚等)
Service
- 定义一组Pod的访问策略
- Pod的负载均衡,提供一个或多个Pod的稳定访问地址
- 支持多种方式(ClusterIP、NodePort、LoadBalance)
Label:标签,用于对象资源的查询、筛选
Namespace: 命名空间
- 一个集群内部的逻辑隔离机制(鉴权、资源)
- 每个资源都属于一个namespace
- 同一个namespace所有的资源名不能重复
- 不同的namespace资源名可以同名
流程
API
1.通过API来操作整个集群
2.通过kubectl、ui、curl最终发送http+json/yaml方式的请求给API Server,然后控制k8s集群。
以上是关于K8S基本概念的主要内容,如果未能解决你的问题,请参考以下文章