Kubernetes,简称 k8s
,是近年来在云计算领域备受瞩目的一个开源项目。
Kubernetes的由来
Kubernetes的名字来源于希腊语,意为“舵手”或“领航员”。在软件领域,Kubernetes被寄予厚望,它旨在成为容器编排领域的“舵手”,为容器化应用提供统一的部署、管理和调度服务。
Kubernetes的命名灵感来源于其设计理念和功能特点。它采用微服务架构,将应用程序拆分成多个独立的容器,并通过自动化的方式进行部署、扩展和管理。这种设计使得Kubernetes能够像一位经验丰富的舵手一样,引领着容器化应用在云端航行,确保它们能够安全、高效地运行。
为什么简称叫 k8s
为什么简称叫 k8s
,因为名字太长了,简写而已,即开头和末尾的字母保留,然后中间的字母个数组合而成。
k
uber nete //8个字符
s
k8s 成了
类似的字母还有 i18n
(internationalization,国际化)、L10N
(localization,本地化)。
相关单词术语缩写
- Ingress:网关
- svc(Service): 服务
- Metrics:指标
安装
相关链接
- 官网:Kubernetes
- 官网中文版:Kubernetes 中文
- 官方文档:Kubernetes Documentation | Kubernetes
- 官方博客:Kubernetes Blog | Kubernetes
- 下载:下载 Kubernetes | Kubernetes
- 一文让你全面了解K8s(Kubernetes) - 知乎
- 从 Nginx Ingress 窥探云原生网关选型 - 知乎
- 从 Nginx Ingress 窥探云原生网关选型-阿里云开发者社区
- 【Kubernetes】k8s的svc所有概念和实操详细说明(含镜像和代码)【1】【svc作用是端口转发相关】_k8s svc-CSDN博客
- K8S系列一:概念入门 - 知乎,这篇文章对概念讲的很好,很形象
- How Do Applications Run on Kubernetes? - The New Stack
- 为容器和 Pod 分配内存资源 | Kubernetes
- k8s外网如何访问业务应用 - 简书
- Kubernetes 深入学习(一) —— 入门和集群安装部署 - bojiangzhou - 博客园
- minikube start| Minikube --- minikube start | minikube
- CNCF Landscape
下载 Kubernetes
Kubernetes 为每个组件提供二进制文件以及一组标准的客户端应用来引导集群或与集群交互。 像 API 服务器这样的组件能够在集群内的容器镜像中运行。 这些组件作为官方发布过程的一部分,也以容器镜像的形式提供。 所有二进制文件和容器镜像都可用于多种操作系统和硬件架构。
容器镜像 | 镜像说明 | 支持架构 |
---|---|---|
registry.k8s.io/kube-apiserver:v1.29.2 | API Server | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/kube-controller-manager:v1.29.2 | Controller manager | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/kube-proxy:v1.29.2 | proxy | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/kube-scheduler:v1.29.2 | scheduler | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/conformance:v1.29.2 | conformance | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/coredns/coredns:v1.10.1 | coredns | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/etcd:3.5.7-0 | etcd | amd64, arm, arm64, ppc64le, s390x |
registry.k8s.io/pause:3.9 | pause | amd64, arm, arm64, ppc64le, s390x |
摘要:一文让你全面了解K8s(Kubernetes)
Kubernetes 中一个集群通常由多个节点(Node)组成,其中 Master 节点作为整个集群的控制中心,主要负责集群的管理和调度工作。
Master 节点的功能
主要是一些管理服务
- API Server
- Etcd
- Controller Manager
- Scheduler
API Server 是 Kubernetes 最核心的组件之一,它提供了 Kubernetes 集群中各个组件之间的通信和管理接口,所有操作都需要通过 API Server 发起和处理。当用户使用 kubectl 命令或者其他 Kubernetes 客户端工具时,实际上是通过 API Server 和集群进行交互的。
Etcd 是 Kubernetes 集群中的分布式键值存储系统,用于保存集群中的所有状态信息和元数据。所有与 Kubernetes 集群相关的信息,包括 Pod、Service、Deployment 等对象的创建、更新和删除等操作,都将被记录在 Etcd 中。这样可以使得 Kubernetes 系统具有高可用性和复原能力,并且允许多个 Master 节点之间进行数据同步和共享。
Controller Manager 是 Kubernetes 集群中的另一个核心组件,它负责监控和维护集群中所有资源对象的状态,以及进行自动化控制和管理操作。Controller Manager 中包含多个控制器,每个控制器负责监控和维护一种资源对象的状态,如 Deployment、ReplicaSet、DaemonSet 等,同时根据用户的需求,自动进行相应的容器调度、扩容、缩容等操作。
Scheduler 是 Kubernetes 集群中的另一个重要组件,主要负责根据集群中各个节点的负载情况,以及用户的调度策略,将新创建的 Pod 分配到合适的节点上。Scheduler 会根据 Pod 的资源需求、节点的资源情况、节点之间的网络距离等因素进行智能调度,从而实现负载均衡和资源最大化利用的目标。
Node 节点的功能
Node 节点,它们是容器化应用程序真正运行的地方。
- kubelet
- kube-proxy
- container-runtime 容器运行时
kubelet 是运行在每个 Node 节点上的代理程序,它负责与 Master 节点上的 API Server 进行通信,并根据 Master 节点下发的指令,调度和管理本地节点上的容器。kubelet 可以监控本地节点上的容器状态,如启动、停止、健康状况等,并定期向 Master 节点报告节点状态信息。
kube-proxy 是 Kubernetes 集群中的网络代理组件,它主要负责实现集群内 Service 的负载均衡和访问控制等功能。每个 Node 节点上都会部署一个 kube-proxy 组件来负责处理该节点上所有 Service 的流量转发和路由等操作。
容器运行时是 Kubernetes 中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。Kubernetes 支持多种容器运行时,如 Docker、CRI-O、containerd 等,用户可以根据实际需求选择合适的容器运行时。容器运行时通常与 kubelet 紧密集成,在 Kubernetes 集群中发挥着至关重要的作用。
组件与插件
- Kubernetes DNS
- Dashboard
- Heapster
- Ingress Controller
Kubernetes DNS 是 Kubernetes 集群中的域名解析系统,它为集群中所有容器提供了简单而可靠的 DNS 服务。通过 Kubernetes DNS,用户可以使用容器名称或 Service 名称等别名方式,轻松地访问到集群中运行的各种应用程序和服务。
Dashboard 是 Kubernetes 集群中的 Web 界面管理工具,它提供了一个易于使用和定制化的界面,让用户可以在不熟悉命令行操作的情况下,轻松地监控和管理集群中的资源对象和应用程序。Dashboard 支持多种自定义插件和主题,用户可以根据自己的需要进行定制和扩展。
Heapster 是 Kubernetes 集群中的监控工具,它可以收集和分析各种容器和节点的性能指标,并将结果汇总和展示给用户。Heapster 支持多种存储后端,如 InfluxDB、ElasticSearch 等,用户可以选择适合自己的存储方式。
Ingress Controller 是 Kubernetes 集群中的负载均衡和流量路由组件,它可以将外部请求路由到集群内的不同 Service 或 Pod 上,并提供了多种负载均衡算法和路由规则。Ingress Controller 支持多种后端实现,如 Nginx、HAProxy 等,用户可以根据自己的需求进行选择和配置。 以上是 Kubernetes 中一些常用的组件和插件介绍,它们可以帮助用户更加高效地管理和操作 Kubernetes 集群中的容器应用程序。Kubernetes 的丰富生态系统和庞大社区,为用户提供了各种完善的支持和解决方案,让用户可以更加轻松地使用和掌握 Kubernetes。
K8S 核心概念
- Pod
- Container
- Lifecycle
- Network
- Service(svc)
- ClusterIP
- NodePort
- LoadBalancer
- Namespace
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
Pod 是 Kubernetes 中最小的调度和管理单元,它代表着集群中运行的一个或多个容器实例。在一个 Pod 中,所有容器共享相同的网络命名空间、进程命名空间和存储卷,因此它们可以互相通信和共享数据。Pod 可以通过控制器进行创建、扩缩容和更新等操作。
Pod 中的容器是指实际运行业务逻辑的进程,可以使用 Docker、CRI-O、containerd 等各种容器运行时来运行。每个 Pod 中可以包含一个或多个容器,这些容器可以通过共享网络和存储资源,实现相互通信和协作。
Pod 的生命周期包括 Pending
、Running
、Succeeded
、Failed
和 Unknown
等几个阶段。在创建一个 Pod
后,它会首先进入 Pending
阶段,等待被调度到某个节点上。如果调度成功,Pod 就会进入 Running
阶段,开始正常运行。如果 Pod 运行失败或者所有容器都退出了,Pod 就会进入 Failed
或 Succeeded
阶段。如果调度和运行过程中出现了异常,Pod 就会进入 Unknown
阶段。
Pod 网络是指 Kubernetes 中用于实现容器之间通信的网络环境。Pod 中的每个容器都有一个独立的 IP 地址,但它们共享相同的网络命名空间和端口空间,因此可以互相访问和通信。Kubernetes 支持多种网络插件和方案,如 Flannel、Calico、Cilium 等,用户可以根据实际情况进行选择和配置。
Service 是 Kubernetes 中用于提供内部负载均衡和服务发现的组件,它可以将同一个应用程序的不同副本暴露在集群内部,并为这些副本提供唯一的虚拟 IP 地址和 DNS 域名。Service 可以通过控制器进行创建、更新和删除操作。现在有的简写为 svc,
ClusterIP 是 Service 的默认类型,它会分配一个集群内部的虚拟 IP 地址,并将该地址绑定到 Service 上。当其他 Pod 或容器需要访问 Service 时,只需要使用该虚拟 IP 地址即可。
NodePort 是一种扩展 ClusterIP 的功能,它会在每个节点上分配一个唯一的端口号,并将该端口号映射到 Service 上。当其他节点或外部网络需要访问 Service 时,只需要使用该节点 IP 地址和映射的端口号即可。
LoadBalancer 是一种针对外部流量的负载均衡方案,它可以通过云服务商提供的负载均衡器或自定义的负载均衡器,将流量从外部网络转发到集群内部的 Service 上。
Namespace 是 Kubernetes 中用于隔离和管理资源对象的逻辑分区,它可以帮助用户将不同的资源对象归类、管理和隔离。Kubernetes 中默认存在一些 Namespace,如 default、kube-system 等,用户也可以根据需要创建自定义的 Namespace。
Deployment 是 Kubernetes 中用于管理 Pod 副本集的控制器,它可以控制一组 Pod 的创建、扩缩容和更新等操作。Deployment 支持滚动更新和回滚等功能,可以实现无缝的应用程序版本升级。
StatefulSet 是 Kubernetes 中用于管理有状态应用程序副本集的控制器,它可以为每个 Pod 分配唯一的标识符和稳定的网络名称,保证每个 Pod 的唯一性和可访问性。StatefulSet 还支持有序部署和扩缩容等功能,可以实现高可靠性的有状态应用程序部署和管理。
DaemonSet 是 Kubernetes 中用于在每个节点上运行一组 Pod 的控制器,它通常用于运行系统级别的服务或代理程序等,在每个节点上保证资源对象的一致性和状态。
Job 是 Kubernetes 中用于管理一次性任务的控制器,它会创建一个或多个 Pod 来执行某个任务,并在任务完成后自动删除这些 Pod。Job 还支持任务成功和失败的检测和处理等功能。
CronJob 是 Kubernetes 中用于周期性执行任务的控制器,它可以根据用户定义的时间表,自动创建和删除相应的 Job 对象。CronJob 还支持任务成功和失败的检测和处理等功能。
k8s 网络
- 容器网络接口(Container Network Interface,CNI)
- Flannel
- Calico
- 服务发现
- DNS
- 负载均衡
- Ingress Controller(入口控制器,网关)
- Nginx Ingress
- Traefik
容器网络接口(CNI)是 Kubernetes 中用于管理容器网络的标准接口,它定义了容器和节点之间的通信方式和规则。在 Kubernetes 中,CNI 插件可以以独立的形式部署,并通过插件机制为容器提供网络连接。
Flannel 是一个开源的 CNI 插件,它使用虚拟网络技术将其配置为每个节点上的一个网络层,使得 Kubernetes 集群中的所有 Pod 能够直接通信。Flannel 支持多种后端数据存储方式,如 etcd、Consul、ZooKeeper 等,并且能够自动检测和修复网络故障。
Calico 是一个开源的 CNI 插件,它使用业界领先的 BGP 协议作为底层网络传输协议,支持高性能和高可用性的容器网络。Calico 采用分布式架构,每个节点都运行一个 agent 进程,负责管理和维护该节点的容器网络。此外,Calico 还支持网络安全和策略控制等功能。
服务发现是 Kubernetes 中重要的一个功能,它能够自动发现和管理集群中的服务,并为应用程序提供可靠的地址和端口映射。Kubernetes 中服务发现主要有两种方式,即 DNS 和 Service 负载均衡。
Kubernetes 中的 DNS 服务是一个集群内 DNS 解析服务,它可以自动为所有需要解析的服务添加一个 DNS 名称,例如 my-svc.default.svc.cluster.local。在应用程序中,可以通过访问该 DNS 名称来实现服务发现,而无需关心实际的 IP 地址和端口信息。
Service 负载均衡是 Kubernetes 中另一种常用的服务发现方式,它可以为集群内的服务提供负载均衡和流量路由功能。通过定义一个 Service 对象,可以将多个 Pod 组合成一个逻辑上的服务,并指定负载均衡算法和想要暴露的端口号。在应用程序中,可以通过访问该 Service 对象来实现对应用程序的访问。
Ingress Controller 是 Kubernetes 中用于管理集群内服务的入口流量的控制器,它基于 HTTP/HTTPS 协议实现,可以实现流量路由、负载均衡、SSL/TLS 加密等功能。
Nginx Ingress 是 Kubernetes 中最常用的 Ingress Controller 之一,它可以通过配置路由规则的方式,将请求路由到不同的 Service 上进行处理。Nginx Ingress 还支持多种负载均衡算法和 SSL/TLS 加密功能,可以为应用程序提供可靠、高效和安全的服务访问。
Traefik 是另一种常用的 Ingress Controller,它基于轻量级代理服务器实现,可以自动发现集群中的服务,并通过标准化的路由规则将请求路由到不同的 Service 上进行处理。Traefik 支持多种负载均衡算法和 SSL/TLS 加密功能,可以为应用程序提供快速、可靠和安全的服务访问。
K8S 存储
- 常见存储卷类型
- EmptyDir
- HostPath
- ConfigMap/Secret
- NFS
- 其他存储卷类型
- PersistentVolume/PersistentVolumeClaim
- StorageClass
- 持久化存储卷类型
- GlusterFS
- Ceph
存储卷是 Kubernetes 中用于为容器提供数据持久化的一种机制,它可以将容器中的数据存储到一个卷(Volume)中,并在容器启动和停止时保持数据不丢失。Kubernetes 中提供了多种类型的存储卷,下面介绍几种常见的类型。
EmptyDir 是 Kubernetes 中最简单的存储卷类型之一,它是一个空的目录卷,可以被多个 Pod 共享。当 Pod 离开节点时,EmptyDir 卷中的数据将被删除。
HostPath 存储卷类型将主机上的文件或目录挂载到 Pod 内部,使得 Pod 可以访问主机上的文件系统。HostPath 存储卷类型也称为宿主机路径存储卷,它可以用于在容器中共享主机上的某些资源。
ConfigMap 和 Secret 存储卷类型用于从集群外部注入配置信息或机密信息到容器内部。它们都可以在 Pod 创建或者更新时注入指定的键值对或者文本文件,并将这些信息作为文件或者环境变量暴露给应用程序使用。
NFS 存储卷类型将多个节点上的文件系统挂载到 Pod 中,使得 Pod 可以跨节点共享数据。NFS 存储卷通常用于需要在多个节点之间共享数据的应用程序中。
Kubernetes 中还提供了 PersistentVolume/PersistentVolumeClaim 和 StorageClass 两种存储卷类型,它们可以有效管理和分配存储资源。
PersistentVolume(PV)和 PersistentVolumeClaim(PVC)是 Kubernetes 中用于抽象底层存储资源的一种机制。PV 表示一个实际的存储资源,PVC 表示对该存储资源的使用请求。通过 PVC 请求一个 PV,可以动态地将该 PV 绑定到请求该存储资源的 Pod 上。
StorageClass 是动态存储卷分配的一种机制,它定义了一组匹配的 PV,用于满足 PVC 的请求,根据不同的需求,可以为不同的应用程序配置不同的 StorageClass。
持久化存储卷是 Kubernetes 中用于持续保存数据的存储卷类型,它可以将容器中的数据永久存储到一个外部的存储系统中,而不会因为容器重启或者更新而丢失数据。
GlusterFS 是一个分布式文件系统,它可以将多个服务器上的磁盘空间汇总成一个统一的存储池。在 Kubernetes 中,可以使用 GlusterFS 存储卷类型将容器中的数据保存到 GlusterFS 文件系统中,实现数据持久化。
Ceph 是一个分布式存储系统,它可以将多个服务器上的磁盘空间汇总成一个统一的存储池。在 Kubernetes 中,可以使用 Ceph 存储卷类型将容器中的数据保存到 Ceph 存储池中,实现数据持久化。Ceph 还支持多种数据备份和故障恢复机制,可以保证数据的高可靠性和可用性。
K8S 监控和日志
- Node 监控
- Pod 监控
- Kubernetes 自带日志收集器
- 第三方日志收集器。
Node 监控指标主要包括以下几个方面:
- CPU 使用率
- 内存使用率
- 网络 IO
- 磁盘 IO
- 负载均衡器负载
这些监控指标可以通过 Kubernetes API Server 提供的 kubelet API 获取。在 Kubernetes 中,kubelet 是负责管理节点的核心组件,它会定期采集节点的监控指标,并将采集到的数据暴露给 API Server。
可以使用 Prometheus 等工具来对采集到的监控指标进行展示和分析,以便及时发现异常情况并采取相应措施。
Pod 监控指标主要包括以下几个方面:
- CPU 使用率
- 内存使用率
- 网络 IO
- 磁盘 IO
这些监控指标可以通过 Kubernetes API Server 提供的 Metrics API 获取。Metrics API 是 Kubernetes 自带的一种监控指标暴露机制,它可以让用户通过 API Server 直接获取到节点和 Pod 的监控指标信息。
可以使用 Heapster、Prometheus 等工具来对采集到的监控指标进行展示和分析,以便及时发现异常情况并采取相应措施。
Kubernetes 自带了一个日志收集器:kubelet。kubelet 会负责收集容器的标准输出(stdout)和标准错误输出(stderr),并将其重定向到文件中。这些文件可以通过以下方式查看:
使用 kubectl logs 命令查看 Pod 中容器的日志;
在节点上查看容器的日志文件。默认情况下,这些文件位于 /var/log/pods 目录中,文件名的格式为 namespace_podname_containername_xxxxxx.log。
该日志收集方式的优点是简单易用,无需安装额外的组件。缺点是不够灵活,只能收集容器的标准输出和标准错误输出,无法收集其他类型的日志。
第三方日志收集器可以帮助我们更加灵活地收集和管理容器中的日志。常见的第三方日志收集器包括:
- Fluentd:是一个轻量级的日志收集和转发工具,可以将多个容器的日志聚合到一起,并将其发送到指定的存储后端(如 Elasticsearch 或者 Amazon S3)。
- Logstash:是一个开源的数据收集引擎,支持多种数据源和输出方式,可以与 Elasticsearch、Kibana 等工具一起使用来构建强大的日志管理系统。
- Sysdig:是一个安全监控和故障排除工具,支持实时容器日志收集和查询,可以帮助我们更快地定位容器中的问题。
这些工具各有优缺点,可以根据实际需求进行选型。需要注意的是,在使用第三方日志收集器时,需要对容器进行相应的配置,以便将日志发送给指定的收集器。
K8S 安全
- 认证和授权
- RBAC
- TLS
- 网络安全
- 网络隔离
- 网络加密
- 容器安全
- 容器镜像安全
- 容器内部安全
- 容器运行时安全
- 访问控制
Kubernetes 中的 Role-Based Access Control(RBAC)可以帮助我们对用户和服务账户进行更加灵活的访问控制。通过 RBAC,我们可以按照用户的角色和权限,限制其对 Kubernetes API 中的资源的访问和操作。
RBAC 的核心是角色(Role)和角色绑定(RoleBinding)。角色定义了一组访问规则,用于限制用户对 Kubernetes 资源的访问和操作;角色绑定定义了用户和角色之间的对应关系。
通过使用 RBAC,我们可以实现如下目标:
- 将用户分为不同的角色,按照不同的权限进行访问控制;
- 在不同的命名空间中设置不同的访问规则,进一步增强安全性。
Transport Layer Security(TLS)是一种常见的加密协议,用于保护网络通信的机密性、完整性和身份认证。
在 Kubernetes 中,我们可以通过以下方式使用 TLS:
- 通过自签名证书对 Kubernetes API Server 进行加密,并要求客户端使用 HTTPS 方式进行访问。
- 对 Kubernetes 的 etcd 存储进行加密,以保护敏感的集群信息。
- 在 Pod 中使用 TLS 证书对容器之间的通信进行加密。
使用 TLS 可以有效提高集群的安全性,防止敏感信息被窃取和篡改。
在 Kubernetes 中,我们可以通过以下方式实现网络隔离:
- 使用命名空间进行逻辑上的隔离。在同一命名空间中的 Pod 可以相互通信,而跨越不同命名空间的 Pod 则需要使用 Service 进行连接。
- 使用 NetworkPolicy 对 Pod 和命名空间之间的流量进行精细控制。NetworkPolicy 可以限制来自特定 IP 或标签的流量的进出规则,从而实现更加灵活的网络访问控制。
在 Kubernetes 中,我们可以使用以下方式对网络通信进行加密:
- 使用 HTTPS 协议对 Kubernetes API 进行加密,保护 API 的机密性和完整性。
- 使用 Transport Layer Security(TLS)协议对容器之间的通信进行加密,防止敏感信息被窃取或篡改。
- 使用网络加密可以提高集群的安全性,防止通信过程中的数据泄露和恶意攻击。
在使用容器镜像时,我们需要注意以下几点:
- 验证镜像来源,并仅使用可信的镜像仓库;
- 定期更新镜像,以获取最新的安全修复和功能更新;
- 使用 Dockerfile 中的指令进行镜像构建,并禁止使用 root 用户;
- 调用 API Server 时,不要在容器启动时直接传递敏感信息,应该使用 Kubernetes 的 Secret 对象来存储和传递加密后的敏感信息。
在容器内部,我们可以通过以下方式增强容器的安全性:
- 使用非特权用户运行容器,避免容器内部拥有 root 权限;
- 禁用容器内部的 shell,防止攻击者利用命令执行漏洞;
- 配置合适的资源限制,限制容器的 CPU、内存等资源使用。这可以防止恶意容器耗尽主机上的资源并导致集群宕机。
容器运行时是指负责管理容器生命周期、调度和资源隔离的组件。在 Kubernetes 中,常见的容器运行时包括 Docker、CRI-O 和 containerd。
为了增强容器运行时的安全性,我们可以采取以下措施:
- 使用最新版本的容器运行时和容器引擎,以获取最新的安全修复和功能更新;
- 启用容器运行时的安全特性,如 SELinux 和 AppArmor;
- 对容器的资源使用进行限制,并限制网络访问和文件系统访问;
- 使用合适的日志记录和监控工具,定期审查日志并及时发现异常情况。
在 Kubernetes 中,我们可以通过 RBAC 等机制对用户和服务账户进行访问控制。此外,还可以通过以下方式进一步增强访问控制的能力:
- 使用多重身份验证机制,如用户名密码、SSH 密钥等,以确保用户的身份可信;
- 禁用不必要的 API 访问权限,如禁用匿名访问等;
- 使用基于角色的访问控制,限制用户对 Kubernetes 资源的访问和操作;
- 定期审查访问日志,并及时发现和阻止异常访问行为。
K8S 生态
Metrics
中文翻译为:指标
- Helm
- Istio
- Prometheus
- Kubernetes API Server Metrics
- Kubernetes Node Metrics
- Kubernetes Application Metrics
- Grafana
Helm 是一个 Kubernetes 应用程序包管理器,允许您轻松安装、升级和管理 Kubernetes 应用程序。Helm 使用称为 charts 的包来描述 Kubernetes 资源。Chart 定义了一组相关的 Kubernetes 资源,以及一些参数,允许您自定义这些资源的行为。通过使用 Helm,您可以简化 Kubernetes 应用程序的部署和维护,使得管理和扩展 Kubernetes 应用程序更加容易。
Istio 是一个开源的服务网格平台,允许您连接、保护、控制和观察 Kubernetes 中的服务。Istio 提供了一些功能来增强 Kubernetes 网络的可靠性、安全性和可观测性,包括流量管理、安全、监控和跟踪等方面。它使用 sidecar 容器的方式将其与应用程序部署在一起,从而提供了对网络、安全和其他服务的通用控制。
Prometheus 是一个开源的监控系统,广泛用于 Kubernetes 中的应用程序和基础设施监控。Prometheus 可以收集、存储和查询各种类型的时间序列数据,并提供灵活的查询语言(PromQL)来分析和聚合这些数据。它还提供了图形化仪表板和告警系统,方便您了解应用程序和基础设施的运行状况。
Kubernetes API Server Metrics 描述了 Kubernetes API Server 的健康状况和性能指标,包括 API Server 的响应时间、请求成功率、并发连接数等。这些指标可以帮助您了解集群 API Server 的负载和稳定性,并帮助您检测和处理问题。
Kubernetes Node Metrics 描述了 Kubernetes Node 上的资源使用情况,包括 CPU、内存、磁盘和网络等。这些指标可以帮助您了解节点的资源利用率和容量规划,并帮助您检测和解决问题,如节点故障、资源耗尽等。
Kubernetes Application Metrics 描述了 Kubernetes 中应用程序的健康状况和性能指标,包括应用程序的请求延迟、响应时间、错误率等。这些指标可以帮助您了解应用程序的运行状况,并帮助您检测和处理问题,如应用程序错误、性能下降等。
Grafana 是一个开源的数据可视化平台,与 Prometheus 集成广泛使用于 Kubernetes 环境中。通过 Grafana,您可以创建各种类型的仪表板,并动态地可视化 Prometheus 中的数据。Grafana 还提供了丰富的图表和面板,方便您对 Kubernetes 应用程序和基础设施进行监控和分析。您可以使用 Grafana 对 Kubernetes 中的各种指标进行可视化展示,例如 Kubernetes API Server Metrics、Kubernetes Node Metrics、应用程序 Metrics 等。
K8S 最佳实践和资源
在使用 Kubernetes 进行应用程序部署和管理时,以下是一些最佳实践和经验:
- 将 Pod 的数量限制为一个或少数个:这可以帮助您更好地控制和管理 Pod,以及提高应用程序的可靠性和稳定性。
- 使用 Kubernetes 的 Service 对象进行负载均衡:Service 可以将请求分发给多个 Pod,并提供与应用程序对话的单个 IP 和端口。
- 使用 Kubernetes 的 ConfigMap 和 Secret 对象来提供配置数据和敏感信息:这样可以避免在镜像中硬编码这些数据,从而使应用程序更容易可配置和安全。
- 使用 Kubernetes 的 Deployment 对象来管理 Pod 的副本数:Deployment 可以自动扩展或缩小 Pod 的数量,以适应应用程序的负载变化。
- 使用 Kubernetes 的 StatefulSet 对象来管理具有状态的应用程序:StatefulSet 可以为每个 Pod 提供唯一的持久化存储,从而支持应用程序的数据持久化和副本控制。
- 使用 Kubernetes 的 DaemonSet 对象来在所有节点上运行 Pod:DaemonSet 可以确保 Pod 在整个集群中被部署,并在节点加入或退出时自动调整其数量。
Kubernetes 拥有庞大的社区和支持,其中包括:
- Kubernetes 官方网站(https://kubernetes.io/):提供关于 Kubernetes 的文档、教程、最佳实践和资源等。
- Kubernetes GitHub 仓库(https://github.com/kubernetes/kubernetes):托管 Kubernetes 代码和各种组件,以及社区贡献的重要资料。
- Kubernetes Slack(https://slack.k8s.io/):Kubernetes 社区的官方交流平台。
- Kubernetes SIG(Special Interest Group):包括多个子项目,涵盖 Kubernetes 中的各个领域,包括存储、网络、安全、用户体验等。SIG 提供了专门的贡献者指南、会议和邮件列表等。
- Kubernetes Meetup:全球范围内的 Kubernetes 社区 Meetup 活动,旨在促进 Kubernetes 用户和开发人员之间的交流和学习。
以下是一些可用于 Kubernetes 环境中的开源项目:
- Helm(https://helm.sh/):一个 Kubernetes 应用程序包管理器,可以用于轻松安装、升级和管理 Kubernetes 应用程序。
- Istio(https://istio.io/):一个开源的服务网格平台,可以用于连接、保护、控制和监控 Kubernetes 中的服务。
- Prometheus(https://prometheus.io/):一个开源的监控系统,广泛用于 Kubernetes 中的应用程序和基础设施监控。
- Grafana(https://grafana.com/):一个开源的数据可视化平台,与 Prometheus 集成广泛使用于 Kubernetes 环境中,可以用于创建各种类型的仪表板,并动态地可视化 Prometheus 中的数据。
- Fluentd(https://www.fluentd.org/):一个开源的日志收集器,可以用于收集和传输 Kubernetes 应用程序和基础设施的日志数据。
- Linkerd(https://linkerd.io/):一个开源的服务网格平台,可以用于提供 Kubernetes 中微服务之间的通信和控制。
摘要:【Kubernetes】k8s的svc所有概念和实操详细说明
Service能够提供负载均衡的能力,但是在使用上有以下限制:只提供 4 层负载均衡能力,而没有 7 层功能,但有时我们可能需要更多的匹配规则来转发请求,这点上 4 层负载均衡是不支持的
发表评论