Kubernetes (K8s) 是一种开源的容器编排引擎,用于自动化应用程序容器的部署、扩展和操作。它由Google设计并捐赠给Cloud Native Computing Foundation(CNCF)进行维护。Kubernetes 提供了一个强大的平台,用于构建和管理容器化应用程序的解决方案。
-
K8s基础概念
-
Kubernetes集群架构
-
Master节点组件
-
API Server
-
Kubernetes API 服务器的主要实现是 kube-apiserver。 kube-apiserver 设计上考虑了水平扩缩,也就是说,它可通过部署多个实例来进行扩缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。
-
Scheduler
-
kube-scheduler 是控制平面的组件, 负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。
-
调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、 亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。
-
Controller Manager
-
kube-controller-manager 是控制平面的组件, 负责运行控制器进程。
-
从逻辑上讲, 每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。
-
Etcd
-
一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。
-
-
Node节点组件
-
节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。
-
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pod 所需的服务; 这些节点由控制面负责管理。
-
通常集群中会有若干个节点;而在一个学习所用或者资源受限的环境中,你的集群中也可能只有一个节点。
-
Kubelet
-
kubelet 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。
-
kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
-
Kube-Proxy
-
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
-
kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
-
如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
-
容器运行时(Container Runtime)
-
这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。
-
Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
-
-
-
Kubernetes核心概念
-
Pods
-
Pod的生命周期
-
Pod的调度
-
-
Services
-
Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。
-
Ingress
-
Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。
-
Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
-
Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。
-
Service的类型
-
ClusterIP(默认缺省类型)
-
默认类型,Service会分配一个ClusterIP(集群内部IP),用于集群内部的访问。这意味着Service只能在Kubernetes集群内部的其他Pod中使用这个ClusterIP访问被Service代理的Pod。
-
NodePort
-
在ClusterIP的基础上,Service会在每个Node(节点)上开放一个固定的端口(NodePort),允许外部流量通过这个端口访问Service。NodePort类型的Service会使用集群节点的IP地址和NodePort端口来代理请求到Service中的Pod。
-
LoadBalancer
-
在NodePort的基础上,Kubernetes云服务提供商(如AWS、GCP、Azure等)会创建一个外部负载均衡器,并将负载均衡器配置为代理到Service的NodePort上。这样可以通过负载均衡器的IP来访问Service,负载均衡器将流量分发到集群中的Pod。
-
ExternaLName
-
这种类型的Service不会创建任何负载均衡器或ClusterIP,它只通过DNS返回一个外部服务的CNAME。主要用于访问集群外部的服务,将服务映射到一个外部名字。
-
-
Service的发现机制
-
-
Deployments
-
滚动更新
-
回滚
-
扩展与缩容
-
-
-
Kubernetes网络模型
-
CNI网络插件
-
Flannel
-
是一个可以用于 Kubernetes 的 overlay 网络提供者。
-
Calico
-
Calico 是一个联网和网络策略供应商。 Calico 支持一套灵活的网络选项,因此你可以根据自己的情况选择最有效的选项,包括非覆盖和覆盖网络,带或不带 BGP。 Calico 使用相同的引擎为主机、Pod 和(如果使用 Istio 和 Envoy)应用程序在服务网格层执行网络策略。
-
Canal
-
Canal 结合 Flannel 和 Calico,提供联网和网络策略。
-
-
Service Mesh
-
Istio
-
Linkerd
-
-
-
-
K8s高级特性
-
存储管理
-
持久卷(PersistentVolumes)
-
持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。 此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。
-
PV的生命周期
-
PV的类型
-
csi
-
容器存储接口(CSI)
-
fc
-
Fibre Channel(FC)存储
-
hostPath
-
HostPath 卷 (仅供单节点测试使用;不适用于多节点集群;请尝试使用 local 卷作为替代)
-
iscsi
-
iSCSI(IP 上的 SCSI)存储
-
local
-
节点上挂载的本地存储设备
-
nfs
-
网络文件系统(NFS)存储
-
-
PV的访问模式
-
RWO(ReadWriteOnce)
-
卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式仍然可以在同一节点上运行的多个 Pod 访问该卷。 对于单个 Pod 的访问,请参考 ReadWriteOncePod 访问模式。
-
ROX(ReadOnlyMany)
-
卷可以被多个节点以只读方式挂载
-
RWX(ReadWriteMany)
-
卷可以被多个节点以读写方式挂载。
-
RWOP(ReadWriteOncePod)
-
卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用 ReadWriteOncePod 访问模式。
-
ReadWriteOncePod 访问模式仅适用于 CSI 卷和 Kubernetes v1.22+。 要使用此特性,你需要将以下 CSI 边车更新为下列或更高版本:
-
csi-provisioner:v3.0.0+
-
csi-attacher:v3.3.0+
-
csi-resizer:v1.3.0+
-
-
PV与PVC的动态绑定
-
尽管 PersistentVolumeClaim 允许用户消耗抽象的存储资源, 常见的情况是针对不同的问题用户需要的是具有不同属性(如,性能)的 PersistentVolume 卷。 集群管理员需要能够提供不同性质的 PersistentVolume, 并且这些 PV 卷之间的差别不仅限于卷大小和访问模式,同时又不能将卷是如何实现的这些细节暴露给用户。 为了满足这类需求,就有了存储类(StorageClass) 资源。
-
-
存储类(StorageClass)
-
StorageClass的创建与使用
-
StorageClass的提供者
-
-
动态卷供应
-
Amazon Elastic Block Store(EBS)
-
默认每节点最大卷数:39
-
对于 M5、C5、R5、T3 和 Z1D 类型实例的 Amazon EBS 磁盘,Kubernetes 仅允许 25 个卷关联到节点。 对于 ec2 上的其他实例类型 Amazon Elastic Compute Cloud (EC2), Kubernetes 允许 39 个卷关联至节点。
-
Google Presisten Disk
-
默认每节点最大卷数:16
-
在 Google Compute Engine环境中, 根据节点类型最多可以将 127 个卷关联到节点。
-
Microsoft Azure Disk Storage
-
默认每节点最大卷数:16
-
在 Azure 环境中, 根据节点类型,最多 64 个磁盘可以关联至一个节点。
-
-
-
资源配额与限制
-
资源请求与限制
-
CPU资源限制
-
内存资源限制
-
-
配额管理
-
ResourceQuota
-
CPU与内存配额
-
Pod配额
-
-
LimitRange
-
CPU与内存限制
-
其他资源限制
-
-
-
-
安全与认证
-
RBAC(基于角色的访问控制)
-
角色(Role)与集群角色(ClusterRole)
-
角色绑定(RoleBinding)与集群角色绑定(ClusterRoleBinding)
-
-
身份认证
-
网络策略(Network Policies)
-
定义网络策略
-
应用网络策略
-
-
-
集群监控与日志
-
日志收集与查询
-
Fluentd
-
ELK Stack(Elasticsearch, Logstash, Kibana)
-
-
监控组件与工具
-
Prometheus
-
Prometheus架构
-
Prometheus监控配置
-
-
Grafana
-
Grafana与Prometheus集成
-
Grafana仪表板创建
-
-
-
-
集群备份与恢复
-
Velero
-
Velero组件
-
Velero备份与恢复操作
-
-
-
K8s的网络管理
-
网络模型与组件
-
CNI(容器网络接口)
-
网络插件 是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。
-
Calico、Flannel等网络插件
-
-
服务发现
-
DNS服务发现
-
Ingress
-
-
网络策略
- Network Policy实现网络隔离
-
-
-
云原生生态
-
容器技术
-
Docker
-
Docker的镜像与容器
-
Docker Compose与Docker Swarm
-
-
容器镜像仓库
-
Harbor
-
Harbor安装与配置
-
Harbor镜像管理
-
-
Docker Hub
-
Docker Hub账户管理
-
Docker Hub镜像管理
-
-
-
-
服务网格
-
Istio
-
Istio服务发现
-
Istio流量管理
-
-
服务网格的概念
- 服务网格的优势
-
-
持续集成/持续部署(CI/CD)
-
Jenkins
-
Jenkins安装与配置
-
Jenkins Pipeline构建
-
-
GitLab CI/CD
-
GitLab CI/CD配置
-
GitLab CI/CD执行流程
-
-
-
微服务治理
-
服务发现
-
CoreDNS 是一种灵活的,可扩展的 DNS 服务器,可以 安装为集群内的 Pod 提供 DNS 服务。
-
Consul
-
Eureka
-
-
服务治理
-
服务治理能力
-
限流与削峰
-
熔断与降级
-
-
Service Mesh(微服务架构设计模式)
-
Istio
-
Linkerd和Envoy
-
-
-
-
DevOps文化与实践
-
敏捷开发
-
Scrum
-
Kanban
-
-
自动化运维
-
Ansible
-
Chef/Puppet
-
-
-
KubeSphere - 企业级K8s平台
-
KubeSphere的功能特性
-
多租户管理
-
DevOps集成
-
-
KubeSphere的部署与配置
-
All-in-one安装
-
多节点安装
-
-
-
Knative - 自动化Serverless部署
-
Knative Serving
-
服务部署与路由
-
服务扩展与缩容
-
-
Knative Eventing
-
事件源(Event Sources)
-
事件触发器(Event Triggers)
-
-
-