文章 89
评论 0
浏览 463665
Service

Service

一、kubernetes的服务调用 服务的访问分为俩种形式分别是服务之间的调用(南北流量),用户流量的访问(东西流量),k8s中提供的南北流量的解决方法是使用service,东西流量的解决方案是ingress。当然这里只介绍service。 传统架构的南北流量架构图 k8s中使用service的南北流量 Service架构 二、Service资源介绍 Service主要用于Pod之间的通信,由于Pod是一种临时资源可能随时会被调度重建,重建后Pod的IP地址也会进行变化,由于Pod的IP地址不确定性,我们无法使用Pod的IP地址来进行服务的访问,所以k8s中加入了一个service资源用来解决Pod的访问。Service一般会通过选择器选择一个或一组Pod,之后通过iptables或者ipvs的方式进行代理,service的请求会被转发到自己所代理的Pod。service资源创建后只要不进行修改他的IP地址就不会变化相对来说他的IP地址是固定的,k8s中还引用了dns组件用来解析service资源的名称得到他的IP地址,所以集群中访问service,可以直接通过service的名....

HPA

HPA

Horizontal Pod Autoscaler(HAP),是一个Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。 Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性地调整副本控制器或 Deployment 中的副本数量,以使得类似 Pod 平均 CPU 利用率、平均内存利用率这类观测到的度量值与用户所设定的目标值匹配。 一、HAP自动扩缩容 HAP的api版本有三个分别是: HPA v1为稳定版自动水平伸缩,只支持CPU指标,需要安装metrics-server V2为beta版本,分为v2beta1(支持CPU、内存和自定义指标) v2beta2(支持CPU、内存、自定义....

Label与Selector

Label与Selector

Label:对k8s中各种资源进行分类、分组,添加一个具有特别属性的一个标签。 Selector:通过一个过滤的语法进行查找到对应标签的资源 一、Label & Selector 官方文档:https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/ 当Kubernetes对系统的任何API对象如Pod和节点进行“分组”时,会对其添加Label(key=value形式的“键-值对”)用以精准地选择对应的API对象。而Selector(标签选择器)则是针对匹配对象的查询方法。注:键-值对就是key-value pair。 例如,常用的标签tier可用于区分容器的属性,如frontend、backend;或者一个release_track用于区分容器的环境,如canary、production等。 1.1 Label的介绍 label可以给k8s中大多数资源进行标签的定义,主要作用为用于指定对用户有意义且相关的对象的标识属性,但并不对资源工作参数任何影响。 标签是键值对。有效的标签键有两个段....

kubernetes之kubeadm安装1.25.+版本

kubernetes之kubeadm安装1.25.+版本

一、基础环境准备 集群规划信息: 主机名称IP地址说明 master01192.168.10.51master节点 master02192.168.10.52master节点 master03192.168.10.53master节点 node01192.168.10.54node节点 node02192.168.10.55node节点 master-lb127.0.0.1:16443nginx组件监听地址 说明: master节点为3台实现高可用,并且通过nginx进行代理master流量实现高可用,master也安装node组件。 node节点为2台 nginx在所有节点安装,监听127.0.0.1:16443端口 系统使用centos7.X 1.1 基础环境配置 1.所有节点配置hosts cat >>/etc/hosts<<EOF 192.168.10.11 master01 192.168.10.12 master02 192.168.10.13 master03 192.168.10.14 node01 192.168.10.15 n....

kubernetes之控制器资源

kubernetes之控制器资源

一、 RC&RS Replication Controller(复制控制器,RC)和ReplicaSet(复制集,RS)是两种简单部署Pod的方式。因为在生产环境中,主要使用更高级的Deployment等方式进行Pod的管理和部署,这俩个控制器一般很少使用。 1.1 Replication Controller 官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/replicationcontroller/ Replication Controller(简称RC)可确保Pod副本数达到期望值,也就是RC定义的数量。换句话说,Replication Controller可确保一个Pod或一组同类Pod总是可用。 如果存在的Pod大于设定的值,则Replication Controller将终止额外的Pod。如果太小,Replication Controller将启动更多的Pod用于保证达到期望值。与手动创建Pod不同的是,用Replication Controller维护的Pod在失败、删除或终止时会....

kubernetes之Pod资源

kubernetes之Pod资源

一、Pod介绍 官方文档:https://kubernetes.io/zh/docs/concepts/workloads/pods/ Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。 Pod在生产环境中基本不单独使用,一般都是配合控制器来使用 Pod结构图 二、Pod示例文件 yaml演示文件 apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: pod # 必选,符合RFC 1035规范的Pod名称 namespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace labels: # 可选,标签选择器,一般用于过滤和区分Pod app: pod #可以写多个 annotations: #可选,注释列表,可以写多个 a....

kubernetes基础概念

kubernetes基础概念

一、kubernetes基础 Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。 有了docker为什么还需要使用kubernetes 在真正的业务场景中一般会部署大量的业务容器,而直接使用裸容器的方式来管理业务容器环境是比较吃力的,但是也有一些其他工具提供了docker单机编排的功能如docker-compose,并且在某些程序需要使用多个副本来实现高可用或增加负载节点时docker也无法直接提供支持而kubernetes可以使用控制器来实现容器的多个副本以及一些更高级的功能。并且在某些业务容器运行过程当中会出现一些假死的状态,需要请求健康检查接口来判断容器是否存活的场景时dockers也无法提供支持而kubernetes中可以直接使用探针进行监控检测。kubernetes会极大的减少运维人员的工作量。 集群架构如下 集群架构说明 kubernetes分为master节点与node节点是一个主从架构,master节点是整个集群的管理控制中是不建议运....

使用systemd运行docker容器

使用systemd运行docker容器

一、systemd文件介绍 系统启动和服务器守护进程管理器, 负责在系统启动或运行时,激活系统资源,服务器进程和其它进程 service文件通常由三部分组成 [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等 [Service]:与特定类型相关的专用选项;此处为Service类型 [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项 Unit介绍 Description:描述信息,可以自己定义 After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反 Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活 Service介绍 Type:服务的类型,常用的有 simple(默认类型) 和 forking。默认的 simple 类型可以适应于绝大多数的场景,因此一般可以忽略这个参数的配置。而如果服务程序启动后会通过 fork 系统调用创建子进程,然....

sshfs文件共享工具

sshfs文件共享工具

在需要简单的文件共享的环境中,可以快速的实现文件共享,使用完成后直接卸载即可,基于ssh实现数据传输。性能比较低不建议长期使用,适合在数据备份时临时挂载使用。 sshfs安装 SSHFS是基于Linux的软件,需要安装在本地计算机上。在基于Ubuntu和Debian的系统上,它可以通过apt-get安装。centos可以通过yum安装 yum install sshfs sshfs命令介绍 [root@es-node3 sshfs]# sshfs -h usage: sshfs [user@]host:[dir] mountpoint [options] 主要的参数: -o uid=N 设置文件挂载的uid,也就是映射到本地的文件uid -o gid=N 设置文件挂载的gid -o allow_other 允许其他用户访问 -o port=PORT ssh访问端口 常见的使用方式 #临时挂载 sshfs -o allow_other,uid=997,gid=996 root@192.168.6.3:/root/test1 /root/1/ #卸载 umount /root/1

harbor使用s3对象存储

harbor使用s3对象存储

默认情况下,harbor使用本地存储进行注册,但您可以可选地配置设置,以便harbor使用外部存储。有关如何为不同的存储提供商配置注册表的存储后端的信息,请参阅 Docker 文档中的配置参考https://docs.docker.com/registry/configuration/#storage。 我这里使用s3对象存储作为harbor镜像仓库存放镜像的位置。使用的s3对象存储为minio,当然也可以使用其他s3对象存储。 docker官方的配置示例如下 s3: accesskey: awsaccesskey #s3对象存储认证信息 secretkey: awssecretkey region: us-west-1 #区域,正常自己搭建的对象存储服务默认为us-west-1,但是如果使用第三方厂商的s3对象存储需要根据实际情况配置 regionendpoint: http://myobjects.local #对象存储访问url bucket: bucketname #存储桶名称 encrypt: true #您是否希望在服务器端加密您的数据 (如果未指定,则默认为 false)....

Minio对象存储服务

Minio对象存储服务

一、minio对象存储基础 1.1 基础概念 MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API。 使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。 独立的 MinIO 服务器最适合早期开发和评估。 某些功能,例如版本控制、对象锁定和存储桶复制需要使用擦除编码分布式部署 MinIO。 对于扩展的开发和生产,请在启用擦除编码的情况下部署 MinIO , 每个 MinIO 服务器最少4个驱动器。 1.2 Minio纠删码 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 默认配置即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。 纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下....

对象存储压力性能测试工具

对象存储压力性能测试工具

一、Cosbench工具 cosbench是intel开源的针对对象存储开发的测试工具 二、Cosbench安装 运行环境:centos7 依赖软件:JDK nmap-ncat 2.1 单台压测服务器部署 #安装依赖 [16:52:30 root@centos7 ~]#yum install java nmap-ncat #下载cosbench工具压缩包 [16:58:41 root@centos7 ~]#ls 0.4.2.c4 0.4.2.c4.zip [16:59:00 root@centos7 ~]#unzip 0.4.2.c4.zip #删除http_proxy环境变量 [17:00:04 root@centos7 ~]#unset http_proxy #启动cosbench [17:02:09 root@centos7 0.4.2.c4]#bash ./start-all.sh 2.2 多台测试客户端部署 #配置多个driver [17:05:07 root@centos7 0.4.2.c4]#cat conf/controller.conf [controller] d....

minio性能测试

minio性能测试

压测参数说明 压测数据量为:2个backet,每个backet为10000对象。每个对象大小512kb 所有minio服务内核以及资源优化都相同 整体读写压测时间为10分,读写比例为读写各占百分之50 一共4台压测客户端,每个客户端4个读写进程,整体16个读写线程。 所有测试都经过多次验证 #所有服务器内核优化 https://gitlab.gridsum.com/TechnologySharingCenter/back-end/research/-/issues/18#%E8%84%9A%E6%9C%AC minio服务器数据磁盘性能 多次测试 一、单机测试数据 1.1 单机单个数据盘 单块数据盘并不实现纠删码功能,即数据盘故障minio就无法正常工作,数据存储空间比例为1:1 minio服务器规格4C 16G 操作类型操作数操作产生的数据操作的平均时间吞吐量速率 read154.74kops79.23G11.41ms258.24op/s132.22MB/s write155.01kops79.36G43.12ms258.69op/s132.45MB/s 内存使....

线上rpm包下载本地

线上rpm包下载本地

通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线 rpm 包安装。 一、工具准备 安装yum-utils 这个软件包中有许多关于rpm包的工具 repotrack(全量下载一个软件的依赖包) yumdownloader(下载软件的依赖包,如果本机已经安装不下载) reposync(下载一个yum仓库中所有包) yum -y install yum-utils 安装createrepo 这个软件可以利用目录中的rpm包生成一个repodata目录 二、实现步骤 [11:14:13 root@centos7 ~]#mkdir ansible [11:14:43 root@centos7 ~]#cd ansible #下载ansible所有依赖包 [11:14:25 root@centos7 ansible]#repotrack ansible #查看 [11:15:26 root@centos7 ansible]#ls | wc -l 88 #生成repodata元数据信....

linux系统防止某个进程被OOM

linux系统防止某个进程被OOM

内存不足:OOM OOM 即 Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死, 在日志messages中看到类似下面的提示 Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child 当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理)。 原因: 给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。 应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。 使用的解决办法: 1,限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用2,给系统增加swap空间 设置内核参数(不推荐),不允许内存申请过量: echo 2 > /proc/sys/vm/overcommit_memory echo 80 > /proc/s....

docker镜像上传下载脚本

docker镜像上传下载脚本

一、镜像下载以及替换tag list=`cat $1` #修改后的镜像仓库 Registry='harbor.zhangzhuo.org/base/' echo > images-save.txt echo > images-name.txt for var in $list;do #取镜像名称及tag tmp=${var##*/} #取镜像仓库url repo=${var%/*} #取镜像名称 project=${tmp%%:*} #取镜像tag tag=${tmp##*:} #修改原本镜像仓库url地址为新的的仓库url地址 eval new_image_url=${Registry}${tmp} #拉取镜像 docker pull ${var} #修改镜像tag docker tag ${var} ${new_image_url} #导出镜像 docker save ${new_image_url} -o ${project}-${tag}.tar.gz #记录导出的文件名称 echo ${project}-${tag}.tar.gz >> images-....

Prometheus监控服务

Prometheus监控服务

一、Prometheus简介 官方网站:https://prometheus.io/docs/ github地址:https://github.com/prometheus Prometheus是基于go语言开发的一套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统, Prometheus于2016年加入CNCF(Cloud Native Computing Foundation,云原生计算基金会),是CNCF继kubernetes 之后毕业的第二个项目,prometheus在容器和微服务领域中得到了广泛的应用,其特点主要如下: 1.使用key-value的多维度格式保存数据 2.数据不使用MySQL这样的传统数据库,而是使用时序数据库,目前是使用的TSDB 3.支持第三方dashboard实现更高的图形界面,如grafana(Grafana 2.5.0版本及以上) 4.功能组件化 5.不需要依赖存储,数据可以本地保存也可以远程保存 6.服务自动化发现 7.强大的数据查询语句功(PromQL,Prometheus Query Language) ....

Jenkins代码升级脚本示例

Jenkins代码升级脚本示例

[20:57:03 root@jenkins jenkins]#cat web1.sh #!/bin/bash DATE=`date +"%Y-%m-%d_%H-%M-%S"` GROUP="$1" BRANCH="$2" IP_list(){ if [ ${GROUP} == "GROUP1" ];then HOST_IP='192.168.10.183' echo "${HOST_IP}" elif [ ${GROUP} == "GROUP2" ];then HOST_IP='192.168.10.184' echo "${HOST_IP}" elif [ ${GROUP} == "GROUP3" ];then HOST_IP='192.168.10.183 192.168.10.184' echo "${HOST_IP}" fi } clone_code(){ echo "即将开始从clone ${BRANCH}分支代码" cd /data/jenkins/git && rm -rf * && git clone -b ${BRANCH} git@....

ELK日志系统

ELK日志系统

什么是ELK? 通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的 一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个: 处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能 配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百 亿级数据的查询秒级响应。 集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展 前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单 什么是 Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供 API....

消息队列与微服务

消息队列与微服务

一、MQ(Message queuing) Message Queue 的需求由来已久,在 19 世纪 80 年代金融交易中,美国高盛等公司采用Teknekron 公司的产品,当时的 Message queuing 软件叫做(the information bus(TIB),后来TIB被电信和通讯等公司采用,然后路透社收购了Teknekron 公司,再然后IBM公司开发了MQSeries,并且微软也开发了 Microsoft Message Queue(MSMQ),但是这些商业 MQ 供应商的问题是厂商锁定及使用价格高昂, 于是 2001 年,Java Message queuing 试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了,于是 2004 年,摩根大通和 iMatrix 开始着手 Advanced Message Queuing Protocol (AMQP)开放标准的开发,2006 年,AMQP 规范发布,2007 年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。 MQ 定义 消息队列的目的是为了实现各个 APP 之间的通讯,AP....

生而为人