K8S 概述

K8S整体架构

MasterDescription
apiserver如果需要与您的 Kubernetes 集群进行交互,就要通过 API。Kubernetes API 是 Kubernetes 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
kube-scheduler您的集群是否状况良好?如果需要新的容器,要将它们放在哪里?这些是 Kubernetes 调度程序所要关注的问题。
kube-controller-manager控制器负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。控制器会将服务连接至容器集,以便让请求前往正确的端点。还有一些控制器用于创建帐户和 API 访问令牌。
etcd配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。
coredns为Pod提供DNS服务,是一个内置的DNS服务器。通过 Kubernetes DNS,用户可以使用容器名称或 Service 名称等别名方式,轻松地访问到集群中运行的各种应用程序和服务。
WorkerDescription
kubelet每个计算节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。kublet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。与APIServer通信,执行创建、查找、更新、删除容器等操作。
kube-proxykube-proxy 是 Kubernetes 集群中的网络代理组件,它主要负责实现集群内 Service 的负载均衡和访问控制等功能。每个 Node 节点上都会部署一个 kube-proxy 组件来负责处理该节点上所有 Service 的流量转发和路由等操作。

K8S核心概念

Kubernetes 是一个基于容器化技术的分布式应用程序编排平台,其核心概念主要包括 Node、Pod、Service、Namespace、Deployment、StatefulSet、DaemonSet、Job 和 CronJob 等。

Node

每个Node节点上有以下关键进程:

  • kubelet:负责pod对应的容器的创建,启停等任务。同时与Master节点密切协助,实现集群管理的基本功能。
  • kube-proxy:实现Kubernetes service的通信与负载均衡机制的重要组件。

Pod

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 网络

Pod 网络是指 Kubernetes 中用于实现容器之间通信的网络环境。Pod 中的每个容器都有一个独立的 IP 地址,但它们共享相同的网络命名空间和端口空间,因此可以互相访问和通信。Kubernetes 支持多种网络插件和方案,如 Flannel、Calico、Cilium 等,用户可以根据实际情况进行选择和配置。

Label

是一组键值对,用于给Node,Pod,Service,Deployment等打标签。标签选择器能够通过标签来操作资源对象。

Service

Service 是 Kubernetes 中用于提供内部负载均衡和服务发现的组件,它可以将同一个应用程序的不同副本暴露在集群内部,并为这些副本提供唯一的虚拟 IP 地址和 DNS 域名。Service 可以通过控制器进行创建、更新和删除操作。

  • ClusterIP

ClusterIP 是 Service 的默认类型,它会分配一个集群内部的虚拟 IP 地址,并将该地址绑定到 Service 上。当其他 Pod 或容器需要访问 Service 时,只需要使用该虚拟 IP 地址即可。

  • NodePort

NodePort 是一种扩展 ClusterIP 的功能,它会在每个节点上分配一个唯一的端口号,并将该端口号映射到 Service 上。当其他节点或外部网络需要访问 Service 时,只需要使用该节点 IP 地址和映射的端口号即可。

  • LoadBalancer

LoadBalancer 是一种针对外部流量的负载均衡方案,它可以通过云服务商提供的负载均衡器或自定义的负载均衡器,将流量从外部网络转发到集群内部的 Service 上。能一定程度解决NodePort不具备LB的问题。但是Node上端口有限,不一定能为每个server分配不同的端口,为了解决这个问题,引入Ingress,其应用于HTTP/HTTPS。

  • ExternalName

可以将K8S外部的某个服务引入到K8S集群内部,让内部的Pod能够通过K8S Service来访问外部服务。或者让K8S中不同的namespace之间的不同pod可以通过name的形式访问。

Ingress

Ingress 是 k8s 官方提供的用于对外暴露服务的方式,也是在生产环境用的比较多的方式,一般情况是 LB + Ingress Controller 方式对外提供服务,这样就可以在一个 LB 的情况下根据域名路由到对应后端的 Service,类似于 Nginx 反向代理,只不过在 k8s 集群中,这个反向代理是集群外部流量的统一入口。Ingress 公开了从集群外部到集群内 services 的访问路由。基于层7的路由,HTTP或HTTPS。

