Kubernetes主要由以下几个核心组件组成
主要组件:
- kube-apiserver : 提供了资源的增、删、改、查等操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- etcd :保存了整个集群的状态;
- kube-scheduler :负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kube-controller-manager:负责维护集群的状态,资源对象的自动化控制中心,比如故障检测、自动扩展、滚动更新、服务帐户和令牌控制器等;
- cloud-controller-manager:与底层云提供商交互的控制器;
节点组件:
- kubelet : 负责Pod对应的容器的 创建、启停等任务,与Master节点密切协作,实现集群管理的基本功能。
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;
- Container Runtime :负责镜像管理以及Pod和容器的真正运行(CRI)
插件:
- kube-dns负责为整个集群提供DNS服务
- Dashboard提供Web UI
- 集群资源监测
- 集群的日志
Kubernetes提供了多种资源对象,用户可以根据自己应用的特性加以选择。这些对象有:
类别 | 类别 |
---|---|
资源对象 | Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling |
配置对象 | Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、 ServiceAccount |
存储对象 | Volume、Persistent Volume |
策略对象 | SecurityContext、ResourceQuota、LimitRange |
三种IP
Node IP : Node 节点IP地址,Node IP 是Kubernetes集群中每个节点的物理网卡的IP地址
Pod IP : Pod的IP地址 ,是一个虚拟二层网络
Cluster IP: Service的IP地址 ,也是一个虚拟IP,
资源对象
Pod: 是kuberneters 最重要最基本的概念,也是最简的单位。 每个Pod都有一个Pause容器。
Pod类型:普通的Pod 和静态的Pod
Label(标签):核心概念,Label是附着到object上(例如Pod、Node、Service、RC等)的键值对。可以在创建object的时候指定,也可以在object创建后随时指定。Labels的值对系统本身并没有什么含义,只是对用户才有意义。
Replication Controller 和 ReplicaSet :用来确保容器应用的副本数始终保持在用户定义的副本数。ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。虽然ReplicaSet可以独立使用,但一般还是建议使用 Deployment 来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题;
- Pod期待的副本数(replicas)
- 用于帅选目标Pod的Label Selector
- 当Pod的副本数小于预期数量时,用于创建新Pod的Pod模板(template)
Deployment : 在Pod的管理对象RC、Deployment、DaemonSet和Job都是面向无状态的服务
StatefulSet : 是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计)
- 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
- 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
- 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
- 有序收缩,有序删除(即从N-1到0)
DaemonSet : 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
Job:
Horizontal Pod Autoscaling (HPA) : 使Pod水平自动缩放。Horizontal Pod Autoscaling仅适用于Deployment和ReplicaSet;
服务发现
Service 是一种抽象的:一个 Pod 的逻辑分组,一种可以访问它们的策略 —— 通常称为微服务。通常是通过 Label Selector实现的(还有没有 selector 的 Service)。
Kubernetes Service 能够支持 TCP 和 UDP 协议,默认 TCP 协议
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: backend
ports:
- protocol: TCP
port: 80
targetPort: 9376
Namespace :命名空间为Kubernetes集群提供虚拟的隔离作用,Kubernetes集群初始有两个命名空间,分别是默认命名空间default和系统命名空间kube-system,除此以外,管理员可以可以创建新的命名空间满足需要。
Secret **对象 : Secret是用来保存和传递密码、**、认证凭证这些敏感信息的对象。
从Kubernetes的系统架构、技术概念和设计理念,我们可以看到Kubernetes系统最核心的两个设计理念:一个是容错性,一个是易扩展性。容错性实际是保证Kubernetes系统稳定性和安全性的基础,易扩展性是保证Kubernetes对变更友好,可以快速迭代增加新功能的基础。