Kubernetes系列——什么是K8S?
简介
Kubernetes是什么?
首先Kubernetes
是一个全新的基于容器技术的分布式架构领先方案,是容器去的优秀平台选型方案,已成为新一代的基于容器技术的PaaS平台
的重要底层框架,也是云原生技术生态圈的核心,服务网格(Service Mesh
),无服务器架构(Serverless
)等新一代分布式架构框架及技术纷纷基于Kubernetes
实现。
其次,
k8s
替我们处理了负载均衡器的选型和部署实施等问题,也不必再考虑引入或者自己开发一个复杂的服务治理框架,不必再头疼于服务监控和故障处理模块的开发。因为K8s
这些强大的自动化机制,所以系统后期的运维难度和运维成本大幅度降低。然后,
k8s
是一个开放的开发平台。与J2EE
不同,它不局限于任何一种语言,没有限定任何编程接口,所以不论是用Java
、Go
、C++
还是Python
编写的服务,都可以被映射为Kubernetes
的Service
(服务),并通过标准的TCP
通信协议进行交互。此外,Kubernetes
平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到k8s平台上。最后,
k8s
是一个完备的分页式系统支撑平台。它具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
基本知识
Service
在
k8s
中,Service
是分布式集群架构的核心。一个Service
对象拥有如下关键特征。
拥有唯一指定的名称(比如
mysql-server
)拥有一个虚拟IP地址(
ClusterIP
地址)和端口号能够提供某种远程服务能力
能够将客户端对服务的访问请求转发到一组容器应用上
Service
的服务进程通常基于Socket
通信方式对外提供服务,比如Redis、Memcached、MySQL、WebServer
或者是实现了某个具体业务的特定TCP Server
进程。虽然一个Service
通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)
访问点,但Kubernetes
能够让我们通过Service(ClusterIP+Service Port)
连接指定的服务。有了Kubernetes
内建的透明负载futq和故障恢复机制,不管后端有多少个具体的服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。
容器
容器提供了强大的隔离功能,所以我们有必要把为
Service
提供服务的这组进程放入容器中进行隔离,为此,Kubernetes
设计了Pod
对象,将每个服务进程都包装到相应的Pod
中,使其成为在Pod
中运行的一个容器(Container)。为了建立Service
和Pod
间的关联关系,Kubernetes
首先给每个Pod
都贴上一个标签(Label),比如给运行Mysql
的Pod
贴上name=mysql
标签,给运行PHP
的Pod
贴上name=php
标签,然后给相应的Service
定义标签选择器(Label Selector),例如,MySQL Service
的标签选择器的选择条件为name=mysql
,意为该Service
要作用于所有包含name=mysql
标签的Pod
Pod
Pod
运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,在一个节点上能够运行多个Pod
;其次,在每个Pod
中都运行着一个特殊的被称为Pause
的容器,其他容器则为业务容器,这些业务容器共享Pause
容器的网络栈和Volume
挂载卷。并不是每个Pod
和它里面运行的容器都能被映射到一个Service
上,只有提供服务(无论是对内还是对外)的那组Pod
才会被映射为一个服务。
集群管理
在集群管理方面,
Kubernetes
将集群中的机器划分为一个Master
和一些Node
。在Master
上运行着集群管理相关的一些进程:kube-apiserver、kube-controller-manager
和kube-scheduler
,这些进程实现整个集群的资源管理、Pod
调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。Node
作为集群中的工作节点,其上运行着真正的应用程序。在Node
上,Kubernetes
管理的最小运行单元是Pod
。在Node
上运行着Kubernetes
的kubelet
、kube-proxy
服务进程,这些服务进程负责Pod
的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。