Kubernetes的一些基础知识和原理

What is the Kubernetes?
System for running many different containers over multiple different machines.

Why use Kubernetes?
When you need to run many different containers with different images.

kubectl:use for managing containers in the node

什么是Kubernetes

官方描述是:Kubernetes是一个用于容器集群的自动化部署,扩容以及运维的开源平台。通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期的部署你的应用;极速的扩展你的应用;无缝对接新应用功能;节省资源,优化硬件资源的使用。为容器编排管理提供了完整的开源方案。
简单来说:Kubernetes就是一个用来运行管理在多个机器上的不同容器的系统

Kubernetes解决了什么问题

服务器环境
Kubernetes是使用Docker进行容器管理的,所有拥有所有Docker所具有的特性,只需要使用相应环境的Docker镜像就可以运行服务,还需要关心的就是宿主机的类型,是redhat,centOS,还是ubuntu. 只要在宿主机上安装Docker环境即可。这减少了对环境的依赖,降低了运维成本也方便了整体服务的迁移。

服务器的资源管理
对于kubernetes而言,是不关心有几台服务器的,因为每个服务器都是一个Node(资源对象)。相对应的,kubernetes更侧重的是每个Node上有多少可以使用的cpu和内存。Kubernetes会监控整体服务器资源的状态来进行调度,相比以前的人工判断资源使用,使得资源利用率更高。

Kubernestes的特点

网络模型
kubernetes采用了三层网络模型,分为PodIP,ClusterIP,NodeIP. Kubernetes在内部使用自己的网络进行通讯,避免了端口冲突的问题。不同的服务会在不同的Docker容器中,而Docker的容器之间是互不影响,互不冲突的,而且都有属于自己的IP,这时候就不会出现两个服务占用同一个端口的问题。
NodeIP:指的是每个服务器的IP。例如server01的IP是192.168.1.2,有一个服务实例的IP申明类型为NodeIP,端口申明为8080,那么我们就可以通过192.68.1.2:8080访问到这个服务实例。

PodIP:首先Kubernetes的最小部署单元是Pod,利用Flannel作为不同HOST之间容器互通技术时,由Flannel和etcd维护了一张节点间的路由表。Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属于一个内网”且“不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
每个Pod启动时,会自动创建一个镜像为gcr.io/google_container/pause:0.8.0的容器,容器内部与外部的通信经由此容器代理,该容器的IP也可以称为PodIP.

ClusterIP:指的是对同一个服务的多个实例(每个实例都有自己的PodIP)组成的集群的入口IP。

Kubernetes常用的概念

部署(Deployment):类似于Docker中的镜像,也就是容器(Pods)实例的模板,容器实例是根据Deploy创建出来的。在Deployment对象中会写明容器的镜像,容器的版本,容器要部署的数量等信息。

容器组(Pods):指的是Kubernetes中的最小管理单元。Pods和Docker中的容器可以理解为包含关系,在Pods中可以包含有多个Docker容器。例如有ServiceA和ServiceB。然后A非常依赖于B(比如两者需要共享主机的相同文件),这时就可以将ServiceA与ServiceB放在同一个Pods中,当做一个整体来管理。

服务(Service):指的是一个对象,这个对象有自己的IP,就是ClusterIP。

路由(Ingress):通常无论是容器组还是Service,外网都是无法直接访问的,Ingress就可以通过
一个负载IP与Kubernetes集群内部进行通讯,一般会和Service对象进行配合使用。

配置项(ConfigMap):指的是一个管理配置的对象,可以将项目的配置写入到ConfigMap中,项目中的配置使用相应的变量名就可以读取相应的变量值。

Kubernetes的结构

Kubernetes由Master节点和Node节点组成。Master节点好比Kubernetes的大脑,而node节点则是实际运行服务的劳动者。

Master节点
Master主要由ETCD/Controller Manager/Api Server/Schedular组成:

  • ETCD:etcd是一个高可用的键值存储系统,主要负责存储各个node节点的状态和其他相关数据。
  • Controller Manager:负责管理后台。每一个资源都对应一个控制器。而Controller manager就是负责管理这些控制器的。
  • Api Server:负责对外提供kubernetes api的服务,它是系统管理指令的统一接口,任何对资源的删减都要交给Api Server处理之后再交给ETCD。(kubectl是和ApiServer交互的)
  • Schedular:负责调度Pod到合适的Node上,

Node节点
Node节点主要是由 kublet和kube-proxy组成

  • kube-proxy:该模块实现了Kubernetes中的服务发现和反向代理功能。Kube-proxy支持TCP和UDP连接转发,默认基于Round Robin算法将客户端流量转发到与service对应的一组后端pod。服务发现发面,kube-proxy使用etcd的watch机制监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。
  • kublet:相当于是Master在每个Node节点上的agent,是Node节点上面最重要的模块,他负责维护和管理该Node上的所有容器,但是如果容器不是通过kubernetes创建的,他并不会管理。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值