DevOps CAMS模型

C 文化 Culture
A 自动化 Automation
M 指标维度 Measurement
S 分享 Sharing

DevOps Five Stages

  1. 规范化技术栈
  2. 推进标准化 & 降低不一致性因素
  3. 扩展DevOps实践,开始从一个团队,再到第二个第三个,最后到整个公司
  4. 自动化基础框架交付(PaaS平台)
  5. 提供自服务能力(自定义编排)

DevOps三步落地法

  1. 基于价值流的自动化持续交付,有六个实践,分别是:可视化、限制在制品、减少规模、减少交接数量、持续识别和拓展约束,以及在价值流中消除浪费。
    • 每种架构一套标准化流水线
      gitlab / jenkins / nexus / ansible
    • Kanban 或 Sprint计划板实现可视化工作,价值流交付可视化
  2. 快速反馈,PaaS监控、应用监控
    prometheus / grafana
    持续反馈,交付之前快速反馈
    jmeter / redmood / senium
  3. DevOps度量
    Hygieia

Docker

跨主机网络

  1. 大二层网络
    vxlan, flannel
    Mac in UDP
  2. 三层路由
    calico
    必须有三层路由转发能力设备支持

流水线反模式

Docker镜像多次构建,不做升级

问题:你发布的并不是你测试的
解决:一次构建,多次升级
镜像仓库

缺乏质量关卡

Docker镜像不进行安全漏洞扫描

问题:

  1. 30%镜像包含已知漏洞
  2. 14% npm package 包含已知漏洞
  3. 59% maven已知漏洞未修复

解决:DevSecOps
DevSecOps

工具碎片化

问题: 缺少可追溯性,定位问题难
解决:流水线全系统记录,静态扫描结果、测试阶段
全系统记录

交付物或部署文件无版本化

问题:

  1. 部署回滚流程缺少规范及标准,管理复杂,易出错
  2. 可读性差,易出错,风险高
  3. 历史链混乱,追溯性差,定位问题难
    解决:
    Helm——Kubernetes官方包管理工具
    配置与应用分离

持续交付流水线设计

持续交付流水线设计

基础镜像也会有单独的流水线、并且会漏洞扫描、做测试,并将它放在公共生产镜像仓库

微服务

痛点

  1. 开发语言、运行环境多

  2. 应用部署、管理难

  3. 依赖关系复杂、服务治理

  4. 配置管理

    解决

  5. 容器

  6. 容器编排

  7. Istio服务网格

  8. ConfigMap & Secret

容器云优势

  1. 打包运行环境
  2. 集群管理,扩容伸缩
  3. 集群管理,扩容伸缩
  4. 降低运维成本
  5. 降低运维成本
  6. DevOps(20%)

使用Pod

  1. 方便管理
  2. 资源共享和通信
  3. 灵活

安全

configmap或者secret在应用启动前注入环境变量,然后在应用启动后,将环境变量去掉。

Kubernetes最佳实践

  • 配置与应用分离
  • 计算与存储分离
  • 服务透明访问
  • 善用调度特性

Kubernetes添加节点前Token忘了怎么办?
两种办法,1:找回;2:生成新的加入命令

  1. 找回忘记的Token
    1
    2
    3
    4
    5
    6
    7
    8
    [root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    cda2299d203e26b6499e8283937ffbb6489421ff761569fdf8172d03d9a889d6

    [root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# kubeadm token list
    TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
    qyg3si.njhyhixcqd18by2g 23h 2019-07-27T15:13:15+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token

    [root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# #kubeadm join 172.17.3.226:6443 --token qyg3si.njhyhixcqd18by2g --discovery-token-ca-cert-hash sha256:cda2299d203e26b6499e8283937ffbb6489421ff761569fdf8172d03d9a889d6
  2. 生成新的命令
    1
    [root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# kubeadm token create --print-join-command

    Helm