自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 收藏
  • 关注

原创 基于Prometheus自定义指标对k8s集群的容器扩缩容

前面分别对基于云原生k8s自身的hpa和基于阿里云ack集群上的hpa进行了讲解,但同时也有以自身的不足:1、k8s原生的hpa只能满足硬件资源的需求,并不能对于业务的一些指标做很多的扩容。2、阿里云ack集群通过集成阿里云厂商自研的插件可以很好的满足业务指标的获取,但是对于没有上云的公司来说也是一个痛点问题。因为我们可以通过开源的prometheus-adapter可以解决这个问题。文章目录前置条件:背景:实现原理:操作:step1:helm部署(helm3版本)1)编写values文件2)部署p

2022-04-24 23:17:54 380

原创 在k8s集群中以svc的方式访问oss

在k8s集群中以svc的方式访问oss背景需求前置条件原理及说明原理:说明:部署文件结构部署操作step1:编写oss_auth.lua文件,用于nginx中调用该文件step2:编写nginx的主配置文件step3:编写nginx主配置文件的secret文件,需要将nginx.conf以secert的方式挂载到容器中step4:编写oss_auth.lua的comfigmap文件,需要将oss_auth.lua以comfigmap的方式挂载到容器中step5:编写部署服务的文件step6:编写部署服务的s

2022-04-07 22:52:10 3874

原创 基于hostpath的k8s pod日志持久化