可以使用Nginx或者HAProxy作为Ingress Controller,将其以Deployment的形式部署到K8S中的某个node上,再使用hostPort的方式暴露端口(注:不是nodePort),通过此node+hostPort来访问Ingress提供的服务。

Namespace

Namespace 是 Kubernetes 中用于隔离和管理资源对象的逻辑分区,它可以帮助用户将不同的资源对象归类、管理和隔离。Kubernetes 中默认存在一些 Namespace,如 default、kube-system 等,用户也可以根据需要创建自定义的 Namespace。

Controller

  • Deployment

Deployment 是 Kubernetes 中用于管理 Pod 副本集的控制器,它可以控制一组 Pod 的创建、扩缩容和更新等操作。Deployment 支持滚动更新和回滚等功能,可以实现无缝的应用程序版本升级。

  • StatefulSet/Operator

StatefulSet 是 Kubernetes 中用于管理有状态应用程序副本集的控制器,它可以为每个 Pod 分配唯一的标识符和稳定的网络名称,保证每个 Pod 的唯一性和可访问性。StatefulSet 还支持有序部署和扩缩容等功能,可以实现高可靠性的有状态应用程序部署和管理。Operator通过用代码的方式来创建有状态的Pod

  • DaemonSet

DaemonSet 是 Kubernetes 中用于在每个节点上运行一组 Pod 的控制器,它通常用于运行系统级别的服务或代理程序等,在每个节点上保证资源对象的一致性和状态。例如:kube-proxy。

  • ReplicaSet(RS)

我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set。

  • Replication Controller(RC)

不推荐使用,最早的一类副本控制器,只能操作一个label。推荐使用Deployment。

  • Job

Job 是 Kubernetes 中用于管理一次性任务的控制器,它会创建一个或多个 Pod 来执行某个任务,并在任务完成后自动删除这些 Pod。Job 还支持任务成功和失败的检测和处理等功能。例如:DB upgrade。

  • CronJob

CronJob 是 Kubernetes 中用于周期性执行任务的控制器,它可以根据用户定义的时间表,自动创建和删除相应的 Job 对象,终止的Job不被回收会浪费资源,可以使用cron job来管理job并清理job。CronJob 还支持任务成功和失败的检测和处理等功能。

ConfigMap/Secret

  • ConfigMap 用于向Pod传递配置信息,并支持动态修改。
  • Secret 用于向Pod传递敏感数据,如用户名/密码,Token,Key等。

HPA(Horizontal Pod Autoscaler)

能够根据Pod的资源使用情况(CPU,Memory,etc.)自动扩容Pod的数量。

Volume

  • emtpyDir 临时文件,但pod删除时清空数据,可以设置使用内存或磁盘。
  • localHost 挂载到当前Node中的某个目录。
  • Public Cloud, EBS, etc 挂载到公有云某个路径。
  • iscsi 挂载iSCSI存储设备的某个目录到pod。
  • nfs 将NFS存储设备上的某个目录挂载到Pod。
  • etc.

Dynamic Storage

  • PV Persistent Volume,PV不是在Pod中定义,而是通过Storage Class和PVC来创建。
  • PVC Persistent Volume Claim,表示如何使用Storage Class中定义的存储,可读可写?容量等。
  • Storage Class 定义存储类型,如AWS-EBS,NFS,iSCSI等。

Security

  • Service Account Pod中API的调用授权。
  • Role 角色管理。
  • NetworkPolicy Pod与Pod之间网络通信的权限设置等。

K8S安装

参考以下代码来安装K8S:https://github.com/wangxiaohui2015/K8S-Related/tree/main/Install

安装完成后,可以看到下面的各个组件,


一文让你全面了解K8s(Kubernetes) - 知乎

kubernetes入门看这篇就够了 - 知乎

Kubernetes(k8s)入门教程 - 简书

K8s 初学者入门教程_k8s入门教程详解-CSDN博客

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值