Kubernetes 学习
优于主管要求这周进行Kubernetes的相关学习,首选我们来了解下什么是Kubernetes,
什么是Kubernetes?
Kubernetes,是目前流行的一种开源容器编排技术。目前采用阿里云容器服务来为项目提供Kubernetes集群支持
我们可以通过容器服务管理控制台创建以安全高可用的Kubernetes集群,能够阿里云虚拟化/存储/网络/安全能力,提供高性能可伸缩的应用管理能力,简化集群的搭建和扩容等工作。
Kubernetes支持对容器化应用程序的部署、扩展和管理。有如下功能
- 弹性扩展和自我修复
- 服务发现和负载均衡
- 服务发布与回滚
- 机密和配置管理
在实际使用过程中,使用Kubernetes只要一个部署文件,使用一条命令来部署多层容器(前端,后端等)的完整集群。
$ kubectl create -f single-config-file.yaml
Kubernetes相关核心概念
集群
集群是一组节点,可以是物理服务器或者虚拟机,在从基础上再安装了Kubernetes平台。如下图所示:
其中,有若干组件
- Pod
- Container(容器)
- Label(
)标签
- Replication Controller(复制控制器)
- Service(
)(服务)
- Node(节点)
- Kubernetes Master(Kubernetes主节点)
Pod
pod(绿色的)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用使用localhost互相通信。Pod是短暂的,不是持续性实体。
- Pod是短暂的,那如何保证持久化容器数据使其能够跨重启而存在+++++++++++++++kubernetes支持卷的概念,所以可以使用持久化的卷类型(persistent volume)
- 是否需要手动创建Pod,如果要创建桐一个容器的多个拷贝,需要一个个分别创建出来吗++++++++++++++++可以手动,也可以使用Replication Controller使用Pod模板创建多份拷贝
- 如果Pod是短暂的,那么重启时IP地可能会改变,那么怎么才能从前端容器正确可靠的地使用纸箱后端容器+++++++++++++++++++++可以使用service
Lable
一些Pod有label。一个label是attach到Pod的一对键值对,用来传递用户定义的属性。比如,你可能创建了一个 tier 和 app 的标签,通过Label(tier = frontend , app = kevinapp)来标记前端 pod 容器,(tier = backend , app = kevinapp)标记后台Pod。然后。可以使用Selectors选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面
Replication Controller
目前我们已经可以创建Pod的一些副本了,如何在这些副本上实现负载均衡呢,我们
需要的时Service
Service
处理重启时IP地址改变的情况
Service是定义一系列Pod以及这些pod策略的一层 抽象 。Service通过Label找到pod
组。因为Service时抽象的,所以在图表里通常看不到他们的存在,
下面举个例子来详细的说明这个过程:
现在假设后台有两个后台Pod,并且定义后台Service的名称为“backend-service”
,label的选择器(tier=backend, app=myapp)。backend-service的Service会完
成如下两件重要的事情:
- 会为Service创建一个本地集群的DNS入口,因此前端pod只需要DNS查找主机名为“backend-Service”,能够解析出前端应用程序可用的IP地址。
- 现在前端得到了后端服务的IP地址,但是他要访问其中的哪一个Pod呢 ,Service在这两个Pod之间提供透明的负载均衡,会将请求发送给其中的任意一个。通过每个Node上运行的代理完成。
Node
节点为物理或者虚拟机器,作为kubernetes的worker,通常称为Minion。每个节点
运行如下kubernetes关键组件
- Kubelet:是主节点代理
- Kube-proxy:Service使用将其链接路由到Pod,如上文所述
- Docker或者Rocket:kubernetes使用容器技术来创建容器
Kubernetes Master
集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独
特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用
来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication
Controller。