kubernetes-1-在线安装单机版kubernetes和组件介绍

1 简介

云计算飞速发展

  • IaaS
  • PaaS
  • SaaS
    Docker技术突飞猛进
  • 一次构建,到处运行
  • 容器的快速轻量
  • 完整的生态环境

Kubernetes也叫做k8s,它是一个开源系统,主要用于自动部署、扩容缩容和管理容器化应用。它将诸多应用的容器分为若干个逻辑单元以便于管理和发现。

首先,它是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

1.1 service

(1)在Kubernetes中,service是核心,service需要拥有一个唯一的名字、以及ip:port来对外提供服务。

Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:

拥有一个唯一指定的名字
拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
能够体现某种远程服务能力
被映射到了提供这种服务能力的一组容器应用上

Service的服务进程目前都是基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的一个特定的TCP Server进程,虽然一个Service通常由多个相关的服务进程来提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)访问点,但Kubernetes能够让我们通过服务连接到指定的Service上。

有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否会由于发生故障而重新部署到其他机器,都不会影响我们对服务的正常调用,更重要的是这个Service本身一旦创建就不会发生变化,意味着在Kubernetes集群中,我们不用为了服务的IP地址的变化问题而头疼了。

1.2 pod

(2)提供service的是容器,为了保证service的高可用,提供service的容器不能只有一个,需要一组,这一组容器我们把它叫做pod。pod是kubernetes最基本的操作单元。

容器提供了强大的隔离功能,所以有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程包装到相对应的Pod中,使其成为Pod中运行的一个容器。为了建立Service与Pod间的关联管理,Kubernetes给每个Pod贴上一个标签Label,比如运行MySQL的Pod贴上name=mysql标签,给运行PHP的Pod贴上name=php标签,然后给相应的Service定义标签选择器Label Selector,这样就能巧妙的解决了Service与Pod的关联问题。

(3)为了实现service和pod之间的管理,又有了标签label的概念,把功能相同的pod设定为同一个标签。如可以把所有提供mysql服务的pod打上标签name=mysql,这样mysql service要作用于所有包含name=mysql标签的pod上。

(4)pod运行在Node上,Node可以是一台物理机,也可以是虚拟机。通常一个Node上会运行几百个pod,每个pod里运行着一个特殊的容器,叫做Pause,其它容器叫做业务容器,业务容器共享Pause容器的网络栈和Volume挂载卷,因此同一个pod内的业务容器之间的通信和数据交换更为高效。

1.3 集群管理

(5)在集群管理方面,kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node,其中Master上运行着kube-apiserver、kube-controller-manager、kube-scheduler,他们实现了资源管理、pod调度、弹性伸缩、安全控制、系统监控、纠错等功能。

Node是工作节点,运行应用程序,提供服务。Node上的最小单元是pod,Node上运行着kubernetesd的kubelet、kube-proxy服务进程,它们负责pod的创建、启动、监控、重启、销毁,已经实现负载均衡。

在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node,其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。

Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。

1.4 服务扩容和升级

(6)扩容和升级需要一个关键的东西,Replication controller(RC),RC需要包含3个关键信息:

(1)目标pod的定义。
(2)目标pod需要运行的副本数量(replicas)。
(3)要监控的目标pod的标签(Label)。

在Kubernetes集群中,它解决了传统IT系统中服务扩容和升级的两大难题。你只需为需要扩容的Service关联的Pod创建一个Replication Controller简称(RC),则该Service的扩容及后续的升级等问题将迎刃而解。

工作过程:RC里需要定义好3个指标,kubernetes会根据RC定义的Label筛选出对应的pod,并实时监控其状态和数量,当实例数量少于定义的副本数(replicas)时,则会根据RC定义的pod模板来创建新的pod,然后将此pod调度到合适的Node上启动并运行。整个过程完全自动化,无需人工干涉。

2 框架结构

在这里插入图片描述

2.1 Master组件

在这里插入图片描述
Master是整个集群的控制中心,kubernetes的所有控制指令都是发给master,它负责具体的执行过程。一般会把master独立于一台物理机或虚拟机,它的重要性不言而喻。
(1)所有集群的控制命令都传递给Master组件并在其上执行。
(2)每个Kubernetes集群至少有一套Master组件(当前默认:一个)。
(3)每套Master组件包括三个核心组件(controller-manager, apiserver和scheduler)以及集群数据配置中心etcd。

