K8S的三大插件分别管控运行时、网络和存储,即Container Runtime Interface (CRI)、Container Network Interface (CNI)和Container-Storage-Interface (CSI)。
CRI和CNI是每个K8S集群都必须要部署的基础组件,而CSI则不一定,一般来说只有在运行有状态服务时才需要用到CSI。
kube-proxy是节点上运行的网络代理, 通过维护主机上的网络规则并执行连接转发,实现k8s服务抽象。
service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。
service接收到请求通过kube-proxy转发到Pod上的,kube-proxy服务负责将访问service的TCP/UDP数据流转发到后端的容器。
如果有多个副本,kube-proxy会实现负载均衡。
云计算系统的操作系统是 k8s ,容器相当于进程,而 Pod 则是进程组,容器镜像就是这个系统里的 .exe 安装包。
Pod 里的所有容器,共享PID、IPC、Network和UTS namespace,可以声明共享同一个 Volume。
Pod 是 k8s 中最小的 API 资源对象,Pod可以由一个或多个业务容器和一个根容器(Pause容器)组成。一个Pod表示某个应用的一个实例。
k8s 调度器,统一按照 Pod 而非容器的资源需求进行计算,凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别
Kubernetes is an open source system for managing containerized applications across multiple hosts.
It provides basic mechanisms for deployment, maintenance, and scaling of applications.
用于自动部署、扩展和管理 容器化(containerized)应用
docker 和 containerd
docker 由 docker-client ,dockerd,containerd,docker-shim,runc组成,containerd是docker的基础组件之一,
从k8s的角度看,可以选择 containerd 或 docker 作为运行时组件,
其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。
k8s后来的版本开始默认使用 containerd 。
containerd 相比于docker , 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。
docker 作为 k8s 容器运行时,调用关系为:
kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd
containerd 作为 k8s 容器运行时,调用关系为:
kubelet --> cri plugin(在 containerd 进程中) --> containerd
k8s使用etcd组件作为一个高可用、强一致性的服务发现存储。用于配置共享和服务发现。
etcd特点
简单:基于http+json的api
安全:可选SSL客户认证机制
快速:每个实例每秒支持一千次写操作
可信:使用Raft算法实现分布式
k8s架构组成
kubectl
master(kubeScheduler kubeApiserver kubeControllerManager)
node(kubelet kubeProxy DockerEngine)
etcdCluster
K8S SC PV PVC
存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,
持久卷(PersistentVolume)是实际的存储资源,
持久卷声明(PersistentVolumeClaim)是 Pod 对持久卷的请求。
握笔姿势小儿歌
老大老二握成圆
指尖相对不相连
把笔放在中指上
老四老五来帮忙
指实掌虚腕用力
写起字来不费力
docker是一个Client-Server结构的系统,docker守护进程运行在宿主机上,
守护进程从客户端接受命令并管理运行在主机上的容器,容器是一个运行时环境,
下一页
最后一页