小结
k8s进阶篇的知识点,学习总结一波。
1.ETCD基础命令
Etcd是一个分布式键值存储系统,用于在Kubernetes集群中存储配置数据。以下是一些常用的Etcd基础命令以及常用参数的总结:
- etcdctl version:显示当前etcdctl客户端的版本。
- etcdctl member list:列出所有etcd节点的成员列表。可以使用--endpoints参数指定要查询的etcd节点地址。
- etcdctl endpoint status:显示所有etcd节点的健康状况。可以使用--write-out参数来指定要显示的输出格式。
- etcdctl put key value:将键值对存储到etcd中。可以使用--ttl参数指定租约的过期时间。
- etcdctl get key:从etcd中检索特定的键值对。可以使用--prefix参数检索键的前缀匹配项。
- etcdctl watch key:监视特定键的更改,并在发生更改时立即获取更新。可以使用--rev参数指定要从哪个版本开始监视。
- etcdctl del key:从etcd中删除特定键值对。可以使用--prefix参数删除键的所有匹配项。
- etcdctl snapshot save file_name:创建etcd数据的快照并保存到指定文件中。可以使用--cacert、--cert和--key参数指定TLS证书。
- etcdctl snapshot restore file_name:从快照文件中恢复etcd数据。可以使用--data-dir参数指定数据目录,并使用--initial-cluster参数指定集群中所有节点的名称和地址。
- etcdctl lease grant TTL:创建一个租约,并设置其到期时间。可以使用--keys参数指定与租约关联的键列表。
这些是Etcd的一些基础命令和常用参数,可以用于在Kubernetes集群中管理存储在Etcd中的数据。请注意,这些命令仅适用于Etcd v3版本。如果使用Etcd v2版本,则命令会有所不同。
2.调度器策略

当 Kubernetes 的 kube-scheduler 运行并决定将 Pod 调度到哪个节点时,它会执行一系列的评分步骤来确定最适合的节点。这些评分步骤可以分为五个主要的策略:优选、预选、容忍、亲和性和驱逐。
优选策略:优选策略是一种用于定义 Pod 应如何调度的可选要求的策略。这些可选要求可以是硬性的或软性的,kube-scheduler 将按照这些要求给节点打分,最终选择得分最高的节点。常见的优选策略包括:
CPU、内存、磁盘等资源限制
- 亲和性/反亲和性
- 节点拓扑域约束
- 容器运行时限制
网络拓扑域等
预选策略:预选策略是一种用于定义哪些节点可以继续参与评分的策略。例如,可以通过预选策略来排除不符合一些基本硬性要求的节点,例如:
节点处于不健康状态(NodeReady=Unknown)或维护模式(Unschedulable)
- 节点上缺少 Pod 亲和的节点标签或 NodeSelector
如果节点不符合这些要求,则将被排除在评分之外。
- 容忍策略:容忍策略是一种定义 Pod 是否可以在某些条件下在节点上调度的策略。例如,如果 Pod 的资源需求无法满足,可以在容忍一定的资源不足的情况下调度 Pod。
- 亲和性策略:亲和性策略是一种定义 Pod 如何与 Node 互动的策略。使用亲和性策略,可以将 Pod 与特定标签或节点选择器匹配的 Node 绑定在一起。例如,可以通过亲和性策略将 Pod 调度到已经运行其他关键服务的节点上。
- 驱逐策略:驱逐策略是一种定义哪些条件会触发节点上的 Pod 驱逐的策略。例如,如果节点故障或节点资源不足等。
使用这些策略,可以使 Kubernetes 集群更高效、灵活地调度 Pod。可以使用 Kubernetes API 和配置文件来配置这些策略,并通过 Kubernetes Dashboard 或 kubectl 命令行工具来管理和监视 kube-scheduler 的行为。
3.认证、鉴权
Kubernetes (K8s) 提供了多种认证和鉴权的方式,以确保安全性和保护集群资源。以下是 K8s 中支持的认证和鉴权方式的总结:
- 证书认证 K8s 使用 x509 证书来对客户端进行身份验证。在集群启动时,可以配置 kube-apiserver 使用自签名的 CA 证书来签发证书。然后,将证书分发给客户端,客户端使用这些证书来进行身份验证。
- 基于令牌的认证 K8s 也支持基于令牌的身份验证。管理员可以在 kube-apiserver 中定义一些静态的令牌,然后将这些令牌分发给客户端,客户端在进行 API 调用时使用这些令牌进行身份验证。
- HTTP 基本认证 K8s 还支持使用 HTTP 基本认证进行身份验证。通过在请求头中添加用户名和密码,可以实现 HTTP 基本认证。
- OpenID Connect (OIDC) 认证 K8s 还支持 OpenID Connect (OIDC) 认证。OIDC 是基于 OAuth2.0 协议的一种标准,它为身份验证提供了一种更加安全和可扩展的方式。在 K8s 中,可以使用 OIDC Provider 进行身份验证,并可以配置 K8s 使用这些 Provider 来验证客户端身份。
- Node 身份验证 在 K8s 中,节点也需要进行身份验证,以确保它们具有足够的权限来运行容器。K8s 使用节点证书来对节点进行身份验证。这些证书由 kubelet 生成,并将其用于与 kube-apiserver 进行通信。
- RBAC 鉴权 K8s 支持基于角色的访问控制(RBAC)。通过定义角色和角色绑定,管理员可以控制谁可以访问集群中的资源和操作。RBAC 是 K8s 中最常用的鉴权方式。
- ABAC 鉴权 K8s 还支持基于属性的访问控制(ABAC)。ABAC 允许管理员根据资源的属性来控制对资源的访问。但是,ABAC 不如 RBAC 安全,因为它不支持动态授权。
- Webhook 模式 K8s 还支持 webhook 模式。在 webhook 模式下,kube-apiserver 将请求发送到外部服务进行鉴权。如果外部服务返回允许访问,则 kube-apiserver 将请求转发给相应的组件。
总之,Kubernetes 提供了多种认证和鉴权的方式,管理员可以根据实际需求和安全要求选择合适的方式来保护集群资源的安全。
4.HPA

HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一种自动扩缩容机制,可以根据 CPU 使用率等指标来自动扩展 Pod 的数量,从而实现自动扩缩容,保持应用程序的稳定性和可用性。以下是 K8s 中 HPA 的总结:
- HPA 的原理 HPA 根据指标(如 CPU 使用率、内存使用率)来监视 Pod 的运行状况,并根据这些指标自动调整 Pod 的数量。当指标超过指定的阈值时,HPA 会增加 Pod 的数量,当指标低于指定的阈值时,HPA 会减少 Pod 的数量。HPA 的实现原理基于 Kubernetes 中的 Replication Controller,它自动控制 Pod 的数量,以保持指定的副本数量。
- HPA 的使用 使用 HPA,首先需要配置指标的采集方式和阈值。Kubernetes 支持多种指标采集方式,如 CPU 使用率、内存使用率、请求/秒等。管理员可以通过配置 Pod 的资源限制来指定 Pod 的 CPU 使用率和内存使用率的阈值。然后,可以使用 kubectl 命令行工具或 YAML 文件来创建 HPA。
- HPA 的自动缩放 当 HPA 监测到指标超过阈值时,它会增加 Pod 的数量,以处理更多的请求。如果指标低于阈值,HPA 会减少 Pod 的数量,以节省资源。在自动扩缩容过程中,HPA 可以快速响应变化,以保持应用程序的稳定性和可用性。
- HPA 的局限性 虽然 HPA 能够自动扩缩容,但它并不能完全解决所有的负载问题。例如,如果应用程序存在内存泄漏或其他性能问题,HPA 可能无法正确处理请求。此外,如果 HPA 的指标设置不合理,也会导致过度扩容或过度缩容的问题。因此,在使用 HPA 时需要谨慎考虑指标设置和使用场景。
HPA 的最佳实践 为了最大化 HPA 的效果,管理员需要做好以下几点:
配置正确的指标:合理选择指标,并设置合适的阈值。
- 调整时间间隔:适当调整 HPA 监控指标和调整 Pod 数量的时间间隔,以确保自动扩缩容的效果。
- 选择合适的 Pod 大小:确保 Pod 的资源限制和请求量相符,以避免过度扩容和过度缩容的问题。
- 监控和日志记录:及时监控和记录应用程序的性能和指标,以便进行优化和调整。
- 使用预测式自动扩缩容:除了使用基于指标的自动扩缩容,Kubernetes 还提供了预测式自动扩缩容,它使用预测模型来预测未来的负载,从而更准确地扩缩容 Pod。预测式自动扩缩容需要历史数据和机器学习算法的支持。
- 使用自定义指标:Kubernetes 还支持自定义指标的采集和自动扩缩容,管理员可以使用 Prometheus 等监控工具采集自定义指标,并使用 Custom Metrics API 来自动扩缩容。
- 与 Pod 的生命周期集成:为了确保自动扩缩容的效果,HPA 应该与 Pod 的生命周期管理进行集成,例如 Pod 的创建、重启和删除等操作,应该与 HPA 的调整 Pod 数量同步。
总之,HPA 是 Kubernetes 中一种强大的自动扩缩容机制,可以根据指定的指标自动调整 Pod 的数量,从而保持应用程序的稳定性和可用性。但是,在使用 HPA 时需要注意指标的设置和使用场景,同时需要按照最佳实践进行配置和管理。
5.外接存储
华为云技术文章
https://support.huaweicloud.com/basics-cce/kubernetes_0030.html

