PS: 以下都是博主的自学笔记 + 个人理解的概括,很抱歉没有准备图文形式描述,欢迎大家提问交流。
通过简要的语言,概括总结Kubernetes的基本概念;更通俗的理解kubernetes的各个基本概念。
比如: 什么是k8s? 什么是容器?什么是pod? deployment又是做什么的? 等等。
Kubernetes是一个开源容器编排平台,可自动执行应用程序的部署,管理和扩展。
简述: k8s是一个容器编排平台, kubernetes大大简化微服务的开发和部署。
比喻: 就像一个精装修的商品房,拎包入住即可
(从宿主机操作系统视角来看,容器其实是一个个进程;
从容器内部视角来看,是个完整的操作系统,有自己的网络,CPU)
kubernetes没有直接调度容器,而是在外面包了一层-POD, POD是k8s基本的调度单位;
POD 可以跑一个或多个容器,共享POD 文件系统和网络,每个POD有独立的IP,容器共享POD的IP和端口空间
POD 里的容器可以通过 localhost 互相访问(一般一个POD只跑一个容器)
PS: 为什么K8S没有直接调度DOCKER容器,而是用POD包了一层?
答: 一个原因是考虑了需要辅助容器的场景,如:sidecar这种;另一个原因考虑了可以替换使用不同的容器技术;
我们一般不会只部署一个POD, 会部署多个POD实例,来实现HA(High Available,高可用);
ReplicaSet就是和一个应用的一组POD相对应的概念,是一种基本的发布机制,可以实现基本的发布;
通过模板(yaml,json)来规范摸个应用的容器镜像,端口、副本数量,点火、健康检查机制,Volumn挂载,环境变量等等相关信息
运行时,replicaset会监控,维护POD数量;多了就减少,少了就增加;
Service 是服务间相互路由、寻址的概念;
Service 屏蔽了应用的IP寻址和负载均衡这些细节,消费方可以直接通过服务名访问目标服务;
Service 底层机制会做寻址和负载均衡,即使应用Pod的IP地址发生了变更,Service 也会屏蔽这种变更,让消费方无感知;
我们发布微服务时候,定义的所书写的定义发布描述文件(主要是YAML 或者JSON),主要就是 service 和 deployment规范
ReplicaSet实现了基础的发布,Deployment在 ReplicaSet基础上实现高级发布,是一种更灵活的发布机制。
简述: Deployment是用来管理 ReplicaSet,实现蓝绿、滚动这些高级发布机制的。
发布的应用的时候,Deployment 会创建 replicaSet文件, replicaSet根据规范,创建应用的POD实例,并维护和保证实例的数量
升级的时候,会创建新的relicaSet调度实现滚动发布,也是先发布回退这些功能
ConfigMap是 Kubenetes的一种资源,开发人员将配置填写到ConfigMap中;
ConfigMap支持以环境变量的方式写入到Pod当中,Pod中的应用就可以通过环境变量的方式去访问到配置
也支持以volume(持久卷)方式 amount Pod当中,Pod中应用就可以以本地配置文件的方式访问到配置
K8 通过Secrete 概念支持敏感数据的配置;
Secret 是一种特殊的Config,提供更安全的存储,访问配置的机制。
(如: 监控场景)
通过DaemonSet 可以在每个work节点上部署一个守护进程Pod, 并且保证每个节点上有且仅有一个守护Pod;
存储卷,理解为磁盘文件存储, POD销毁,volume也销毁,不过支持
标签 是附加到 Kubernetes 对象(比如 Pods)上的键值对。
"metadata": {
"labels": {
"release" : "stable",
"environment" : "dev",
"partition" : "customerA"
}
}
通过 标签选择器,客户端/用户可以识别一组对象。标签选择器是 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 # 应用名称