Kubernetes(K8s)是一个开源系统,用于容器化应用的自动部署、扩缩和管理。

Kubernetes将构成应用的容器按逻辑单位进行分组以便于管理和发现。Kubernetes基于Google公司在运行生产负载上的15年经验 打造,并融合了来自社区的最佳建议与实践。

kubernetes官网


Kubernetes架构

kubernetes集群的节点只有两类:master节点和node节点。

master节点负责维护集群的目标状态;node节点用来运行你的应用和云工作流的机器。master节点控制所有node节点。

  • kubernetes master:

master是整个集群的控制中心,kubernetes的所有控制指令都是发给master,它负责具体的执行过程。

master上有这些关键进程:

API Server              集群控制的唯一入口,数据交互中枢,集群安全机制

ControllerManager       集群内各种资源的管理者,保证每个controller的资源处于“期望状态”

Scheduler               集群的资源调度(pod调度)

Etcd                    集群的主数据库,存储着所有资源对象及状态
  • kubernetes node:

node是集群中真正的工作负载节点。每个node上会被分配工作负载(即docker容器),当node宕机后,其上运行的docker容器会被转移到其它node上。

node上有这些关键进程:

Kubelet         负责pod对应容器的管理,与master节点密切协作,实现集群管理

Kube-proxy      实现service的通信与负载均衡机制
  • kubernetes特征:
1. 以服务为中心

2. 自动化
  • 架构对比:

Docker Swarm架构

在这里插入图片描述

Kubernetes架构

在这里插入图片描述


Kubernetes对象

在kubernetes中,kubernetes对象是持久化的实体。kubernetes使用这些实体去表示整个集群的状态。

  • kubernetes对象描述的信息:
哪些容器化应用在运行(以及在哪个 Node 上)

可以被应用使用的资源

关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略
  • 对象规约Spec与状态Status

每个kubernetes对象包含两个嵌套的对象字段,它们负责管理对象的配置:specstatus

spec是必需的,它描述了对象的期望状态(Desired State)——希望对象所具有的特征;status描述了对象的 实际状态(Actual State),它是由kubernetes提供和更新的。在任何时刻,kubernetes一直努力地管理着对象的实际状态以与期望状态相匹配。

  • 创建kubernetes对象:

当创建kubernetes对象时,必须提供对象规约spec,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。当基于kubectl、使用kubernetes api创建对象时,kubectl在发起api请求时,将这些信息转换成json格式。

  • Pod:

Pod是kubernetes的最小调度单元,一个pod代表集群上正在运行的一个进程。

一个pod包含一个或多个容器,pause容器是“根容器”。pause容器会共享network、volume资源给该pod下的其它容器。

示例:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
  • ReplicaSet:

ReplicaSet叫做副本集,它的目的是维护一组正在稳定运行的pod,保证指定数量的pod的可用性。

一个副本集是用字段定义的,包括:一个selector,它指定如何识别它可以获得的pod;一个replicas指示它应该维护多少个pod;一个template指定它应该创建的新pod的数据,以满足replicas的数量标准。

一个副本集通过创建和删除pod来实现它的目的,以达到所需的数量。

示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3
  • Deployment:

Deployment为pod和replicaset提供声明式的更新。

在deployment中描述一个期望状态,而deployment controller以可控的速率将实际状态更改为期望状态。deployment可以自动创建或销毁replicaset。

示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.0
        ports:
        - containerPort: 80
  • Service:

一个Service本质上是一组pod组成的一个集群,service和pod之间是通过selector下定义的Label串联起来的,同一个service下的所有pod的Label是相同的。

同一个service下的所有pod通过kube-proxy实现负载均衡,而每个service都会分配一个全局唯一的虚拟ip——cluster ip,在service整个生命周期内,cluster ip不变。

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