当应用程序在 Kubernetes 上运行时,数据存储是一个关键问题。Kubernetes 提供了多种方法来管理存储资源,其中 PV(Persistent Volume)、PVC(Persistent Volume Claim)、StorageClass 和 Provisioner 是最常见的存储管理机制。本文将对这些机制进行介绍和总结。
- PV(Persistent Volume) PV 是 Kubernetes 中的一个对象,它表示集群中的一个存储卷,可以是本地磁盘、网络存储、云存储等。PV 具有自己的生命周期,管理员需要手动创建和管理 PV,以及将 PV 分配给应用程序使用。PV 定义了存储资源的大小、访问模式、访问策略等信息。应用程序可以通过 PVC 来请求 PV,从而使用存储资源。
- PVC(Persistent Volume Claim) PVC 是 Kubernetes 中的一个对象,它表示应用程序对存储资源的需求。PVC 定义了应用程序对存储资源的大小、访问模式、访问策略等信息。管理员可以创建 PVC,并将其绑定到 PV 上,从而为应用程序提供存储资源。PVC 也具有自己的生命周期,当应用程序不再需要存储资源时,PVC 也可以被删除。
- StorageClass StorageClass 是 Kubernetes 中的一个对象,它用于定义动态存储卷的类型。当管理员创建 PVC 时,可以指定 StorageClass,Kubernetes 将会根据该 StorageClass 来动态地创建 PV。StorageClass 定义了存储卷的类型、访问模式、访问策略等信息。管理员可以创建多个不同类型的 StorageClass,以适应不同应用程序的需求。
- Provisioner Provisioner 是 Kubernetes 中的一个插件,用于动态地创建 PV。当管理员创建 PVC 并指定了 StorageClass 时,Kubernetes 会根据该 StorageClass 来选择合适的 Provisioner,并调用 Provisioner 来创建 PV。Provisioner 可以是一个本地插件,也可以是一个云存储插件。
总之,PV、PVC、StorageClass 和 Provisioner 是 Kubernetes 中常用的存储管理机制。它们提供了灵活的存储资源管理方式,可以适应不同应用程序的需求。管理员可以根据应用程序的要求,使用不同的存储管理机制来管理存储资源,以确保应用程序的稳定性和可用性。
6.集群网络

在 Kubernetes 集群中,网络是一个至关重要的组成部分,因为它连接了各个节点和容器,使它们能够相互通信。Kubernetes 支持多种网络模型,包括容器网络模型(CNI)、服务代理和网络插件等。本文将对这些网络模型进行介绍和总结。
- 容器网络模型(CNI) CNI 是 Kubernetes 中最常见的网络模型之一,它是一个独立的网络插件标准,可与 Kubernetes 以及其他容器编排平台一起使用。CNI 插件的作用是在容器启动时为其创建网络接口,并在容器销毁时删除该接口。CNI 插件可以实现不同的网络方案,如基于虚拟网桥、Open vSwitch、MACVLAN 等。
- 服务代理 服务代理是 Kubernetes 中的一种网络模型,它使用代理来实现服务发现和负载均衡。当应用程序创建服务时,Kubernetes 会自动创建一个代理来处理服务请求。代理会将请求转发到后端容器,并自动处理故障转移和负载均衡等问题。服务代理是 Kubernetes 中一个非常灵活和可扩展的网络模型,可以应对不同的应用程序需求。
- 网络插件 网络插件是 Kubernetes 中的另一种网络模型,它是一种定制的网络解决方案,可以根据具体应用程序的需求进行定制。网络插件通常包括一个或多个 CNI 插件,用于创建网络接口和实现网络方案。网络插件还可以实现不同的网络特性,如虚拟私有网络、网络隔离、流量控制等。
总之,网络是 Kubernetes 集群中非常重要的一部分,因为它连接了不同节点和容器,使它们能够相互通信。Kubernetes 支持多种网络模型,包括容器网络模型(CNI)、服务代理和网络插件等,这些网络模型提供了不同的网络方案和特性,可以根据具体应用程序的需求进行选择。管理员可以根据实际情况选择适合自己的网络模型,以确保 Kubernetes 集群的稳定性和可用性。
关于flannel
- Flannel 是一种开源的网络插件,用于为容器提供网络服务。它使用 VXLAN 或 UDP 封装技术来创建一个虚拟的网络层,该网络层可以将容器连接到同一个网络中。Flannel 还支持多种网络方案,例如 Layer 3 网络、VPC 网络、IPsec 网络等。
- Kubernetes 和 Flannel 的关系 在 Kubernetes 中,Flannel 是一种常用的网络插件,它可以为 Kubernetes 集群提供高性能的网络服务。当 Kubernetes 启动时,它会使用 Flannel 来创建一个虚拟网络层,该网络层可以将容器连接到同一个网络中。Flannel 还可以自动分配 IP 地址,并实现容器间的通信。
7.helm
Helm是一个开源的软件包管理器,用于快速、轻松地部署和管理Kubernetes应用程序。
它将Kubernetes应用程序打包成易于部署的单元,这些单元称为Helm Charts。
Helm Charts是一个预定义的Kubernetes对象集合,用于描述应用程序的部署、服务、依赖关系和其他信息。
Helm可以帮助您快速、准确地部署和管理Kubernetes应用程序,同时保证部署的一致性和可重复性。
使用Helm,您可以快速创建、升级和删除Kubernetes应用程序,而无需手动编写和管理Kubernetes YAML文件。
Helm还提供了一些有用的功能,例如依赖关系管理、版本控制、回滚和发布管理。
能看懂helm、chart、以及设置仓库、安装k8s应用即可。