前置条件:考虑到pod的多副本,但同时需要将日志集中收集起来,所以采用hostpath的方式将同一个服务的多pod的日志持久化到一起,日志穿插性的写在一个文件中。由于pod重启会打散分配到不同节点上,所以基于nfs的网络文件系统通过共享目录的方式挂载到客户端节点(nfs-server:/mnt/hostpath; nfs-client: /mnt/hostpath,将nfs-server的/mnt/hostpath挂载到nfs-client的/mnt/hostpath下,从而达到同服务多pod可以写到

2021-11-19 22:17:53 2751 2

原创 基于python3实现对k8s服务的更新发布

前置条件1、已安装python32、k8s服务已发布3、将k8s集群的认证配置文件拷贝到当前目录下实现方法cat k8s_svc_deploy.py#!/usr/bin/env python3# Description:update k8s service# Author: wangkximport sysimport subprocessimport yamlimport os#前置条件,判断输入的参数是否满足脚本传参if len(sys.argv) != 5: pri

2021-10-29 21:25:44 298

原创 制作用于k8s集群中zookeeper3.6.3镜像(一)

这里写自定义目录标题背景需求分析镜像制作step1:下载zookeeper二进制安装包step2:编写zk配置脚本step3:编写zk服务的健康检查脚本step4:编写获取zk配置参数的脚本step5:编写dockerfile文件背景由于生产环境上使用的是zookeeper3.6.3集群,需要容器化部署。需求分析版本:zookeeper 3.6.3要求:数据持久化镜像制作step1:下载zookeeper二进制安装包wget http://www.apache.org/dist/zookee

2021-09-16 12:51:18 769

原创 以statefulset方式在k8s集群中部署zookeeper3.6.3集群(二)

本篇目录链接背景需求分析环境说明1 本文的操作环境为 Kubernetes v1.18.0 版本,使用docker的容器运行时,docker 和 Kubelet 采用的 cgroup 驱动为 systemd。2 采用的是动态存储的方式持久化zk集群的数据准备yaml文件step1:编写zk的配置文件step2:编写zk的pdb文件,保证集群最少可用的节点数step3:编写zk的svc文件step4:编写zk的sts文件step5:依次执行yaml文件背景目前我司已经将java程序以微服务的形式迁移到k8

2021-09-15 22:04:38 812

原创 k8s集群性能优化之kubelet配置资源预留

本篇目录链接疑问分析:解决思路:环境说明Kubelet Node Allocatable 介绍配置方式(基于yum安装)配置资源预留Eviction 与 OOM可分配约束疑问分析:在k8s集群中,默认情况下 Pod 能够使用节点全部可用容量,同样就会伴随一个新的问题,pod消耗的内存会挤占掉系统服务本身的资源,这就好比我们在宿主机上运行java服务一样,会出现java程序将宿主机上的资源(内存、cpu)耗尽,从而导致系统登陆不上或者卡顿现象。同理在k8s集群中也会出现类似的问题,从而也会导致一系列不可控

2021-09-14 22:09:38 2854

原创 通过EFK实现对k8s集群日志的采集

**参考:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-elasticsearch-fluentd-and-kibana-efk-logging-stack-on-kubernetes#step-2-%E2%80%94-creating-the-elasticsearch-statefulset**1. 概述和组件说明对于Kubernetes的日志采收集,目前官方现在比较推荐的日志收集解决方案是 Elasticse

2021-07-06 11:34:53 395

原创 elasticsearch数据备份迁移之snapshot

1、快照简介ES提供快照和恢复功能,我们可以在远程文件系统仓库(比如共享文件系统、S3、HDFS等)中单独给部分索引或者整个集群创建快照。这些快照对备份非常有用,它们能相对较快地被恢复。其优点如下:迁移速度快,适用数据量大的场景;需占用源集群磁盘空间,或者借助于对象存储,实现友商ES到腾讯云ES,或自建ES到腾讯云ES的数据迁移;存储类型有共享文件系统、AWS 的 S3存储、HDFS、微软 Azure的存储、Google Cloud 的存储。2、原es集群环境系统版本jdk版本ES

2020-12-02 18:04:46 868 3

原创 Linux进程管理工具Supervisor详解和实战

一、介绍Supervisor(http://supervisord.org)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。由于Supervisor是Python开发的,安装前先检查一下系统

2020-06-03 18:14:08 715

原创 ingress-nginx详解和部署方案

部署ingress-nginxingress介绍K8s集群对外暴露服务的方式目前只有三种:Loadblancer;Nodeport;ingress前两种熟悉起来比较快,而且使用起来也比较方便,在此就不进行介绍了。下面详细讲解下ingress这个服务,ingress由两部分组成:ingress controller:将新加入的Ingress转化成Nginx的配置文件并使之生效ingre......

2020-05-08 18:02:58 34401 16

原创 团队协作软件之confluence和jira的配套使用

接上一篇团队协作软件之confluence部署jira1)下载软件包下载地址wget https://downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-8.4.1.tar.gz也可以直接下载并安装二进制包,同confluence;这里专门区别于confluence的另外一种安装方法wget ...

2020-04-21 10:50:28 2776

原创 python3 中使用 kubernetes模版操纵k8s集群

本文介绍kubernetes模块在k8s集群中的使用,其实就是将对kube-apiserver的http访问封装成python可用的对象。

2022-07-16 17:52:24 1051

原创 基于Ingress实现灰度发布(金丝雀发布)和蓝绿发布

前面有科普过灰度发布,那么本章将通过一个案例来给大家展示下实现的过程细节。前置条件:1、k8s集群背景分析:灰度及蓝绿发布是为新版本服务创建一个与老版本服务完全一致的生产环境,在不影老版本服务的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。其中AB测试就是一种灰度发布方式,一部分用户继续使用老版本的服务,将一部分用户的流量切换到新版本,如果新版本运行稳定,则逐步将所有用户迁移到新版本。应用场景基于客户端请求的流量切

2022-07-16 11:56:01 1011

原创 flux在k8s集群中的应用

Flux是一个在git中可以自动明确集群状态和匹配配置的工具。它可以用在操作Kubernetes集群中来触发deployment,这就意味着你不再需要单独的CD工具。在此基础上(以及可配置的策略)它可以监控仓库、检测镜像、触发deployment以及更新所需的运行配置。好处就是你不需要授予集群的CI访问权,每一个更改都是原子的和事务性的,git已经有了审计日志。每个事务要么失败,要么成功。你完全以代码为中心,不需要新的基础设施。...

2022-07-16 11:37:31 401

原创 基于 keda事件驱动在Kubernete 集群上的弹性自动缩放应用

由于我们在文件中定义的promethues收集的服务的自定义指定是DubboRequestLatency,因此我们可以在根据PromQL语句在promethues的界面查询下当前的值是多少。kill掉模拟的cpu脚本,将cpu的使用率降下来,等待一会,结合阿里云界面,会发现pod进入缩容状态。由于达到设定的开始时间后,但是我们有配置服务的伸缩窗口,所以在等待60秒后,开始扩容。同样在到达设定的结束时间后,在等待伸缩窗口期(180秒)后,服务进行缩容,由于。,所以会恢复到最原始的副本数。...

2022-07-16 11:07:17 269

原创 基于k8s的HAP进行容器的水平伸缩

文章目录前置条件:操作:step1:创建nginx的deploymentstep2:创建hpastep3:模拟超载访问前置条件:1、阿里云ack集群操作:以nginx服务为例step1:创建nginx的deploymentcat nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginx labels: app: nginxspec: replicas: 1 selec

2022-04-24 22:53:50 103

原创 基于阿里云组件指标的容器水平伸缩

文章目录前置条件:操作:step1:创建nginx的deploymentstep2:创建hpastep3:查看ingress的相关指标step4:创建ingress路由step5:压测访问分析:前置条件:1、阿里云ack集群2、已配置安装好ingress的日志参考链接:https://help.aliyun.com/document_detail/151555.html操作:以nginx服务为例step1:创建nginx的deploymentcat nginx-deployment.yam

2022-04-24 22:47:52 2833

原创 基于k8s的HAP进行容器的水平伸缩

文章目录前置条件:操作:step1:创建nginx的deploymentstep2:创建hpastep3:模拟超载访问前置条件:1、阿里云ack集群操作:以nginx服务为例step1:创建nginx的deploymentcat nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginx labels: app: nginxspec: replicas: 1 selec

2022-04-24 22:35:18 2132

原创 docker多阶段构建及案例

背景说明:多阶段构建指在Dockerfile中使用多个FROM语句,每个FROM指令都可以使用不同的基础镜像,并且是一个独立的子构建阶段。使用多阶段构建打包Java应用具有构建安全、构建速度快、镜像文件体积小等优点。前置条件:1、提前安装好docker2、准备好代码多阶段构建优势针对Java这类的编译型语言,使用Dockerfile多阶段构建,具有以下优势:保证构建镜像的安全性当您使用Dockerfile多阶段构建镜像时,需要在第一阶段选择合适的编译时基础镜像,进行代码拷贝、项目依赖下载、.

2022-04-24 22:21:33 2434

原创 GitLab CI/CD 之 pipelibe-for-MultiProject-传参案例

本篇目录链接项目信息:项目说明:CI file:oneci ci file:helmfile ci file:效果展示:首先我们先将构建和部署分离开来,然后通过oneci中一次完成多个项目的biuld操作,待所有项目build的结束后,在oneci的最后一个阶段,去触发部署操作。后期可以通过判断条件的方式,设置卡点,从而做从流程审批到发布生产。项目信息:项目说明:流程思路:CI file:oneci ci file:image: docker:19.03.13variables:

2022-01-20 17:46:32 427

原创 GitLab CI/CD 之 pipelibe-for-MultiProject案例

本篇目录链接Multi-project pipelines介绍项目信息项目说明:ci file:oneci file:apache ci file:(其他项目类同)效果展示:Multi-project pipelines介绍Multi-project pipeline是指多个项目设置GitLab CI / CD,以便一个项目中的管道可以触发另一个项目中的管道;GitLab CI / CD 是一个功能强大的持续集成工具,不仅适用于每个项目,而且适用于具有多项目管道的项目;多项目管道对于需要跨项目相互

2022-01-20 17:37:23 447

原创 GitLab CI/CD 之 pipelinetrigger--通过trigger实现envsubst透传参数案例

本篇目录链接项目说明:流程思路:http项目:http-ci file:nginx项目:nginx-ci file:结果展示:项目说明:基于通过http项目去触发nginx项目流程思路:在http ci中定义VERSION变量,然后通过pipelinetriggeer传参,在以变量的方式传入到nginx项目中;然后通过envsubst将文件中的变量通过传进来的参数替换掉,然后实现构建操作。http项目:http-ci file:image: docker:19.03.13variabl

2022-01-20 17:28:01 2266

原创 GitLab CI/CD 之 pipeline通过envsubst透传参数案例

本篇目录链接项目信息:项目说明:nginx项目效果展示:envsubst介绍envsubst简单应用项目信息:项目说明:通过在ci文件中的定义变量,然后将值传入到index.htm中生成index.html文件,从而满足dockerfile中的文件格式,进而完成打包操作。ci中用到的192.168.137.14:5000/centos:env这个镜像里面包含了envsubst,要不然会提示envsubst 找不到。nginx项目cat index.htmnginx:${versio

2022-01-20 17:24:08 1465

原创 GitLab CI/CD 之 pipeline--trigger传参案例

本篇目录链接项目说明:流程思路:说明:CI filehttp-ci file:nginx-ci file:结果展示:项目说明:基于通过http项目去触发nginx项目。流程思路:在http ci中定义VERSION变量,然后通过pipelinetriggeer传参,在以变量的方式传入到nginx项目中;通过修改nginx ci中的镜像tag版本,定义为version变量说明:此处我是将预定义变量、ci文件中定义变量、传参结合一起做的。其中variables下的REF_NAME、VERSIO

2022-01-20 17:15:21 2311

原创 GitLab CI/CD 之pipeline--ci文件中定义变量案例

本篇目录链接项目说明:CI filehttp-ci file:结果展示:项目说明:基于上篇的基础上,将http项目UI界面定义的变量删除即可。CI filehttp-ci file:在ci 文件中定义变量:line2-4image: docker:19.03.13variables: CITOKEN: 8c25146d34635c60c1b5d6ce301908 REF_NAME: mainstages: - Test - Build - Deploytest:

2022-01-20 17:08:41 336

原创 GitLab CI/CD environment variables

本篇目录链接GitLab CI/CD variables 说明:使用变量的方式1、预定义变量(Predefined CI/CD variables)2、自定义变量(Custom CI/CD variables)3、.gitlab-ci.yml 中定义变量实现方式1、项目中定义变量2、通过api1) 前置条件:i 查看项目idii 创建项目级令牌iii 查看此项目是否有变量2) 列出项目变量的3) 创建变量4) 查看变量key的值5) 更新变量6) 删除变量3、.gitlab-ci.yml 中定义变量出自:

2022-01-20 16:52:50 977

原创 GitLab CI/CD 之 pipeline--项目UI上定义变量案例

本篇目录链接项目信息:流程思路:前置条件:CI filehttp-ci file:nginx-ci file:结果展示:http 流水线nginx流水线项目信息:流程思路:通过在nginx在nginx项目中创建pipeline-triggger,然后在http中触发;同时CITOKEN已经作为变量提前在项目中定义ok了。在项目中预定义变量前置条件:nginx项目中创建好流水线触发器TOKEN:8c25146d34635c60c1b5d6ce301908REF_NAME:分支或者标签名称

2022-01-20 14:30:40 1470

原创 Argo CD 项目发布(三)

本篇目录链接方式一:基于yaml文件部署step1:添加项目仓库地址step2:创建项目(基于环境区分,所以需要在创建的时候添加项目地址,否则将没有权限访问)step3:发布项目方式二:基于helm部署step1:添加项目仓库地址step2:创建项目(基于环境区分,所以需要在创建的时候添加项目地址,否则将没有权限访问)step3:发布项目方式一:基于yaml文件部署step1:添加项目仓库地址控制台主页—setting—Repositories—选择gitstep2:创建项目(基于环境区分,所

2022-01-19 23:27:30 442

原创 Argo CD 安装和多集群管理(二)

本篇目录链接Argo CD 服务端安装Argo的访问方式-LoadBalancerArgo的访问方式-基于ingress部署Argo CD 客户端安装linux命令行MAC版helm部署argocd多集群管理获取到目标集群的config配置信息根据config配置信息,获取到目标集群的上下文信息客户端添加集群界面查看Argo CD 服务端安装安装参考:https://argoproj.github.io/argo-cd/getting_started官方demo:https://cd.apps.arg

2022-01-19 20:42:50 2429

原创 Argo CD 初探(一)

本篇目录链接什么是Argo CD?Why Argo CD?Argo CD 架构Argo CD组件API ServerRepository ServerApplication ControllerArgo CD特性Argo CD核心概念什么是Argo CD?Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.Argo CD是一种用于Kubernetes的声明性GitOps连续交付工具。Why Argo CD?

2022-01-19 20:33:35 521

原创 基于SkyWalking实现对k8s集群中微服务的链路追踪分析

基于SkyWalking实现对k8s集群中微服务的链路追踪分析背景需求:SkyWalking介绍:实现方式:step1:制作SkyWalking Agent镜像1、准备文件:2、编写skywalking agent的dockerfile文件3、构建镜像step2:编写java服务接入skywalking agent的yamlstep3:执行yaml文件step4:效果图背景需求:由于我司之前的服务都是部署在ECS中,对于java微服务的实时链路分析是基于skytwalking agent来做监控的,但是

2021-11-21 21:00:09 1799

原创 在k8s中部署jenkins并通过pipeline发布项目

本篇目录链接背景需求:前置条件:step1:准备相关文件step2:编写jenkins的dockerfile文件step3:编写jenkins服务的rbac文件step4:编写jenkins的资源清单文件(deployment和service)step5:创建jenkins服务step6:验证1、新建项目--流水线2、创建并编写pipeline3、运行流水线step7:流水线代码step8:优化点背景需求:由于目前现有Jenkins上的项目多、杂,不仅有开发、测试、灰度、生产,而且还有一些其他的脚本实现

2021-11-21 19:45:32 1756 4

原创 k8s环境启动命令增加环境配置

本篇目录链接1、代码支持传参2、 k8s中的Args启动命令需要增加自己所在的环境namespaces。3、项目整改:step1:保留配置文件step2:profiles删除多余的配置基于以 spring boot 启动命令的形式注入所需的环境配置,不需要在项目中增加多余的配置,只需要在apollo中添加自己的namespaces。K8S启动的时候指定自己的namespaces。1、代码支持传参有的项目启动的时候没有传入参数,导致启动参数失效。这个必须要加上2、 k8s中的Args启动命令需要增加

2021-11-20 17:09:27 1428

原创 helm部署minio集群

本篇目录链接step1:部署helmstep2:添加helm源step3:创建scstep4:安装miniostep5:配置minio客户端(命令行配置)step6:mc客户端使用方法1. 下载mc客户端2. 添加 mc 配置文件, 两串随机字符串分别是 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY3. 创建存储桶4. 上传文件5. 删除文件基于k8s的sc,sc的部署详见:https://blog.csdn.net/weixin_44729138/article/details

2021-11-19 22:30:27 1342

原创 记一次k8s集群集群恢复处理案例

现象:k8s集群的master节点无法加入到集群中,提示[control-plane] Creating static Pod manifest for “kube-controller-manager”W1110 17:36:52.162178 17976 manifests.go:225] the default kube-apiserver authorization-mode is “Node,RBAC”; using “Node,RBAC”[control-plane] Creatin

