云原生初探

232 阅读3分钟

定义

DevOps+持续交付+微服务+容器

云原生没有确切的定义,因为它的概念一直在变化发展之中,一般认为符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

云计算

云原生基于云计算,云计算可以分为3层:

  • Iaas: 基础设施即服务(一个很大的服务器,通过虚拟化成多个小的服务器,来为用户提供服务,类似在本地装了虚拟机)
  • PaaS: 平台即服务(应用运行的平台,提供分发,灾备,监控,重启等功能)
  • Saas: 软件即服务

容器化

kvs-docker.jpg

为什么要容器化? 应用上云已经成了当下发展的趋势,大量的应用如何做到快速启停,同时兼顾高性能,低开销,虚拟机显然太过于笨重,新的虚拟化容器技术应运而生。 docker.awebp

Docker

以docker为代表的容器化技术,用镜像解决了打包的问题,使得同一个镜像可以在所有机器上复用

docker容器创建

  1. 启用Linux NameSpace配置
  2. 设置指定的Cgroups参数
  3. 进程的根目录
  4. 联合挂载各层文件(所以不同容器有些资源是共享的,展现了占用空间小,加载速度快的优势)

docker与虚拟机区别

  1. 虚拟机是物理隔离,模拟完整的os,安全性高但占用内存,且与宿主机通信受限。
  2. docker容器只通过namsSpace隔离,共享内核可操作内核代码(意味着不安全),其是宿主机上的一个进程,比如容器修改了时间,则系统时间也会变。

docker三件套

  1. docker compose: docker容器编排,可以通过配置文件定义多个容器,用命令同时启动
  2. docker swarm: docker集群管理,其将docker从容器升级为PaaS平台
  3. docker machine: 将虚拟机运行成容器,以管理docker的方式管理虚拟机

k8s

k8s.jpg 容器编排主流技术,支持自动化部署和各种容器编排工具。 核心组件:

  1. apiserver: 服务访问唯一入口,提供认证、授权、访问控制、API注册和发现
  2. controller manager: 维护集群状态
  3. scheduler: 资源调度
  4. etcd: 键值对数据库,保存集群状态
  5. kubelet: 维护容器生命周期,Volume和网络管理
  6. kube-proxy: 为service提供cluster内部服务发现和负载均衡
  7. container runtime: 负责镜像管理和Pod和容器的真正运行

yaml

专门编写配置文件的语言(可用json,也可用yaml),具有可读性高,扩展能力强,易于使用等优点。 特点:

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进不能用tab,只能用空格
  4. 缩进空格数无限制,只要相同层级左侧缩进空格相同
  5. 数组用-表示
  6. NULL用~表示
  7. 用#表示注释

Harbor

为了安全和效率,需要部署私有环境的registry。Harbor是企业级的Docker Registry,提供权限管理,日志审核、管理界面、自我注册、镜像复制和中文支持,Helm仓库托管等。

  • 组件:组件以docker容器形式存在,使用compose来部署,通过docker link连接起来,通过容器名互相访问。
  • 各组件:
    • proxy: nginx构成的反向代理
    • registry
    • UI
    • MySql
    • Log

云原生浪潮滚滚而来,各种新玩法是你方唱罢我登场,保持好奇心,逐浪前行。