一:简介
-
背景:由google开发,基于borg系统
-
borg:google内部的一个大规模的集群管理系统,构建于容器技术之上,主要目的是为了实现资源管理的自动化,以及跨节点的资源复用率的最大化。
-
什么是k8s:简单说来,k8s就是一款容器编排工具
-
为什么要用k8s
-
可移植:支持公有云、私有云...
-
可扩展:模块化,插件化,可挂载,可组合
-
自动化:自动部署,自动重启,自动复制,自动伸缩
-
-
k8s特性
-
自动装箱:构建于容器之上,基于资源依赖以及其它约束自动完成容器的部署,而且不会影响可用性
-
自我修复:支持容器故障后自动重启、节点故障后重新调度,以及其它可用节点,健康状态检查等自我修复机制
-
水平扩展:支持通过简单命令或UI进行水平扩展,以及基于CPU等资源负载率的自动水平扩展机制
-
服务发现与负载均衡:k8s通过KubeDNS为系统内置服务发现功能,Service可以通过iptables或者ipvs内建负载均衡机制
-
自动发布和回滚:k8s支持“灰度”更新应用程序以及配置信息。监控更新过程中应用程序的健康状况,如果产生故障, 立即执行回滚操作
-
密钥和配置管理:k8s包含了一个叫做ConfigMap的组件,该组件实现了数据与docker镜像的解耦,在需要的时候,只需对配置做出变更,不需要重新构建docker镜像。
-
存储编排:k8s支持pod对象按照需求自动挂载不同类型的存储系统,包括本地存储,云服务端,网络存储等
-
批处理:k8s支持CI(可持续集成)
-
-
k8s基本概念
-
说明:k8s使用共享网络将多个物理机或者虚拟机汇集到一个集群中,在服务器之间进行通信
-
集群中的节点分为master和worker
-
集群中的主机,既可以是物理机,也可以虚拟机
-
-
master:
-
概念:集群中的网关和中枢
-
任务
-
为用户和客户端暴露API
-
跟踪其它服务器的健康状态
-
调度任务,进行负载均衡
-
编排其它组件之间的通信
-
-
-
node
-
概念:k8s集群中的工作节点
-
任务:接收worker的工作指令,概念指令进行相应的操作
-
-
资源抽象
-
pod:k8s最小调度单元,一般情况下,k8s不会直接运行容器,而是使用一个抽象的资源来封装一个或者多个容器,这个抽象就是pod.同一个pod中的容器,共享网络,共享存储,可以通过本地回环网络lo直接通信,但他们彼此又在Mount, User, PID等空间保持隔离
-
label:将资源进行分类的标识符,label在创建之后,可以任意添加和修改,一个对象可以拥有多个label.一个label也可以附加于多个对象。
-
标签选择器(label selector):一种根据label进行过滤,筛选符合条件的资源对象的机制。
-
pod控制器:用于自动管理Pod对象
-
服务资源(service):service表示建立在一组pod对象之上的资源抽象,它主要是通过标签选择器选定一组对象,为这一组对象定义一个统一的固定访问入口,一般是IP地址。在大多数时候,请求到达service IP之后,通过相应的负载均衡分配到service中的各个端点(各个pod对象之上)
-
存储卷:与docker volume类似
-
Name:表示k8s集群中资源对象的标识符
-
Namespace:name的作用域,namespace通常用于实现项目的资源隔离,形成逻辑分组
-
Annotation:记录辅助信息
-
构建、发布的镜像信息
-
时间戳
-
发行ID
-
编号
-
镜像仓库地址
-
-
一些日志记录,监视,分析
-
用户或者系统来源
-
-
Ingress:k8s将pod对象和外部网络环境进行隔离,pod和service等对象间的通信,使用内部专用地址,如果需要开放某些pod对象提供给外部用户访问,则需要为请求流量打开一个通往k8s集群内部的通道,ingress也是这类通道的实现方式之一。
-
二. k8s网络模型
-
整体网络模型架构如下:
-
k8s的网络中主要存在4种不同类型的通信
-
同一pod内的容器之间的通信
-
pos之间的通信
-
pod与service之间的通信
-
集群外部的流量与service之间的通信
-
-
k8s网络模型实现机制的特点
-
所有pod之间均可以不经过NAT机制而直接通信
-
所有节点均可以不经过NAT机制而直接与容器通信
-
容器自己使用的IP地址也就是其它容器或者节点直接看到的IP地址
-
3. k8s基本操作
下载地址:https://github.com/kubernetes/kubernetes
1:go环境下的安装
go get -d k8s.io/kubernetes
cd $GOPATH/src/k8s.io/kubernetes
make
2:docker环境下的安装
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make quick-release
3:release直接安装
.tar.gz中包含k8s的文档,服务程序文件,示例