Kubernetes-Docker集群管理

Kubernetes介绍

Kubernetes是一个开源的Docker容器编排系统

1.2015年7月,Kubernetes v1.0正式发布,截止到目前最稳定版本是v1.9

2.调度计算集群的节点,动态管理上面的作业

3.通过使用 [labels] 和 [pods] 的概念,将应用按逻辑单元进行分组

Kubernetes的作用

1.自动化部署,扩展和管理容器应用

2.资源调度

3.部署管理

4.服务发现

5.扩容缩容

6.监控

Kubernetes-Docker集群管理

Dev(运维) ops(开发) 思想

核心:

持续性的集成CI(测试可做):

开发 → 上传到Git(代码管理器,协同平台,自动存储提交上对的代码项目,减少了沟通复杂程度)→ 测试(自动发现Git上的更改,进行自动测试,全自动,无需人员干预)

持续性的交付CD:

系统环境不同,需要做兼容,在线更新(蓝绿部署,灰度部署,金丝雀)

蓝绿部署【典型代表:海豚,大脑的运行机制,代理端对外只提供一个IP,群集1更新业务断开,此时群集2支撑业务】

滚动部署【线网最多,更适合于容器,里面为多个容器应用,版本内容都统一,按行升级,减轻操作复杂度,但是对于客户而言,有可能会出现访问版本不同的情况】

持续性的部署CD:

传统项目的瀑布流行的开发:

需求分析 → 设计(实体与关系模型ER图) → 开发 → 测试 → 发布

分层开发:

表示层:展示数据(数据可视化)

业务逻辑层:注册的信息进行加密存储

持久层:数据的存储(MySQL)

微服务容器开发docker:

优点:灵活,方便迁移,占用内存小,无需考虑底层环境

缺点:共享内核资源,不安全

特点:容器多通信复杂

web:nginx,tomcat

中间件:rabbiting,kafka,redis,memcache

数据库:mysql,oracle,mongodb

测试:

单元测试:项目开发完直接测试

项目测试:需要有构建的过程(make)

群集管理工具:

1.compose【单个节点进行编排】+machine【完成节点的初始化并进行授权,能够成功的添加到群集管理中】+swarm【群集管理】(docker官方提供的)

2.mesos+马拉松【地下的资源整合成】

3.Kubernetes【k8s:占比85%,红帽的openshift成为自己的云】

Kubernetes基本概念和术语

1.Kubernetes中的大部分概念都可以看作一种资源池
2.Kubernetes术语:

Master
Node
Pod
Lable
Deployment
Service
Job计划任务
DaemonSet


Kubernetes容器云平台入门与进阶

pod中放docker容器,nginx提供网站,旁边有logstach日志搜集,
pod中可以包含多个容器,外部为Node

概述:

Kubernetes是什么

Kubernetes特性

Kubernetes集群架构与组件

Kubernetes核心概念

Kubernetes是什么:

1.Kubernetes是Google在2014年开源的一个容器集群管理工具系统,Kubernetes简称K8S
2.K8S用于容器化应用程序的部署,扩展和管理
3.K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能
4.Kubernetes目标是让部署容器化应用简单高效
官方网站:http://www.kubernetes.io

Kubernetes特性:

自我修复:

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量,杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断

弹性伸缩:

使用命令,UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小成本运行服务

自动部署和回滚:

K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务

服务发现和负载均衡:

K8S为多个容器提供一个同一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器的IP问题

机密和配置管理:

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并将一些常用的配置存储在K8S中,方便应用程序使用

存储编排:

挂载外部存储系统,无论时来自本地存储,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS,GlusterFS,Ceph)都作为群集资源的一部分应用,极大提高存储使用灵活性

批处理:

提供一次性任务,定时任务,满足批量数据处理和分析的场景

集群架构与组件

Kubernetes-Docker集群管理

三个节点服务器
中心化机制:mysql主从复制,一个master两个slave
真正干活的是node/slave,master只做调度和健康状态检查
去中心化机制:GFS,redis
master什么活都要做
典型的中心化机制:三台节点服务器
生产环境中至少三个master(三副本机制)
node理论上是无限多,但是需要归类


master:

Server API:对外提供访问入口
集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给API Server处理后在提交给Etcd存储
kubectl:命令行工具,管理员使用
Internet:客户来访者使用
Auth:验证机制
Etcd:身份信息验证,存储(验证数据库)
分布式键值存储系统,用于保存群集状态数据,比如Pod,Service等对象信息
scheduler:调度节点(业务调配)
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,也可以部署在同一个节点上,也可以部署在不同节点上

controller-manager:控制器管理器,管理节点(分布在每个节点中)
处理集群中常规后台任务,一个资源对应一个控制器,而Controller-Manager就是负责管理这些控制器的


Node:

流量分析工,清洗工具(监控)
kube-proxy:代理器,分配到多个pod中
kubelet:管理工具
pod:运行在容器上,最小管理单元
container:容器

pod:

最小部署单元
一组容器的集合
一个Pod中的容器共享网络命名空间
Pod是短暂的

Controllers:

ReplicaSet:确保预期的Pod副本数量
Deployment:无状态应用部署
StatefulSet:有状态应用部署
DaemonSet:确保所有Node运行同一个Pod
Job:一次性任务
Cronjob:定时任务
更改及层次对象,部署和管理Pod

Service:

防止Pod失联
定义一组Pod的访问策略

Label:

标签,附加到某个资源上,用于关联对象,查询和诗选

Namespaces:

命名空间,将对象逻辑上隔离

Annotations:

注释