K8S的初始
K8S的简介
Kubernetes 是一个可移植、可扩展的开源平台,
用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。
Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。
# 简介地址
https://kubernetes.io/zh-cn/docs/concepts/overview/
k8s官网:https://kubernetes.io/zh-cn/
k8s官网文档: Kubernetes 文档 | Kubernetes https://kubernetes.io/zh-cn/docs/home/
docker官方文档:Docker Docs https://docs.docker.com/
prometheus官方文档: Overview | Prometheus https://prometheus.io/docs/introduction/overview/
ansible安装k8s: https://github.com/easzlab/kubeasz
容器化管理工具
都是用于集群管理和容器编排
borg swarm mesos
总结:
- Borg: 谷歌内部的超大规模集群管理系统,Kubernetes 的前身。
- Swarm: Docker 的原生容器编排工具,适合中小规模集群。
- Mesos: 分布式资源管理平台,支持多种类型的工作负载,适合大规模数据中心。
Borg
- 开发者: 谷歌内部开发并使用
- 功能: Borg 是谷歌内部使用的集群管理系统,被认为是现代容器编排系统(如 Kubernetes)的祖先。它负责在谷歌的大规模数据中心中调度和管理应用程序和服务。
- 特点:
- 高度可扩展,可以处理数以千计的节点。
- 能有效地利用硬件资源,最大化数据中心效率。
- 自动化调度、故障处理、负载均衡等。
- 影响: Kubernetes 的设计理念很大程度上借鉴了 Borg 的架构和运行模式。
Swarm
开发者: Docker 公司
功能: Swarm 是 Docker 提供的原生集群和容器编排工具,允许用户在多台主机上创建和管理 Docker 容器集群。
特点:
- 集成在 Docker 中,因此使用 Docker 的 Swarm 模式非常简单和自然。
- 支持容器自动调度,服务发现,负载均衡等。
- 原生支持 Docker CLI,易于使用。
- 提供了与 Docker 单机模式一致的 API 接口,便于开发者进行集群管理。
Swarm 适合中小规模集群,虽然功能全面,但相比于 Kubernetes,Swarm 在高复杂度、多租户环境下略显不足。
Mesos
- 开发者: Apache 基金会
- 功能: Apache Mesos 是一个分布式系统内核,可以有效地管理数据中心和云环境中的资源,为运行在其上的应用程序提供资源调度和分配。
- 特点:
- 提供资源隔离和共享,能够支持多种类型的工作负载(如长时间运行的服务和批处理作业)。
- 支持细粒度的资源分配,不仅限于容器,还可以管理虚拟机、数据库等不同类型的工作负载。
- 可以与 Marathon 一起使用,作为其容器编排框架。
- 高度可扩展,适合大规模集群。
K8S 的组件
master (控制平面组件)(Control Plane Components)
kube-apiserver(apiserver):司令部,所有Master上的组件工作都要经过apiserver
etcd:存储所有命令、资源清单、webUI操作及其他组件数据
kube-scheduler(scheduler):资源计算、资源调度
kube-controller-manager(controller):控制node组件启动容器
node
1.) kubelet:控制容器运行时(docker)启动指定的容器
容器运行时(Container runtime):docker
- containerd
- CRI-O
- Docker Engine
- Mirantis Container Runtime
2.) kube-proxy:POD端口映射,网络相关
## K8S三大接口API二次开发,调用接口
CRI:runtime,容器操作接口
CNI:network,网络操作接口
CSI:storage,存储操作接口
K8S 架构
单点架构
高可用架构
POD的创建流程
以后了解深入会补充图
K8S 的对象
POD介绍(POD资源)
1、Pod是K8S的最小单位
2、Pod的IP地址是随机的,删除Pod会改变IP
3、Pod都有一个根容器
4、一个Pod内可以由一个容器或多个容器组成
5、一个Pod内的容器共享根容器的网络、名称空间、和文件系统卷
6、一个Pod内的网络地址由根容器提供
POD的运行状态
server资源
Service也是K8S核心资源之一,Service定义了服务的入口地址
用来将后端的Pod服务暴露给外部的用户访问。
server提供了两种网络资源(nodeport--clusterIP)
NodePort:宿主机端口映射ClusterIP端口对外提供服务
ClusterIP:POD的负载均衡
问题:POD的IP是随机的,如果一个POD宕机了,K8S会自动拉起一个新的POD,IP变化了如何加入到
ClusterIP这个负载均衡集群中?
解决方案:使用DNS解析POD的IP到一个"字符串上"(标签)
DNS:
- coreDNS
- bind9
- dnsmsq
Label标签资源
Label标签是K8S中非常重要的一个属性,Label标签就像身份证一样,可以用来识别K8S的对象。
传统架构中,不同的服务应用之间通讯,都是通过IP和端口,但是在K8S中很多匹配关系都是通过标签来找。
Namespace资源
Namespace(名称空间)是K8S中非常重要的一个概念,Namespace将集群内部的资源进行隔离划分。
在Namespace中,形成逻辑上的不同项目组或用户组。
Controller资源(控制器资源)
# Controller用来管理Pod。
## Pod控制器的种类有很多:
- RC Replication Controller 控制Pod有多个副本
- RS ReplicaSet RC控制器的升级版,可以自动拉起宕机的POD
- Deployment 推荐使用,功能强大,包含了RS控制器,对镜像做版本管理
- DaemonSet 保证所有的Node节点上,有且只有一个Pod运行
- StatefulSet 有状态的应用,为Pod提供唯一标识,它可以保证部署和scale的顺序