第一章 Kubernetes基础

Kubernetes是什么?

  • Kubernetes的名字来自于希腊语,意思是舵手或领航员。
  • Kubernetes简称k8s,是将k和s之间的8个字母,用数字8来缩写。
  • k8s的创造者是众所周知的行业巨头——谷歌
  • k8s不是一件全新的发明,他是谷歌10多年的大规模容器管理即使Borg的开源版本
  • 2014年6月,k8s由谷歌正式公布出来并宣布开源
  • Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。

k8s的架构

k8s架构图

核心角色

  • master节点(管理节点)
    • 提供集群的控制
    • 对集群进行全局决策
    • 检测和响应集群事件
    • 主要由:kube-apiserver、kuberproxy、schedular、controllermanage和etcd
  • node节点(计算节点)
    • 运行容器的实际节点
    • 维护运行pod,并提供具体应用的运行环境
    • node节点由:kubelet、kube-proxy和容器引擎(如docker)组成
    • 计算节点被设计成水平扩展,该组件在多个节点上运行
  • 核心附件
  • image(镜像仓库)
master节点:是整个集群的控制中枢
  • Kube-APIServer:集群的控制中枢,各个模块之间信息交互都需要经过Kube-APIServer,同时它也是集群管理、资源配置、整个集群安全机制的入口。后端元数据存储于ETCD中(键值对数据库)。
  • Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。相当于“大总管”。
  • Scheduler:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。相当于“调度室”
  • Etcd:键值数据库,存储k8s运行中产生的元数据,一般生产环境中建议部署三个以上节点(奇数个)。
    master节点
端口服务

master节点各组件端口

node节点:工作节点
  • Kubelet:负责监听节点上Pod的状态,同时负责上报节点和节点上面Pod的状态,负责与Master节点通信,并管理节点上面的Pod。
  • Kube-proxy:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。实现service的通信与负载均衡。
  • 容器引擎:负责对容器管理,例如docker。containerd、CRI-O、runC等
    node节点
核心附件
  • Calico:符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。
  • CoreDNS:用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。
  • Dashboard:基于web的用户接口,用于可视化k8s集群
  • 容器监控系统:例如Prometheus、Heapster等。
  • 集群日志系统:帮助管理员发现和定位问题,常用的是EFK
  • Ingress Controller:为服务提供外网入口。

k8s架构总

Kubernetes的基本概念

Pod

  • 是kubernetes调度的最小部署单位
  • pod是一个容器的集合,一个pod可以包含一个或多个容器
  • 同个Pod中的容器使用相同的网络命名空间和IP地址, 端口号
  • 同个pod下的容器相互之间通过localhost来发现和通信
  • 每个组内的容器共享一个存储卷(volume)
  • pod是一个服务的多个进程的聚合单位
  • pod作为一个独立的部署单位,支持横向扩展和复制
  • Pod是短暂的

Controllers:控制器是更高级层次对象,用于部署和管理Pod,每个控制器负责不同的任务。

  • Deployment:无状态应用部署
  • StatefulSet:有状态应用部署
  • DaemonSet:确保所有Node运行同一个Pod
  • Job:一次性任务
  • Cronjob:定时任务

Service

  • 防止Pod失联
  • 定义一组Pod的访问策略

Label:标签,附加到某个资源上,用于关联对象、查询和筛选

Namespaces:命名空间,将对象逻辑上隔离,系统命名空间有一下四种

  • default:默认的命名空间,不声明空间的pod都在这里。
  • kube-node-lease:为高可用提供心跳监视的命名空间
  • kube-public:公共数据,所有用户都可以读取它。
  • kube-system:系统服务对象所使用的命名空间
Logo

开源、云原生的融合云平台

更多推荐