K8S基础篇

218 阅读4分钟

这是我参与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的架构图。

图片.png 一个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:

20160721114643

Kubernetes还提供了一个代理程序——Kubectl Proxy,它既能作为API Server的反向代理,也能作为普通客户端访问API Server