Kubernetes
是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。 在Kubenetes中,所有的容器均在
Pod
中运行,一个Pod可以承载一个或者多个相关的容器。同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含0个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享。
主要介绍一些什么知识
K8S的架构概览
k8s功能架构
Docker Engine由许多专用的工具协同工作,从而可以创建和运行容器,例如 API、执行驱动、运行时、shim 进程等。主要由两个核心组件构成:LXC 和 Docker daemon。Docker daemon 是单一的二进制文件,包含诸如 Docker 客户端、Docker API、容器运行时、镜像构建等。LXC 提供了对诸如命名空间(Namespace)和控制组(CGroup)等基础工具的操作能力,它们是基于 Linux 内核的容器虚拟化技术。 Linux Namespace是Linux内核用来隔离资源的方式。每个Namespace下的资源对于其他Namespace都是不透明,不可见的。 容器就是进程,容器是与系统其他部分隔离开的进程。这个时候我们再看上图就更容易理解,容器是跑在宿主机OS(虚机容器的宿主机OS就是Guest OS)上的进程,容器间以及容器和宿主机间存在隔离性。
k8s架构拆解
k8s相关组件介绍
:
-
api service:所有服务访问统一入口。对外暴露K8S的api接口,是外界进行资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
-
crontroller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,它们是处理集群中常规任务的后台线程。
-
scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;就是监视新创建的 Pod,如果没有分配节点,就选择一个节点供他们运行,这就是pod的调度。
-
etcd:一个可信赖的分布式键值存储服务,能够为整个分布式集群存储一些关键数据,协助分布式集群运转。储存K8S集群所有重要信息(持久化)。v2版本时基于内存的存储,v3开始才是序列化到介质。新版本K8S(v1.11以上)已经改用v3版本etcd。
-
kubelet:直接跟容器引擎交互实现容器的生命周期管理。
-
kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的。
其中scheduler和controller-manager两个组件是有leader选举的,这个选举机制是k8s对于这两个组件的高可用保障。api server是可以水平扩展的。
其他重要插件:
-
coredns:可以为集群中的SVC创建一个域名IP的对应关系解析
-
dashboard:给 K8S 集群提供一个 B/S 结构访问体系
-
ingress controller:官方只能实现四层代理,INGRESS 可以实现七层代理
-
federation:提供一个可以跨集群中心多K8S统一管理功能
-
prometheus :提供K8S集群的监控能力
-
elk:提供 K8S 集群日志统一分析介入平台
K8S安装
学习还是需要跟实践结合的,这样理解更透彻。安装个单机版本K8S方便后面的学习整理
K8S安装分3种方式:
-
单机版本,mac安装可以参考文档
-
伪多机(通过vm),网上资源非常多。
-
真实多台机器,可以几台低配置的买阿里云安装。文档描述非常清晰
K8S中的资源
K8S中所有的内容都抽象为资源,资源实例化之后叫做对象。在K8S中,一般适用yaml格式的文件来创建符合我们预期的Pod,这样的yaml文件一般称为资源清单。K8S中的资源可以分为:名称空间级资源、集群级资源、元数据型资源。
名称空间级资源
(通过kubectl api-resources –namespaced=true查看全部) K8S是有空间概念的,以下资源是归属于某个空间的(没有指定就是默认空间)。名称空间级资源又可以根据功能分为以下几种:
-
工作负载型资源: Pod、 ReplicaSet(ReplicationController在v1.11版本废弃)、Deployment、StatefulSet、DaemonSet、Job、CronJob
-
服务发现及负载均衡型资源:Service、Ingress等
-
配置与存储型资源:Volume、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)
-
特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)
集群级资源
(通过kubectl api-resources –namespaced=false查看全部) Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
元数据型资源
HPA、PodTemplate、LimitRange
资源清单中常用字段
yaml文件是K8S资源声明式表达的格式。各种资源通用的常用字段如下:
需要更多资料的可以
点击这里