2.1.1 kube-apiserver

作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。

提供了HTTP Rest接口关键服务进程,是所有资源增、删、改、查等操作的唯一入口,也是集群控制的入口进程。它是Kubernetes系统和etcd直接对话的唯一组件。
(1)集群控制的唯一入口,提供Kubernetes集群控制RESTful API的核心组件。
(2)集群内各个组件之间数据交互和通信的中枢。
(3)提供集群控制的安全机制(身份认证、授权以及admission control)。

2.1.2 kube-controller-manager

是所有资源的自动化控制中心,可以理解为资源对象的大总管。
(1)集群内各种资源controller的核心管理者。
(2)针对每一种具体的资源,都有相应的Controller。
(3)保证其下管理的每个Controller所对应的资源始终处于”期望状态”。

在这里插入图片描述

(1)Replication Controller
管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
(2)Node Controller
管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
(3)Namespace Controller
管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
(4)Service Controller
管理维护Service,提供负载以及服务代理。
(5)EndPoints Controller
管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
(6)Service Account Controller
管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
(7)Persistent Volume Controller
管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
(8)Daemon Set Controller
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
(9)Deployment Controller
管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
(10)Job Controller
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
(11)Pod Autoscaler Controller
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

2.1.3 kube-scheduler

为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。

负责资源调度(pod调度)的进程,相当于公交公司的“调度室”。
(1)通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node。
(2)支持自定义调度算法provider。
(3)默认调度算法内置预选策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数。

2.1.4 etcd Server

Kubernetes里所有资源对象的数据都是存储在etcd中的,etcd是Kubernetes的存储状态的数据库。
(1)Kubernetes集群的主数据库,存储着所有资源对象以及状态。
(2)默认与Master组件部署在一个Node上。
(3)Etcd的数据变更都是通过API Server进行。

2.2 Node组件

在这里插入图片描述除了Master,Kubernetes集群中的其它机器被称为Node,早期版本叫做Minion。Node可以是物理机或虚拟机,每个Node上会被分配一些工作负载(即docker容器),当Node宕机后,其上面跑的应用会被转移到其它Node上。
Node:Kubernetes集群中真正的工作负载节点
(1)Kubernetes集群由多个Node共同承担工作负载,Pod被分配到某个具体的Node上执行。
(2)Kubernetes通过node controller对node资源进行管理。支持动态在集群中添加或删除Node。
(3)每个集群Node上都会部署Kubelet和Kube-proxy两个组件。

2.2.1 Kubelet

负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。

负责Pod对应容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
(1)位于集群中每个Node上的非容器形式的服务进程组件,Master和Node之间的桥梁。
(2)处理Master下发到本Node上的Pod创建、启停等管理任务;向API Server注册Node信息。
(3)监控本Node上容器和节点资源情况,并定期向Master汇报节点资源占用情况。

2.2.2 kube-proxy

负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。

实现Kubernetes Service的通信与负载均衡机制的重要组件。
Kube-proxy运行在每个Node上。
(1)Service抽象概念的实现,将到Service的请求按策略(负载均衡)算法分发到后端Pod(Endpoint)上。
(2)默认使用iptables mode实现。
(3)支持nodeport模式,实现从外部访问集群内的Service。

2.2.3 Docker Engine

Docker引擎,负责本机容器的创建和管理。
Node上需要运行容器服务。

3 单机安装

(1)关闭centos自带防护墙服务
#systemctl disable firewalld
#systemctl stop firewalld
(2)安装 etcd和Kubernetes软件
[会自动安装Docker软件]
#yum install -y etcd kubernetes
(3)安装好软件后,修改两个配置文件
Docker配置文件 /etc/sysconfig/docker,其中OPTIONS的内容设置为:

OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

Kubernets apiserver配置文件 /etc/kubernetes/apiserver:

将 –adminssion_control参数中的ServiceAccount删除

(4)按顺序启动所有服务:

systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy

猜你喜欢

转载自blog.csdn.net/qq_20466211/article/details/113033684
今日推荐