[K8S] 01 - What is Kubernetes
热身知识
一、基础知识
前置课程:[Docker] 00 - What is Docker?
Docker --> SWARM (自家原生的),但k8s是可以自我独立的一套体系,替代SWARM。
Borg 内部系统 --> Go 语言版本的就是K8S。
1 | 轻量级,消耗小; |
2 | 开源; |
3 | 弹性伸缩; |
4 | 内部实现 IPVS |
Pod 概念,最小管理单位,是个控制器。
Pod 的生命周期。
先定义一组pod,再定义统一的访问入口。
二、组件说明
scheduler, replication controller, api server, etcd,键值对数据库;v2 再k8s v1.11中弃用,建议使用etcd v3。
-
Master
CCM, cloud-controller manager, 是个插件,对接各个云供应商。彼此独立,各自发展。
有别于 kube-controller manager,是平行的关系。
使用golang以支持其他云,可使用其他云供应商的接口。
接口对象里包含有 load balancer, instance, zoon, cluster, root, provider name。
-
node
kubelet:维护容器的生命周期,volumn的网络管理。
Kube-proxy:service内部的服务发现,IPTABLES, IPVS 实现服务映射访问。
-
etcd
etcd 用于存储重要的“参数信息”。
Raft: 读写信息。
WAL: 预写日志。定时对其进行备份 <---- Snapshot
node 节点的三部分:kubelet, firewall, container。
CRI: Container Runtime Interface
三、基本框架
“Master服务” 的组件们:
API Server:服务访问入口。
Controller Manager:维持副本的期望数。
Scheduler:负责介绍任务,选择合适的节点进行分配任务。
ETCD:直接跟容器引擎交互实现容器的生命周期管理。
Kube-proxy:IPTABLES, IPVS 实现服务映射访问。
其他重要 “插件”:
COREDNS:DNS服务,可以为集群中的SVC创建一个域名IP的对应关系解析。
DASHBOARD:给 k8s 集群提供一个 b/s 结构访问体系。
INGRESS CONTROLLER:可以实现多达七层代理。
FEDETATION:提供一个可以跨集群中心多K8S统一管理功能。
PROMETHEUS:提供K8S集群的监控能力。
ELK:提供K8S集群日志统一分析介入平台。
Controller 挂了怎么办?Controller确保container的健康。
Controller Manager 监控 Controller。
Controller Manager 也被做了冗余。
Pod
一、Pod概念
** 涉及到的知识点 **
逻辑组件 Pod,可包含多个container,共享网络空间。
有标签,Label, Label Selector。
调度的结果,由kubelet执行。
共享 net uts, ipc。
user, mnt, pad 互相隔离。
** k8s 基本概念 **
讲得相对清晰:青云QingCloud 解决方案
Master's deployment 通过 “标签” 来知道 监控哪些个 pod。
前端 pod --> "后端在ip哪里, backend service在哪里” --> DNS Server: 返回后台服务的IP地址。
后台服务的IP地址,可能同时代表了两个 pod。
Kube proxy 发送请求到任意一个。
Ingress 控制器 把内部的server 配置成 “外部可访问的URL”。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: # 该deployment可以监控和管理哪些 port matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx: 1.7.9 ports: - containerPort: 80
[Pod 分类]
1) 不被控制器管理的 Pod(自主式 Pod),能够自我管理,如果器械故障,没法全局调度。
2) 控制器管理的 Pod(推荐),ReplicationController就是最早的一类控制器,展开下面的故事。
-
ReplicationController & ReplicaSet & Deployment
(为无状态服务而设计)
ReplicationController 定义有多少个 Pod 副本存在 according to user requirements。
ReplicaSet 支持集合式的 selector。
一般建议,使用 Deployment 自动管理 ReplicaSet(因为 Deployment 支持 rolling-update)。
-
-
滚动更新 rolling-update
-
Deployment --> RS。
Deployment --> 创建若干 pod。
若要更新 image的版本。详见视频:Click me
-
-
Horizontal Pod Autoscaling (HPA)
-
仅适用于 Deployment 和 ReplicaSet。
根据cpu内存等自动扩容。
如果其中一个pod 宕机了呢?
“服务发现”:监控pod是不是宕机了,毕竟pod是不稳定的。
[Service]
新 pod 替换 旧 pod,service 通过 label 来识别 pod,新的 pod 会立刻被service发现。
AddOns:附件,一种特殊的pod,给系统架构服务的。
NMT
Ref: kubernets部署说明
LBaaS
-
StatefulSet
(为了解决“有状态服务”的问题)
稳定的之持久化存储,基于PVC实现;
稳定的网络标志,基于 Headless Service 来实现;
有序部署,有序扩展,即 Pod 是有顺序的;
有序收缩,有序删除;
-
DaemonSet
一个node上运行多个pod。
每个计算节点后台运行 “日志收集任务”,且该任务可以 被自动调度到新加入的节点。
-
Job, Cron Job
负责批处理任务。保证批处理任务的一个或多个pod成功结束。
Job, 例如备份操作,清除操作等,为的是特定的任务。
二、网络通讯方式
假定所有的Pod都在一个可以直接连通的扁平的网络空间。
[网络]
02 kubernetes基础概念, 43:03 / 1:16:24
3 --> 2 --> 1
(1) pod 网络:service 与 pod的地址不同。
(2) 集群网络:service 的地址是假的。
(3) 节点网络:入口。
pod虽然在不同的主机node上,但仍然可以在同一个网络,相互通信。
-
单机网络
172.16.1.0/24 是默认网关。
Docker0是虚拟网桥。
eth0, veth 虚拟网卡,veth加入到虚拟网桥中。
-
多机网络
实现原理分类:直接路由,桥接,overlay隧道方式。
实现方法分类:docker1.9版本 引入的 Libnetwork项目,插件方式。
但是,NAT可能不太好,还不如利用 such as “隧道方式” 来解决。
IPtable就实现了负载均衡,更方便了许多。
Container Network Interface,即容器网络的 API 接口 与 “集群网络方案”
隧道方案 (Overlay Networking)
1) Weave, 2) Open vSwitch, 3) Flannel
Ref: 隧道技术 与 Overlay
隧道技术,一种数据包封装技术,它是将原始IP包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的IP包)的数据净荷中进行传输。使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。
Overlay,在传统网络上虚拟出一个虚拟网络来,传统网络不需要在做任何适配。
Flannel 示范如下,其实就是“虚拟的二层网路”。
路由方案
1) Calico 对混合云的亲和度比较高, 2) Macvlan
每个node就看做是个路由器,所有的node,组成了一个路由器构成的网络。
始终根据IPTABLE规则进行转发,并没有分包解包的过程。比Flannel,效率更高
有pause的容器就要被启动。
1) 共享,网络栈。
2) 共享挂载的存储。
K8S Storage
Ref: https://activity.qingcloud.com/course/k8s/
Docker 可以通过插件,扩展 存储 Volume 和网络 Network 的边界。
安装配置
/* continue */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律