k8s学习笔记(三)k8s常见术语解读
Docker 容器的本质,“Namespace 做隔离,Cgroups 做限制,rootfs 做文件系统”
K8S的每个术语都是对某种能力和某种设施的声明式描述。
一、Pod
- K8S的最小调度单元
- 一个Node节点里可能有多个Pod,一个Pod里可能有多个docker。
- 共享网络
- 生命周期短暂
Pod只是一个逻辑概念。Pod:是一个容器组。容器的本质是视图隔离,资源受限的进程。Pod也就是一个进程组。
Pod中的容器之间,存在超亲密关系。
Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。
Pod的5种状态:Pending。Running。Succeeded。Failed。Unknown。
二、Controller
控制器:在集群上管理和运行容器的对象,用来管理Pod的生命周期。
- 确保预期的pod副本数量
- 有/无状态应用部署
- 确保所有的node运行在同一个pod
- 一次性任务和定时任务
Kubernetes 项目的 pkg/controller 目录下有这些个文件:
deployment
job
replicaset
cronjob
statefulset
daemon
...
Pod和Controller之间的关系:
- Pod通过Controller实现运维,如弹性伸缩,滚动升级等。
- Pod和Controller通过label建立联系。
2.1 Deployment:
部署无状态应用
- 认为Pod都一样
- 无顺序要求
- 不用考虑在哪个node运行
- 随意进行伸缩和扩展
一个应用有好几个pod,用于做冗余、高可用,这就叫做deployment。
2.2 StatefulSet
部署有状态应用
- 每个pod独立,保持启动顺序和唯一性
- 唯一的网络标识符,持久存储
- 有序,比如mysql主从
2.3 ReplicaSet
副本
2.4 DaemonSet
部署守护进程
如:部署一个日志采集守护进程,每一个worker node上安装数据采集工具。
2.5 Job 与 CronJob
一次任务(如计算)和定时任务
三、Service和容器网络
定义一组pod的访问规则,解决了Pod的IP动态变化后的服务发现问题。
- Pod升级回滚后,ip地址会变动 Service的作用是防止pod失联(服务发现)。
- 定义一组Pod的访问策略(负载均衡)。
3.1 Serice
Service三种类型
- ClusterIP:集群内部使用,默认形式。
- NodePort:对外访问应用
- LoadBalancer:公有云,对外访问应用
3.2 Ingress
Ingress作为统一入口,由Service关联Pod。Ingress7层代理。
四、PV和PVC
Persistent Volume(PV)和 Persistent Volume Claim(PVC)是套持久化存储体系,用来持久化容器数据。
五、Operator
在 Kubernetes 生态中,有一个相对更加灵活和编程友好的管理“有状态应用”的解决方案,它就是:Operator。
K8s内置的能力不会再去做更多的演进了,Operator实际上就是一个API对象加一个控制器。我们通过Operator给系统增加功能,也避免了K8S膨胀。
Operator 的工作原理,实际上是利用了 Kubernetes 的自定义 API 资源(CRD),来描述我们想要部署的“有状态应用”;然后在自定义控制器里,根据自定义 API 对象的变化,来完成具体的部署和运维工作。
六、其它应用
6.1 Helm
Helm是kubernetes的包管理工具,类似linux的apt和yum。
6.2 Istio
Istio (希腊语:扬帆起航)项目使用 sidecar 容器完成微服务治理的。一种Sevice Mesh解决方案。
Istio默认使用的数据平面:envoy,envoy是CNCF第3个毕业生。。
Istio.png
2020.3月,1.5版本,最终架构。
蚂蚁金服.png FreeWheel.png
6.3 Prometheus
CNCF第二个毕业生。监控、报警、数据库。以http协议周期性抓取键监控组件状态。
7. 云原生
CNCF云原生定义:(1)服务容器化;(2)微服务;(3)容器编排(K8S)。
云原生三驾马车:Serverless(无服务,只关心本身功能),Service Mesh(服务之间的网络联系);K8S(服务的编排)。