2021-11-16 22:46:55 862 2

原创 基于ssh密钥实现服务器登陆

客户需求:1、禁止通过密码的方式登录2、ssh端口要大于100003、不限区域需求分析本质上就是对ssh服务的安全相关的运用,基于ssh密钥可以实现操作syep1:生成公私钥[root@wangkx ~]# ssh-keygen Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no pas

2021-11-03 22:25:01 117

原创 记一次k8s集群中etcd集群恢复处理

现象:突然我们的kuboard界面访问的时候,一直卡在了登录页,由于是在k8s集群中部署的,于是通过命令行终端登录到master节点上,查看集群中的pod状态,发现竟然k8s集群都不能访问了,于是首先通过kubectl get cs 查看了,发现是etcd集群故障。排查:step1:先登录etcd-1节点(即etcd的leader节点),通过配置文件查看,集群的三个节点分别是10.10.10.11,10.10.10.12,10.10.10.13;step2:然而在etcd-3(10.10.10.

2021-10-26 21:57:50 1065

原创 通过python统计k8s集群中命名空间下的pod数量和节点上的pod数量

背景:由于k8s集群节点较多,需要统计到不同命名空间下的pod数量和节点上的pod数量。实现方法:基于python实现ns上的pod数量:#!/usr/bin/pythonimport commandsnamespaces = []pod_namespaces = []status,output = commands.getstatusoutput("kubectl get namespace")if status == 0: lines = output.split('\n')

2021-10-20 21:45:42 825

原创 Linux上删除乱码文件

背景:由于在linux上使用rz上传文件的时候,没有选对文件格式导致命令行生成了好多乱码的文件,非常影响使用体验。分析:在linux中,有这么一句话-“一切皆文件”,所以即使是乱码文件,其本身在文件系统中也是文件,那既然是文件,就必定有inode,有了这个思路下来就好处理了。操作:step1:查找乱码文件的inode号[root@k8s-m1 ~]# ls -litotal 12 394258 -rw-r--r-- 1 root root 46 Sep 23 18:36 㽽??3%uZ,

2021-10-11 14:00:01 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除