这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
K8S概览
K8S是Kubernetes的全称,官方称其是:
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)应用程序”的开源系统。
翻译成大白话就是:“K8S是负责自动化运维管理多个Docker程序的集群”。Kubernetes 号称下一代分布式架构王者,Kubernetes中的k字母到s字母有8个字母,一般简称为k8s。 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。
一个K8S集群由两部分构成 master节点和node节点。
master节点主要负责集群的控制,对pod进行调度,已经令牌管理等等功能。
node节点主要是负责干活,启动容器、管理容器。
master节点和node节点一般不要部署在一台机器上。
上面这个架构图,举例是一个master节点和2个node节点。但实际生产上,从高可用考虑,是需要部署多个master节点的。
K8S核心的功能:
- 服务的发现与负载的均衡;
- 容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上,Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接;
- Kubernetes 会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可用,Kubernetes 会自动地对这些不可用的容器进行恢复;
- Kubernetes 会帮助我们去做应用的自动发布与应用的回滚,以及与应用相关的配置密文的管理;
- 对于 job 类型任务,Kubernetes 可以去做批量的执行;
- 为了让这个集群、这个应用更富有弹性,Kubernetes 也支持水平的伸缩。
K8S 重要概念
Kubernetes的蓝图由多个模块组成。用这些模块就可以组合出你的蓝图,然后交由Kubernetes去按图施工。模块里包含了该如何设置容器的说明,你也可以修改已运行的Apps的说明, Kubernetes会调整你的系统以符合给出的要求。
一些已有模块能帮助你定义蓝图,其中比较重要的如下所示:
- Pods– 用于描述一组需要运行在一起的容器
- 服务(Service) – 描述了一组提供了有效服务的pods. 服务通常都被用来定义pods的集群。
- 持久卷(Persistent Volumes) – Kubernetes对持久存储的抽象定义。Kubernetes支持许多类型的卷,比如NFS、Ceph、GlusterFS、本地目录等等。
- 命名空间(Namespaces) – 这是一个用来分组、分离和隔离对象的工具。名称空间用于访问控制、网络访问控制、资源管理和引用。
- 入口规则(Ingress rules) – 制定了如何将进入的网络流量路由到服务和pods上。
- 网络规则(Network policies) – 定义了集群中pods之间的网络访问规则。
- 配置和密钥(ConfigMaps and secrets) – 用于把配置信息从应用程序中分离出来。
- 操作器(Controllers) – 实现了不同的自动化管理pods的策略。可分为三种类型:
1.部署(Deployment) – 负责维护并运行一组相同类型的pods。
2.守护进程设置(DaemonSet) – 根据条件在每个节点上运行特定类型的pod。
3.状态设置(StatefulSet) – 当同类型的多个pods需要并行运行时,而且每个pod都需要有一个特定的身份时,可以使用该操作器。 核心原理
API Server
如何访问Kubernetes API,Kubernetes API通过一个kube-apiserver的进程提供服务,该进程运行在Kubernetes Master节点上,默认的情况下,监听两个端口:
- 本地端口: 默认值为8080,用于接收HTTP请求,非认证授权的HTTP请求通过该端口访问API Server。
- 安全端口:默认值为6443,用于接收HTTPS请求,用于基于Token文件或者客户端证书及HTTP Base的认证,用于基于策略的授权,Kubernetes默认情况下不启动HTTPS安全访问机制。
用户可以通过编程方式访问API接口,也可以通过curl命令来直接访问它,例如,我们在Master节点上访问API Server:
Kubernetes还提供了一个代理程序——Kubectl Proxy,它既能作为API Server的反向代理,也能作为普通客户端访问API Server