云计算比赛需要,接下来一段时间学一下 Kubernetes .
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。
引子 - 安装工具
kubectl
Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。
kind
[kind](<https://kind.sigs.k8s.io/>)
让你能够在本地计算机上运行 Kubernetes。 kind
要求你安装并配置好 Docker。
kind 的 Quick Start 页面展示开始使用 kind
所需要完成的操作。
minikube
与 kind
类似,[minikube](<https://minikube.sigs.k8s.io/>)
是一个工具, 能让你在本地运行 Kubernetes。 minikube
在你的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一个一体化(all-in-one) 或多节点的本地 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。
概述
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
Kubernetes 这个名字源于希腊语,意为 “舵手” 或 “飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。
容器因为其许多优势而变得流行,例如:
- 敏捷应用程序的创建和部署
- 持续开发、集成和部署
- 关注开发与运维的分离
- 可观察性
- 跨开发、测试和生产的环境一致性
- 跨云和操作系统发行版本的可移植性
- 以应用程序为中心的管理
- 松散耦合、分布式、弹性、解放的微服务
- 资源隔离
- 资源利用
Kubernetes 为你提供:
- 服务发现和负载均衡
- 存储编排
- 自动部署和回滚
- 自动完成装箱计算
- 自我修复
- 密钥与配置管理
Kubernetes 不是什么
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。
- Kubernetes:
- 不限制支持的应用程序类型。
- 不部署源代码,也不构建你的应用程序。
- 不提供应用程序级别的服务作为内置服务。
- 不是日志记录、监视或警报的解决方案。
- 不提供也不要求配置用的语言、系统(例如 jsonnet)。
- 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
- 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。
SWARM 在大规模集群下也是可用的 但是功能并不强大
很多需要自己配置 Kubernetes 则弥补了这个缺点
Kubernetes 功能全面 稳定 适合企业运行
MESOS APACHE 分布式资源管理框架
2019-5 Twitter –> Kubernetes
Docker Swarm 2019-07 阿里云宣布 Docker Swarm 剔除
Kubernetes Google 10 年容器化基础架构 borg GO 语言 Borg 特点:轻量级:消耗资源小开源弹性伸缩:平滑升级,可以随时释放无用资源负载均衡:IPVS
介绍说明: 前世今生 KUbernetes 框架 KUbernetes 关键字含义
基础概念: 什么是 Pod 控制器类型 K8S 网络通讯模式
Kubernetes: 构建 K8S 集群
资源清单:资源 掌握资源清单的语法 编写 Pod 掌握 Pod 的生命周期 ***
Pod 控制器:掌握各种控制器的特点以及使用定义方式
服务发现:掌握 SVC 原理及其构建方式
存储:掌握多种存储类型的特点 并且能够在不同环境中选择合适的存储方案(有自己的简介)
调度器:掌握调度器原理 能够根据要求把 Pod 定义到想要的节点运行
安全:集群的认证 鉴权 访问控制 原理及其流程
HELM:Linux yum 掌握 HELM 原理 HELM 模板自定义 HELM 部署一些常用插件
运维:修改 Kubeadm 达到证书可用期限为 10 年 能够构建高可用的 Kubernetes 集群
服务分类有状态服务:DBMS 无状态服务:LVS APACHE
高可用集群副本数据最好是 >= 3 奇数个
前世今生
Borg 系统的架构
K8s 系统的架构
ETCD 数据库
etcd 的官方将它定为成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转.
Etcd 内部架构
- 完整 + 临时备份 // 防止增量备份太多,造成费时费力
- 实时将数据库写入本地磁盘中就行优化
CRI: Container Runtime Interface
Kubernetes 基于容器技术,为容器化应用提供了一个高度自动化的部署、扩展和管理的平台。CRI(Container Runtime Interface)是 Kubernetes 中用于管理容器运行时的 API 接口,它定义了容器运行时应该实现的标准接口,使得 Kubernetes 中的容器运行时可以互换使用。Kubernetes 通过 CRI 接口与容器运行时进行通信,而容器运行时则负责管理容器的生命周期,包括创建、启动、停止和销毁等操作。目前,Kubernetes 常用的容器运行时包括 Docker、containerd 等,用户也可以自定义容器运行时来满足自己的需求。
各个服务的功能
APISERVER:所有服务访问统一入口
CrontrollerManager:维持副本期望数目
Scheduler::负责介绍任务,选择合适的节点进行分配任务
ETCD:键值对数据库 储存 K8S 集群所有重要信息(持久化)
Kubelet:直接跟容器引擎交互实现容器的生命周期管理
Kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的
COREDNS:可以为集群中的 SVC 创建一个域名 IP 的对应关系解析
DASHBOARD:给 K8S 集群提供一个 B/S 结构访问体系
INGRESS CONTROLLER:官方只能实现四层代理,INGRESS 可以实现七层代理
FEDERATION:提供一个可以跨集群中心多 K8S 统一管理功能
PROMETHEUS:提供 K8S 集群的监控能力
ELK:提供 K8S 集群日志统一分析介入平台
Master 节点 核心组件
APISERVER
API Server
是Kubernetes
的核心组件,所有服务访问都通过API Server
进行统一入口。Kubernetes
的所有组件和应用程序都通过 API 服务器进行通信和交互。API
服务器提供了一个RESTful API
,可以通过HTTP
或HTTPS
进行访问,支持多种认证和授权方式。CrontrollerManager
控制器管理器是
Kubernetes
的一个核心组件,用于维持副本期望数目。Kubernetes
中的副本控制器(Replication Controller
)、水平自动伸缩器(Horizontal Pod Autoscaler
)、状态副本集(Stateful Set
)等控制器都由控制器管理器维护,控制器管理器保证集群中的副本数量始终满足用户定义的期望值。Scheduler
Scheduler
是Kubernetes
的一个独立组件,负责介绍任务并选择合适的节点进行任务分配。Kubernetes
中的调度器(Scheduler
)是一个独立的组件,它根据Pod
的需求和节点的资源情况,将Pod
分配给集群中最合适的节点。ETCD
ETCD
是Kubernetes
的一个核心组件,它是一个键值对数据库,储存Kubernetes
集群所有重要信息(持久化)。Kubernetes
集群中的所有组件和应用程序都需要使用ETCD
,来存储和共享集群中的各种配置信息和状态信息。
Node 节点 核心组件
Kubelet
Kubelet
是Kubernetes
的一个核心组件,运行在每个节点上的代理进程,直接跟容器引擎交互实现容器的生命周期管理。它负责管理节点上的容器,并与其他组件协作,确保集群中的所有容器都按照用户的期望正确运行。Kube-proxy
Kube-proxy
是Kubernetes
的一个核心组件,运行在每个节点上的代理进程,负责管理节点上的网络代理和负载均衡,为Kubernetes
集群中的服务提供稳定、可靠和高效的访问方式。Kube-proxy
负责写入规则至IPTABLES
、IPVS
实现服务映射访问。
其他插件
COREDNS
CoreDNS
是Kubernetes
的一个核心组件,是一个高性能的域名系统(DNS
)服务器,它负责将Kubernetes
集群中各种名称解析为对应的 IP 地址,从而实现各种服务之间的通信和交互。它可以为集群中的SVC
创建一个域名 IP 的对应关系解析。是实现负载均衡的一个很重要的功能.
DASHBOARD
Dashboard
是Kubernetes
的一个核心组件,是一个Web
界面,可以让用户通过浏览器直接管理和操作Kubernetes
集群中的各种资源和配置信息。它为Kubernetes
集群提供了一个B/S
结构访问体系。B/S
结构访问体系是指Browser/Server
结构,也就是浏览器/服务器
体系。在这种体系下,客户端通过Web
浏览器向服务器发起请求,服务器处理请求并返回响应,客户端再通过浏览器展示响应结果。这种体系下,客户端只需要一个浏览器,而服务器则可以是任何能够提供网页服务的计算机。这种体系下,客户端无需安装任何软件
,只需要通过浏览器即可访问服务器上的各种应用程序和资源。INGRESS CONTROLLER
Ingress Controller
是Kubernetes
的一个核心组件,是一个资源对象,它定义了集群中的一个HTTP
路由器。官方只能实现四层代理
,而Ingress
可以实现七层代理
。Ingress
资源可以通过配置各种规则和策略,将外部的HTTP
请求路由到集群中的各种服务上。FEDERATION
Federation
是Kubernetes
的一个核心组件,提供一个可以跨集群中心多Kubernetes统一管理
功能。它可以将多个Kubernetes
集群组合成一个逻辑整体,并提供一致性的管理和操作方式。通过Federation
,用户可以轻松地在多个Kubernetes集群
之间进行资源共享
和负载均衡
。PROMETHEUS
Prometheus
是Kubernetes
的一个核心组件,是一个开源的监控系统,可以帮助用户对Kubernetes
集群中的各种组件和应用程序进行监控和告警。它提供了灵活的查询语言和可视化界面,支持多种数据源和告警方式,可以帮助用户快速发现和解决Kubernetes
集群中的各种监控问题。ELK
ELK
是Kubernetes
的一个核心组件,是一个开源的日志分析平台,可以帮助用户对Kubernetes
集群中的各种日志进行收集、存储、分析和可视化。它提供了灵活的查询语言和可视化界面,支持多种数据源和告警方式,可以帮助用户快速发现和解决Kubernetes
集群中的各种日志问题。
以上是 Kubernetes 概述部分的各个服务功能的详细说明。这些服务组件构成了一个完整的 Kubernetes 集群,为云原生应用程序的部署和管理提供了完整的解决方案。