云原生实战
Docker
容器化相比虚拟化
同一标准
应用无论什么语言同一构建成镜像
镜像分享仓库
容器化时代
- 虚拟化技术
- 容器化技术
资源隔离
- 资源隔离
- 访问设备隔离
- 网络隔离
- 用户隔离
docker架构
操作
镜像操作
- docker hub仓库
容器操作
外部操作
内部操作
- 看镜像仓库官网
打包镜像变化
- docker commit
镜像保存
- docker save
- 保存为压缩包文件
镜像加载
- docker load
- 读取压缩包为镜像
镜像推送
- login:登录仓库
- tag:改名,带上自己的仓库名
- push:推送镜像
挂载
- 保证外部有配置文件
- 提前cp出来文件
其他命令
docker logs 容器
- 容器日志
docker cp
- 容器复制到本地
- 本地复制到容器
构建应用
以前
- springboot打包
- jar包上传服务器(环境)
- 运行jar包
现在
打包镜像,启动即用
编写docker file(如何打包)
from:基础镜像
- 运行环境
label:作者
copy:把jar包复制到容器中位置
entrypoint:启动命令
- java -jar xx
上传到linux运行打包
- docker file + jar包
- docker build
- tag:镜像名
- 当前目录工作
启动容器应用
docker logs xx 查看日志
应用分享与启动
- tag
- push
- pull
k8s
组织架构
k8s集群部署
- 三个服务器
- 安装docker容器环境
- k8s
- kubelet、kubeadm、kubectl
- kubeadm启动集群
- master
- worker
- dashboard页面
核心实战
namespace
- 隔离资源
pod
一组容器
创建pod
- 命令行
- 配置文件
- apply -f
pod网络ip
- 集群内公共访问
多容器pod
- 共享pod网络
- 端口不同即可部署多个相同应用
deployment部署
控制pod
- 自愈
- 多副本
扩缩容
自愈&故障转移
阈值设置
滚动更新
- set新镜像自动滚动更新
- 不停机更新
版本回退
- rollout
- history
- 查看历史部署
- undo
- 回退
- history
- rollout
工作负载:控制pod
- 有状态、无状态
- 守护进程
- 任务等
服务网格
service
- 暴露:将一组pod公开为网络服务
- 自带负载均衡
- 集群内ip、域名访问
- 服务暴露
- clusterIP
- 只能集群内访问
- NodePort
- 集群外也可以访问(每个节点)
- 随机分配端口(3万以上)
- nodeport——targetport——containerport
- clusterIP
ingress
集群统一网关入口
ingress网络模型
- 底层nginx
- ingress接收请求转发到不同service
- 每个模块服务抽取为service
- service层网络
- 每个模块服务抽取为service
路径重写
限流
网络模型总结
- pod层,组合容器
- service层,负载均衡pod
- ingress层,路由service
存储抽象
数据挂载层同一管理为存储层
多种存储框架
NFS
client节点同步server节点数据
搭建NFS环境
deploy数据卷挂载
原生方式
- 创建文件夹
- 配置deploy文件
PV与PVC
PV持久卷:指定保存位置
PVC持久卷规格声明:容量等
pvc配置文件
configmap抽取配置
configmap便于镜像和配置文件的解耦
编写配置文件,创建为配置集
- 保存在etcd
启动pod,配置文件挂载configmap
secret秘钥令牌
创建serect
base64编码
- docker仓库第三方需解密
- 可破解
小结
- deployment
- 其他工作负载
- pod
- service
- ingress
- pvc
- configmap
- serect
kubeSphere
kubesphere
简介
- 可视化界面
- 多租户
- 多k8s集群管理
- CI/CD
- 微服务治理:服务网格
- 应用管理
安装
k8s安装
- 默认存储类型nfs
- metrics-server
- 全功能安装
linux安装
单节点一键安装
- kubekey
多节点安装
- kubekey
多租户管理
中间件部署
手动部署
- 依据docker hub文档
- configmap
- pvc
- 部署工作负载
- 镜像、资源、端口
- 环境变量、配置、挂载文件
- 部署服务
- 暴露
- 集群内部通过域名访问(自动)
- 集群外部
- 指定工作负载,集群外访问
- 暴露
直接部署应用(从应用商店)
- 要自己打开clusterConfiguration
应用仓库
- helm-k8s包管理仓库
- 添加应用仓库
应用部署cloud
数据层
微服务治理层
微服务层
- 制作镜像
- docker file
- maven打包
- 推送镜像
- 阿里云镜像仓库
- 应用部署
- 制作镜像
前端层
基础镜像nginx
构建镜像
部署
存活检查:探针
devops
敏捷开发
全链路自动化
cloud应用上云
中间件层
- 手动构建服务
微服务层
- 生产环境配置抽取
- nacos配置中心
- 域名地址配置中间件
流水线
流水线模板
第一步-拉取代码
第二步-项目编译
- 配置maven阿里云镜像
- 修改ks-devops-agent配置
- 配置maven阿里云镜像
第三步-构建镜像
基础操作
并发构建
第四步-推送镜像
基础操作
- 镜像仓库凭证
并发推送
第五步-部署到dev环境
微服务准备deploy.yaml部署文件
镜像凭证
- 阿里云仓库密钥
并行部署
就绪探针
第六步-系统邮件
前端项目
流水线
- 基础环境nodejs
- 拉取代码
- 项目安装依赖、编译
- 构建镜像
- docker file
推送镜像
部署到dev环境
- deploy.yaml
发送确认邮件
部署nust-site前端项目
基于nust服务端渲染
打包镜像
可以请求一切走集群内网(服务端渲染)
webhook自动启动流水线
写完代码提交
给指定地方发请求
流水线自动运行
创建webhook:gitee配置
kubekey、devops深入、应用管理、服务网格istio、k8s可观测性、kubevirt
kubekey运维高可用集群
Kubekey介绍
- kubeadm、kops、kubespray方式
- 容器环境、管理证书
- apiserver负载均衡器
- etcd等
- kubekey方式
- 部署k8s、k3s
- kubeadm、kops、kubespray方式
部署高可用k8s集群
外部负载均衡
内部负载均衡
kubekey部署高可用集群
kubekey集群配置文件
- hosts:ip、user
k8s增删集群节点
集群证书管理
kubesphere启用可插拔组件
节点管理
devops深入
devops元素周期表
devops流程
devops生命周期
devops流水线
质量扫描&单元测试&制品管理
自动部署构建
devops自动部署
source to images 发布应用
- 无需dockerfile
- 通过github代码地址
binary to image发布应用
- 通过jar包
Jenkinsfile部署流水线
kubesphere备份与恢复
- 多节点模式
- master节点启停
- woker节点启停
- 集群启停
云原生应用管理
- 调试应用
- 应用调度
- helm
- helm及应用仓库
- 开发helm
- k8s应用声明周期
- 应用仓库管理
- 应用管理场景
kubernetes federation
服务网格架构
微服务
微服务框架挑战
- 过于绑定技术栈
- 多语言受限
- 代码侵入度过高
架构
side car
服务网格
- 一组轻量级网络代理实现
istio
架构
安装部署
测试项目部署
isito核心概念
- 虚拟服务
- 目标规则
kubesphere启用服务治理
启用istio
创建服务
服务治理
链路追踪
流量监控
灰度发布
金丝雀发布
- 流量手动分配
达到足够上线条件
- 接管
k8s可观测性
- 日志系统
- 日志安装
- kubesphere可插拔式安装
- cluster configuration
- logging
- 集合fluent bit
- logging
日志查看
容器日志查询
日志检索与落盘日志收集
- 开启日志收集
- 创建工作负载
- alpine镜像
- 启动命令
- 挂载pvc
- alpine镜像
常见问题
- 存储外部es,关闭内部es
- 日志保留日期
监控与预警
Prometheus
安装node explorer
promQL
告警处理
- 告警规则
operator
- 控制中心
kubesphere监控
- 基于Prometheus
费率统计
kubevirt虚拟机管理
虚拟化技术
kubevirt
KSV平台
CKA、CKS