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 架构

单点架构

image-20240912154256829

高可用架构

image-20240912154320252

POD的创建流程

以后了解深入会补充图

image-20240912154441422


K8S 的对象

POD介绍(POD资源)

1、Pod是K8S的最小单位
2、Pod的IP地址是随机的,删除Pod会改变IP
3、Pod都有一个根容器
4、一个Pod内可以由一个容器或多个容器组成
5、一个Pod内的容器共享根容器的网络、名称空间、和文件系统卷
6、一个Pod内的网络地址由根容器提供

image-20240912155005420

POD的运行状态

image-20240912154627535

server资源

Service也是K8S核心资源之一,Service定义了服务的入口地址
用来将后端的Pod服务暴露给外部的用户访问。

server提供了两种网络资源(nodeport--clusterIP)

image-20240912154834266

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的顺序

POD RC Service 的关系

image-20240912155202102