VM和容器的区别
什么是云原生
CNCF——云原生计算基金会
什么是Kubernetes
Kubernetes是一个可移植的、可扩展的容器编排工具与平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetes的服务、支持和工具广泛可用。
Kubernetes这个名字源于希腊语,意为“舵手”或“飞行员”。k8s这个缩写是因为k和s之间有8个字母。Google在2014年开源了Kubernetes项目。Kubernetes建立在Google大规模运行生产工作负载方面拥有十几年的经验基础上,结合了社区中最好的想法和实践。
Kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统。
Kubernetes架构
架构图
核心组件
control-plane 节点核心组件:https://kubernetes.io/docs/concepts/overview/components/
组件 | 说明 |
---|---|
kube-apiserver | 提供Restful API接口、集群的统一入口,集群的认证、授权、准入控制及各组件的协调者,所有的对象资源的增删改查和监听操作都交给apiserver处理后再提交给etcd数据库做持久化存储 |
kube-controller-manager | 管理k8s出厂的时候预置的各种类(kind)(如deployment、service等),然后从类中实例化出资源对象并对其进行管理。Controller manager由多种controller组成,包括Node Controller、Job Controller、Endpoints Controller、Service Account & Token Controller |
kube-sheduler | 将pod调度到可用的Node节点上 |
etcd | 高可用的分布式键值数据库,可用于服务发现。etcd采用raft一致性算法,基于Go语言实现。etcd作为一个高可用键值存储系统,天生就是为集群化而设计,用于保存K8s集群状态数据 |
Kubernetes工作流程
Container Runtime Interface(CRI)架构
容器运行时分为High-level和Low-level
- High-level:管理,协调,接收外部请求,提供存储、网络
- Low-level:,遵循OCI(Open Container Initiative)开放容器标准,创建cgroups和namespaces进行资源隔离
dockershim
kubelet用于连接容器运行时,容器运行时除了docker外,当时还有一个rkt。
Google和Docker互相看不顺眼,K8s提出了CRI接口,docker不遵循CRI接口,K8s为了兼容docker,在kubelet上放了一个docker垫片(dockershim),通过dockershim去连接docker。
1.24版本以后谷歌去掉了dockershim,docker认怂了,说后面垫片docker来开发,docker把自己代码解耦,其中containerd作为高级容器运行时并交给了CNCF(已毕业);如果去掉docker,containerd现在仍然是docker公司的。runc是低级容器运行时,也是docker公司的。
K8s部署工具及托管平台
K8s高可用架构
-
etcd和master部署在一起
-
etcd单独部署