PS: 以下都是博主的自学笔记 + 个人理解的概括,很抱歉没有准备图文形式描述,欢迎大家提问交流。

通过简要的语言,概括总结Kubernetes的基本概念;更通俗的理解kubernetes的各个基本概念。
比如: 什么是k8s? 什么是容器?什么是pod? deployment又是做什么的? 等等。

一、 什么是 Kubernetes?

Kubernetes是一个开源容器编排平台,可自动执行应用程序的部署,管理和扩展。

简述: k8s是一个容器编排平台, kubernetes大大简化微服务的开发和部署。

比喻: 就像一个精装修的商品房,拎包入住即可

二、Kubernetes基本概念

2.1 容器: 轻量级的虚拟化技术

(从宿主机操作系统视角来看,容器其实是一个个进程;
从容器内部视角来看,是个完整的操作系统,有自己的网络,CPU)

2.2 POD(豌豆荚):

kubernetes没有直接调度容器,而是在外面包了一层-POD, POD是k8s基本的调度单位;

POD 可以跑一个或多个容器,共享POD 文件系统和网络,每个POD有独立的IP,容器共享POD的IP和端口空间

POD 里的容器可以通过 localhost 互相访问(一般一个POD只跑一个容器)

PS: 为什么K8S没有直接调度DOCKER容器,而是用POD包了一层?
答: 一个原因是考虑了需要辅助容器的场景,如:sidecar这种;另一个原因考虑了可以替换使用不同的容器技术;

2.3 副本集 ReplicaSet

我们一般不会只部署一个POD, 会部署多个POD实例,来实现HA(High Available,高可用);

ReplicaSet就是和一个应用的一组POD相对应的概念,是一种基本的发布机制,可以实现基本的发布;

通过模板(yaml,json)来规范摸个应用的容器镜像,端口、副本数量,点火、健康检查机制,Volumn挂载,环境变量等等相关信息

运行时,replicaset会监控,维护POD数量;多了就减少,少了就增加;

2.4 服务 Service

Service 是服务间相互路由、寻址的概念;

Service 屏蔽了应用的IP寻址和负载均衡这些细节,消费方可以直接通过服务名访问目标服务;

Service 底层机制会做寻址和负载均衡,即使应用Pod的IP地址发生了变更,Service 也会屏蔽这种变更,让消费方无感知;

2.5 Deployment

我们发布微服务时候,定义的所书写的定义发布描述文件(主要是YAML 或者JSON),主要就是 service 和 deployment规范

ReplicaSet实现了基础的发布,Deployment在 ReplicaSet基础上实现高级发布,是一种更灵活的发布机制。

简述: Deployment是用来管理 ReplicaSet,实现蓝绿、滚动这些高级发布机制的。

发布的应用的时候,Deployment 会创建 replicaSet文件, replicaSet根据规范,创建应用的POD实例,并维护和保证实例的数量

升级的时候,会创建新的relicaSet调度实现滚动发布,也是先发布回退这些功能

2.6 ConfigMap/Secret

ConfigMap是 Kubenetes的一种资源,开发人员将配置填写到ConfigMap中;

ConfigMap支持以环境变量的方式写入到Pod当中,Pod中的应用就可以通过环境变量的方式去访问到配置
也支持以volume(持久卷)方式 amount Pod当中,Pod中应用就可以以本地配置文件的方式访问到配置

K8 通过Secrete 概念支持敏感数据的配置;
Secret 是一种特殊的Config,提供更安全的存储,访问配置的机制。

2.7 DaemonSet

(如: 监控场景)
通过DaemonSet 可以在每个work节点上部署一个守护进程Pod, 并且保证每个节点上有且仅有一个守护Pod;

2.8 volume

存储卷,理解为磁盘文件存储, POD销毁,volume也销毁,不过支持

2.9 label

标签 是附加到 Kubernetes 对象(比如 Pods)上的键值对。

"metadata": {
  "labels": {
    "release" : "stable",
    "environment" : "dev",
    "partition" : "customerA"
  }
}

2.10 选择器

通过 标签选择器,客户端/用户可以识别一组对象。标签选择器是 Kubernetes 中的核心分组原语。

通过选择器找到我们想要对象。 如:`kubectl get pod -l “app:jdsf-demo”

一些 Kubernetes 对象,例如 services 和 replicationcontrollers ,也使用了标签选择器去指定了其他资源的集合,例如 pods。

service 和 Replicate 通过标签选择器找到指定的资源。 如 service 通过标签选择代理器找到代理的pod, 并负载他们。

#service.yaml
spec:
  selector:
    app: jdsf-default-app # 应用名称
---
# rs.yaml

spec:
  replicas: 1
  selector:
    matchLabels:
      app: jdsf-defult-app # 应用名称

Logo

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

更多推荐