定义
DevOps+持续交付+微服务+容器
云原生没有确切的定义,因为它的概念一直在变化发展之中,一般认为符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。
云计算
云原生基于云计算,云计算可以分为3层:
- Iaas: 基础设施即服务(一个很大的服务器,通过虚拟化成多个小的服务器,来为用户提供服务,类似在本地装了虚拟机)
- PaaS: 平台即服务(应用运行的平台,提供分发,灾备,监控,重启等功能)
- Saas: 软件即服务
容器化
为什么要容器化?
应用上云已经成了当下发展的趋势,大量的应用如何做到快速启停,同时兼顾高性能,低开销,虚拟机显然太过于笨重,新的虚拟化容器技术应运而生。
Docker
以docker为代表的容器化技术,用镜像解决了打包的问题,使得同一个镜像可以在所有机器上复用
docker容器创建
- 启用Linux NameSpace配置
- 设置指定的Cgroups参数
- 进程的根目录
- 联合挂载各层文件(所以不同容器有些资源是共享的,展现了占用空间小,加载速度快的优势)
docker与虚拟机区别
- 虚拟机是物理隔离,模拟完整的os,安全性高但占用内存,且与宿主机通信受限。
- docker容器只通过namsSpace隔离,共享内核可操作内核代码(意味着不安全),其是宿主机上的一个进程,比如容器修改了时间,则系统时间也会变。
docker三件套
- docker compose: docker容器编排,可以通过配置文件定义多个容器,用命令同时启动
- docker swarm: docker集群管理,其将docker从容器升级为PaaS平台
- docker machine: 将虚拟机运行成容器,以管理docker的方式管理虚拟机
k8s
容器编排主流技术,支持自动化部署和各种容器编排工具。
核心组件:
- apiserver: 服务访问唯一入口,提供认证、授权、访问控制、API注册和发现
- controller manager: 维护集群状态
- scheduler: 资源调度
- etcd: 键值对数据库,保存集群状态
- kubelet: 维护容器生命周期,Volume和网络管理
- kube-proxy: 为service提供cluster内部服务发现和负载均衡
- container runtime: 负责镜像管理和Pod和容器的真正运行
yaml
专门编写配置文件的语言(可用json,也可用yaml),具有可读性高,扩展能力强,易于使用等优点。 特点:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不能用tab,只能用空格
- 缩进空格数无限制,只要相同层级左侧缩进空格相同
- 数组用-表示
- NULL用~表示
- 用#表示注释
Harbor
为了安全和效率,需要部署私有环境的registry。Harbor是企业级的Docker Registry,提供权限管理,日志审核、管理界面、自我注册、镜像复制和中文支持,Helm仓库托管等。
- 组件:组件以docker容器形式存在,使用compose来部署,通过docker link连接起来,通过容器名互相访问。
- 各组件:
- proxy: nginx构成的反向代理
- registry
- UI
- MySql
- Log
云原生浪潮滚滚而来,各种新玩法是你方唱罢我登场,保持好奇心,逐浪前行。