k8s 是什么 ☛ 可移植:支持公有云,私有云,混合云,多重云 ☛ 可扩展:模块化,插件化,可挂载,可组合 ☛ 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展 k8s 核实组件 1)主要组件 ● etcd:保存了整个集群的状态; ● apiserver:提供了资源操作的唯一入口,并提供访问控制、API注册和发现等机制; ● scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上; ● controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等; ● kubelet:负责维护容器的生命周期,同时也负责数据卷(CVI)和网络(CNI)的管理; ● kube-proxy:负责为Service提供集群内部的服务发现和负载均衡; ● Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI); 2) 扩展组件 ● kube-dns:负责为整个集群提供DNS服务 ● Metrics:提供资源监控 ● Dashboard:提供GUI ● Ingress Controller:为服务提供外网入口 ● Federation:提供跨可用区的集群 ● Fluentd-elasticsearch:提供集群日志采集、存储与查询 3)基本概念
- 集群管理 ◆ Master:K8s集群的管理节点,负责整个集群的管理和控制。 ◆ Node:K8s集群的工作节点,负责集群中的工作负载。 ◆ Namespace:为K8s集群提供虚拟的隔离作用。 ◆ Label:通过给指定资源捆绑一个或多个不同的资源标签,来实现多维度的资源分组管理。
- 资源管理 ◆ Pod:K8s集群中运行部署应用的最小单元,可以支持多容器。 ◆ RC:K8s集群中最早的保证Pod高可用的API对象,之后扩展匹配模式新增了RS。 ◆ Deployment:一个应用模式更广的API对象,通过操作RS进行创建、更新、滚动升级服务。 ◆ StatefulSet:K8s提供的管理有状态应用的负载管理控制器API。 ◆ DaemonSet:确保其创建的Pod在集群中的每一台(或指定)Node上都运行一个副本。 ◆ Job:K8s用来控制批处理型任务的API对象,之后基于时间管理新增了CronJob。 ◆ Service:定义了一个服务的多个Pod逻辑合集和访问Pod的策略,实现服务发现和负载均衡。 ◆ HPA:实现基于CPU使用率(或在使用自定义指标)的Pod自动伸缩的功能。
- 存储管理 ◆ Secret:用来保存和传递密码、密钥、认证凭证这些敏感信息的对象。 ◆ ConfigMap:将配置信息与镜像内容分离,以使容器化的应用程序具有可移植性。 ◆ Volume:是Pod中能够被多个容器访问的共享目录。 ◆ PV:持久化存储和与之相关联的持久化存储声明(PVC),使得K8s集群具备了存储的逻辑抽象能力。
4)系统架构
- 集群高可用 K8s作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的高可用性。 针对K8s集群高可用性还应包含以下两个层面的考虑:Etcd 数据存储的高可用性(至少3台)和Master组件的高可用性。 这里我们采用 Hproxy + Keepalive 高可用方案,并且与 Etcd 服务、Master组件均部署到同一节点。
- 控制管理 K8s集群的管理和控制主要由Master节点负责,它来负责具体的执行过程,我们后面执行的所有命令基本都是在Master节点上运行的。 Master节点通常会占据一个独立的服务器,其主要原因是它太重要了,是整个集群的“首脑”,如果宕机或者不可用,那么对集群内容器应用的管理都将失效。
- 工作负载 K8s集群中的计算能力由Node提供,最初Node称为服务节点Minion,后来改名为Node。 K8s集群中的Node也就等同于Mesos集群中的Slave节点,是所有Pod运行所在的工作主机,可以是物理机也可以是虚拟机。
- 系统监控 Prometheus(普罗米修斯)是一套开源的监控、报警、时间序列数据库的组合。 基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。 这样做非常适合作为虚拟化环境监控系统,比如Docker、Kubernetes。
- 访问方式 • ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。 dnsplicy 通过clusterFirstWithHostNet 如果Pod的hostNetwork字段设置为true,则表示Pod与宿主机共用同一个网络命名空间,此时Pod的DNS策略默认使用的是Default,不能访问集群内的服务。若希望Pod在host网络模式下还能访问集群内的服务,可以将dnsPolicy设置成ClusterFirstWithHostNet。 • NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个 NodeIP:nodePort都将路由到ClusterIP。 • LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均 衡器,并将请求转发到 :NodePort,此模式只能在云服务器上使用。 • ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。
- k8s 高可用主备 keepalived + k8s keepalived 当k8s主机宕机之后根据priority来重新选举master
- k8s 删除不是running的pod
kubectl get po -n namespace --field-selector 'status.phase!=Running' -o json |kubectl delete -f -
标签:Node,常用,K8s,集群,原理,Pod,k8s,节点 From: https://blog.51cto.com/u_16056808/6195432