Ceph分布式存储
Ceph概述
Ceph介绍
Ceph是一个开源的分布式存储系统,具有高扩展性、高性能、高可靠性等特点,提 供良好的性能、可靠性和可扩展性。支持对象存储、块存储和文件系统。 是目前为云平台提供存储的理想方案
Ceph架构
RBD(RADOS Block Device):块存储接口
RGW(RADOS Gateway)):对象存储网关,接口与S3和Swift兼容
CephFS(Ceph File System):文件级存储接口
RADOS(Reliable Autonomic Distributed Object Store):抽象的 对象存储集群,Ceph核心,实现用户数据分配、故障转移等集群操作
MON:集群状态维护,例如OSD是否健康、PG状态等
MDS (Metadata Server) :CephFS服务依赖的元数据服务
OSD(Object Storage Daemon):对象存储设备,主要存储数据
Ceph核心概念
Pool:存储池,是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本 分布策略;支持两种类型:副本(replicated ...
K8s集群网络下
K8s网络组件之Calico
Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。 Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发, 而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。 此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。
实际上,Calico项目提供的网络解决方案,与Flannel的host-gw模式几乎一样。也就是说,Calico也是基于 路由表实现容器数据包转发,但不同于Flannel使用flanneld进程来维护路由信息的做法,而Calico项目使用 BGP协议来自动维护整个集群的路由信息。
BGP英文全称是Border Gateway Protocol,即边界网关协议,它是一种自治系统间的动态路由发现协议, 与其他 BGP 系统交换网络可达信息。
K8s网络组件之Calico:BGP介绍
在这个图中,有两个自治系 ...
K8s集群网络上
服务器网络架构
路由器:网络出口
核心层:主要完成数据高效转发、链路备份等
汇聚层:网络策略、安全、工作站交换机的接 入、VLAN之间通信等功能
接入层:工作站的接入
交换技术
交换机工作在OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线 交换矩阵,在同一时间可进行多个端口对之间的数据传输。
交换技术分为2层和3层:
2层:主要用于小型局域网,仅支持在数据链路层转发数据,对工作站接入。
3层:三层交换技术诞生,最初是为了解决广播域的问题,多年发展,三层交换机已经 成为构建中大型网络的主要力量
广播域
交换机在转发数据时会先进行广播,这个广播可以发送的区域就是一个广播域。交换机之间对广播帧是透明的,所以 交换机之间组成的网络是一个广播域。路由器的一个接口下的网络是一个广播域,所以路由器可以隔离广播域。
ARP(地址解析协议)
发送这个广播帧是由ARP协议实现,ARP是通过IP地址获取物理地址的一个TCP/IP协议。
三层交换机
前面讲的二层交换机只工作在数据链路层,路由器则工作在网络层。而功能强大的三层交换机可同时工作在数据链路 层 ...
kubernetes应用包管理器helm下
Chart模板:函数与管道
常用函数:
quote:将值转换为字符串,即加双引号
default:设置默认值,如果获取的值为空则为默认值
indent和nindent:缩进字符串
toYaml:引用一块YAML内容
其他函数:upper、title等
upper: 将值修改为大写
title: 将值首字母修改为大写
quote:将值转换为字符串,即加双引号
示例:nodeSelector标签的值用了true正常使用会报错,这是因为它是关键字,需要加引号才可以。
#vi mychart/values.yaml replicaCount: 1image: repository: nginx tag: "latest"selectorLabels: "nginx"nodeSelector: gpu: true
#vi mychart/templates/deploy.yaml apiVersion: apps/v1kind: Deploymentmetadata: labels: ...
kubernetes应用包管理器helm上
为什么需要Helm
由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应 用维护和更新等面临诸多的挑战,主要面临以下问题:
如何将这些服务作为一个整体管理?
这些资源文件如何高效复用?
不支持应用级别的版本管理
Helm介绍
Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前 打包好的yaml文件部署到kubernetes上。
Helm有3个重要概念:
helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在 k8s中创建出真实运行的资源对象。
Helm目前有两个大版本:v2和v3
2019年11月Helm团队发布v3版本,相比v2版本最 大变化是将Tiller删除,并大部分代码重构。
Helm客户端
使用helm很简单,你只需要下载一个二进 ...
Kubernetes 弹性伸缩
弹性伸缩概述
从传统意义上,弹性伸缩主要解决的问题是容量规划与实际负载的矛盾。
蓝色水位线表示集群资源容量随着负载的增加不断扩容,红色曲线表示集群资源实际负载变化。
弹性伸缩就是要解决当实际负载增大,而集群资源容量没来得及反应的问题。
Kubernetes弹性伸缩布局
在Kubernetes平台中,资源分为两个维度:
Node级别:K8s将多台服务器抽象一个集群资源池,每个Node提供这些资源
Pod级别:Pod是K8s最小部署单元,运行实际的应用程序,使用request和limit为Pod配额
因此,K8s实现弹性伸缩也是这两个级别,当Node资源充裕情况下,Pod可任意弹性,当不足情况下需要弹性增加节 点来扩容资源池。
针对Pod负载:当Pod资源不足时,使用HPA(Horizontal Pod Autoscaler)自动增加Pod副本数量
针对Node负载:当集群资源池不足时,使用CA(Cluster Autoscaler)自动增加Node
Node自动扩容/缩容
Node弹性伸缩有两种方案:
Cluster Autoscaler:是一个自动调整Kubernete ...
kubernetes运维管理
Kubernetes 容器云平台技术方案
Kubernetes 容器云平台技术方案:存储
Ceph是一个高性能的分布式存储系统,提供对象存 储、块存储和文件存储功能,可存储海量数据。 角色:Pod数据持久化存储
Kubernetes 容器云平台技术方案:网络
Calico是一个纯三层的数据中心网络方案,Calico支 持广泛的平台,包括Kubernetes、OpenStack等。 Calico 在每一个计算节点利用 Linux Kernel 实现了 一个高效的虚拟路由器( vRouter) 来负责数据转发, 而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。 此外,Calico 项目还实现了 Kubernetes 网络策略, 提供ACL功能。
Kubernetes 容器云平台技术方案:监控
Prometheus是SoundCloud开源的一款监控 系统。它的实现参考了Google内部的监控系 统,并支持在Kubernetes自动发现被监控端。 是目前Kubernetes监控首选方案。
Pod
kubele ...
基于Jenkins构建持续集成(CI)平台
发布流程
使用 Gitlab 作为代码仓库 & 使用 Harbor 作为镜像仓库
1.部署gitlab
mkdir gitlabcd gitlabdocker run -d \ --name gitlab \ -p 8443:443 \ -p 9999:80 \ -p 9998:22 \ -v $PWD/config:/etc/gitlab \ -v $PWD/logs:/var/log/gitlab \ -v $PWD/data:/var/opt/gitlab \ -v /etc/localtime:/etc/localtime \ --restart=always \ lizhenliang/gitlab-ce-zh:latest
访问地址:http://IP:9999
初次会先设置管理员密码 ,然后登陆,默认管理员用户名root,密码就是刚设置的。
创建项目,提交测试代码
进入后先创建项目,提交代码,以便后面测试。
unzip tomcat-java-demo-master.zipcd tomcat-java-demo-mastergit initg ...
ELK Stack收集Kubernetes应用日志
需求背景
业务发展越来越庞大,服务器越来越多
各种访问日志、应用日志、错误日志量越来越多
开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
运维需实时关注业务访问情况
容器特性给日志采集带来的难度
容器特性给日志采集带来的难度:
K8s弹性伸缩性:导致不能预先确定采集的目标
容器隔离性:容器的文件系统与宿主机是隔离,导致 日志采集器读取日志文件受阻
日志按体现方式分类
应用程序日志记录体现方式分为两类:
标准输出:输出到控制台,使用kubectl logs可以看到
日志文件:写到容器的文件系统的文件
示例:标准输出
kubectl run nginx --image=nginx kubectl get pod -o widecurl -I 10.244.36.65kubectl exec -it nginx -- bash
日志文件在宿主机上的路径
kubectl get pod -o wide #查看pod所在节点
#采集所有容器的日志/var/lib/docker/containers/*/*-json.log
...
Prometheus+Grafana监控Kubernetes
Prometheus 介绍
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目, 拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基 金会(CNCF),成为继Kubernetes之后的第二个托管项目。
https://prometheus.io/
https://github.com/prometheus
Prometheus组件与架构
Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
ClientLibrary:客户端库
Push Gateway:短期存储指标数据。主要用于临时性的任务
Exporters:采集已有的第三方服务监控指标并暴露metrics
Alertmanager:告警
Web UI:简单的Web控制台
Prometheus基本使用:怎么来监控?
如果要想监控,前提是能获取被监控端指标数据,并且这个 数据格式必须遵循Prometheus数据模型,这样才能识别和 采集,一般使用exporter提 ...