简介
我们的应用部署趋势由大型单体应用向微服务演变,微服务应用之间解耦,形成可被独立开发、部署、升级、伸缩的软件单元。
另一方面容器技术由于它的轻量级,资源隔离,可移植、部署高效等特性得到了迅速的发展和普及。越来越多的应用选择使用容器来部署,微服务更不例外。
这时,便有了管理微服务+容器的需求,Kubernetes开始大放异彩。
Kubernetes是基于容器技术的服务器集群管理系统,通过它,可以托管数量庞大的应用集,并且内置完备的集群管理能力,它有能力帮你做到这些:
- 应用的容器化部署、健康检查、自我修复、自动伸缩、滚动更新、资源分配等
- 服务的注册、发现、均衡负载等
Kubernetes对于运维团队来说,是一个强大的帮手,更自动化的部署和管理应用,更高效的利用硬件资源。
基本概念
Kubernetes集群,后面简称为K8S,主要是由控制节点(Master)和工作节点(Node)组成。
在Master节点中运行着三大组件:kube-api-server
、kube-controller-manager
、kube-scheduler
,通常也会将etcd
数据库部署在Master节点。
在Node节点中,也是需要部署三个主要组件,容器引擎(基本默认docker
了)、kubelet
、kube-proxy
。
K8S的组成结构大致如下图:
Master节点
负责K8S资源的调度管理,由Master向Node下达控制命令,并且一般运维人员使用Master操作和执行命令。
Master节点扮演的角色相当于K8S的大脑,其重要性可想而知,因此建议部署3台Master节点保证K8S的高可用性。
-
kube-api-server:http rest接口服务,与K8S其他组件通信,负责K8S资源的CURD的操作入口;
-
kube-controller-manager:K8S资源的自动化控制管理中心,如跟踪资源状态,资源修复等;
-
kube-scheduler:应用调度,为应用自动分配节点等;
-
etcd:分布式的数据库系统,存储K8S中的各种资源信息。
Node节点
负责K8S应用资源的容器化部署和运行,Node节点配置要求一般高于Master,当其中一个Node不可用时,部署在其上的K8S资源会自动被迁移到可用的Node。
- docker:部署应用的容器引擎;
- kubelet:与kube-api-server通信,向master注册自己,定时汇报自身Node信息,Master下达调度命令,同时负责容器生命周期的管理;
- kube-proxy:实现service代理pointend和负载均衡,分配Node端口等。
其实了解了K8S的整个组成和相关组件服务的功能,我们就能知道如何来管理我们的K8S节点了。例如,我们要新增Node节点,该如何操作?
原理上新扩Node只需要在一台新的机器上安装以上三个服务,然后配置kubectl和kube-proxy的启动参数,通过kubelet向Master的kube-api-server提交Node注册信息,就可以将Node纳入Master的调度中心了。
工具
-
kubeadm
使用
kubeadm
快速创建K8S集群,一般仅用于学习测试使用。 -
kubectl
使用
kubectl
命令工具对K8S下达操作指令,一般将这个工具安装在Master节点。
结束语
这篇算是第一次写K8S,其实K8S技术流行时间也不短了,起初它便发展迅猛,现在依然活力四射,DevOps对它视若珍宝,Developer也大多对它心生向往。在我眼里,K8S不是万能钥匙,而是指纹解锁。
先写到这吧,下篇见。