pytest定制化报告插件allure2安装
可访问Allure官方网站,或者Allure Github、Allure maven下载对应的版本的zip包。
windows下安装
访问Allure maven下载对应的zip包到本地。
将zip包加压到自定义目录,例如:D:\Work\Allure2
设置环境变量,打开系统变量设置,在系统变量path中,添加D:\Work\Allure2\bin。
打开cmd窗口验证是否添加成功:
12PS C:\Users\lzy> allure --version2.13.5
与pytest集成需要安装pytest-allure:
1PS C:\Users\lzy> pip install -U allure-pytest -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
简单使用,可详细参考python+allure2生成测试报告:首先运行pytest将结果写入allure_results目录:
1D:\Python\Python_SQL>pytest --alluredir=allure_ ...
kubernetes开启客户端证书认证
Nginx的双向认证
Nginx开启HTTPS访问如下(在nginx.conf或者conf.d文件夹中的配置文件中server部分):
12345678910111213server { listen 443 ssl; #listen [::]:443 ssl http2 default_server; server_name www.lemonlzy.cn; root /home/hexoBlog; #证书文件名称 ssl_certificate "/etc/nginx/1_www.lemonlzy.cn_bundle.crt"; #私钥文件名称 ssl_certificate_key "/etc/nginx/2_www.lemonlzy.cn.key"; ...}
Nginx开启双向认证如下:
12345678910111213141516server { listen 443 ssl; #l ...
kubernetes session会话保持
前提
基于kubernetes部署Java项目,发现在多pod模式下,会出现登录成功但是页面无法跳转的问题,在单一pod时却可以成功登录并页面正常跳转,于是推测是cookie的问题。
网上的大部分文章提供的解决方案都是在service的配置文件中加入sessionAffinity: ClientIP,功能是选择与请求来源ip更接近的pod,这样就会固定同一个session,但是好像并不适用于我这个项目。
最终的解决当然还是要靠自己读官方的文档,ingress-nginx有大量的注释配置,官方针对这种情况已经做了说明,需要细细阅读,详见Cookie affinity。
解决方案
注释nginx.ingress.kubernetes.io/affinity在Ingress的所有上游中启用和设置相似性类型。这样,请求将始终定向到同一上游服务器。Nginx唯一可用的相似性类型是cookie。
如果为一个主机定义了多个Ingress nginx.ingress.kubernetes.io/affinity: cookie,并且至少一个Ingress使用,则只有Ingress使用的路径nginx ...
jenkins远程执行shell出现java-command not found
之前在使用jenkins执行远程shell脚本时,出现提示java: command not found;
多方查找原因后发现是因为远程执行shell脚本时,不会自动加载环境变量,导致出现此错误,
解决方案就是在脚本前加上这段代码即可source /etc/profile;
如何从Helm v2迁移到Helm v3
前言
Helm v3提供了很多的新的功能,所以在此考虑对原有的Helm v2进行升级。
如果是自己的测试环境,无需考虑Helm v2配置的迁移、Helm v2版本的迁移,则直接覆盖安装虑Helm v3。但现实情况往往并非如此,我们需要考虑升级的风险,和以前的版本是否兼容等问题,所以我们可以采用官方提供的升级方案如何从Helm v2迁移到Helm v3,helm-2to3 Github。
设置Helm v3
由于我们不想覆盖Helm v2 二进制文件,因此我们需要执行一个附加步骤,以确保两个CLI版本可以共存,直到我们准备删除Helm v2 CLI及其所有相关数据为止:
同之前安装Helm一样,这次同样采取二进制压缩包安装,首先下载Helm v3.2.4版本安装包,选择Linux amd64版本:
1234567891011[root@centos7 tmp]# wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz--2020-07-27 09:43:45-- https://get.helm.sh/helm-v3.2.4 ...
helm安装
二进制版本安装helm
每一个版本的helm提供多种操作系统的二进制版本。这些二进制版本可以手动下载和安装,可详见helm官方版本:
1、下载 所需版本(这里以helm稳定版helm-v3.2.4为例)2、解压缩(tar -zxvf helm-v3.2.4-linux-amd64.tar.gz)3、helm在解压后的目录中找到二进制文件,然后将其移至所需的目标位置(mv linux-amd64/helm /usr/local/bin/helm)
实践
1、下载Helm v3.2.4版本安装包,选择Linux amd64版本,如下图:
1234567891011[root@centos7 tmp]# wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz--2020-07-27 09:43:45-- https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz正在解析主机 get.helm.sh (get.helm.sh)... 152 ...
mysql修改mysql.sock路径导致登录本地数据库异常
背景
最近发现每天的数据库还原并没有执行了,检查了脚本和备份文件以及定时任务一切正常,于是决定手动执行还原数据库脚本试试:
12[root@centos7 document]# ./mysqlsource.shERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysqld/mysqld.sock'
果不其然,问题出现在在了脚本上,发现使用mysql -uroot -p就已经无法连接至本机数据库了,却可以通过mysql -h 127.0.0.1 -uroot -p进行数据库连接,这个问题很奇怪。
解决
首先检查下/etc/my.cnf即mysql的配置文件:
123456[root@centos7 document]# vim /etc/my.cnf[mysqld]#federateddatadir=/data/mysqlsocket=/data/mysql/mysql.sock...
可见mysql配置文件中datadir和socket的路径 ...
kubernetes配置存活、就绪和启动探测器
kubelet 使用存活探测器来知道什么时候要重启容器。例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。
kubelet 使用就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量, 当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。在 Pod 还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。
kubelet 使用启动探测器可以知道应用程序容器什么时候启动了。如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查,确保这些存活、就绪探测器不会影响应用程序的启动。这可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉
也可参考配置存活、就绪和启动探测器。
Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应:
livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 ...
Pod Preset
在kubernetes中,新建的pod里面的时区默认是UTC-0,而对我们来说需要的时区是UTC-8,大家可能是这样来更改时区的:
设置容器的时区环境变量
挂载主机的时区文件到容器中
但是,难道每次每个容器都要做这样的配置才可以么?可否在系统层面设置,而无需在对应yaml文件体现呢?不然大量的yaml文件更改起来过于繁琐。答案是使用K8S的特性Pod Preset来控制容器启动前先配置好对应时区环境变量,或者挂载主机文件。
理解 Pod Preset
在 Pod 创建时,用户可以使用 PodPreset 对象将特定信息注入 Pod 中,这些信息可以包括 secret、 卷、卷挂载和环境变量
Pod Preset 是一种 API 资源,在 Pod 创建时,用户可以用它将额外的运行时需求信息注入 Pod。 使用标签选择器(label selector)来指定 Pod Preset 所适用的 Pod。
使用 Pod Preset 使得 Pod 模板编写者不必显式地为每个 Pod 设置信息。 这样,使用特定服务的 Pod 模板编写者不需要了解该服务的所有细节。
PodPreset ...
kubernetes更改nodePort模式下的默认端口范围
使用nodePort模式,官方默认范围为30000-32767,详见Service官方文档。
NodePort 类型如果将 type 字段设置为 NodePort,则 Kubernetes 控制平面将在 –service-node-port-range 标志指定的范围内分配端口(默认值:30000-32767)。 每个节点将那个端口(每个节点上的相同端口号)代理到您的服务中。 您的服务在其 .spec.ports[*].nodePort 字段中要求分配的端口。
在使用nodePort模式后,一个很显著的问题就是,域名后面必须带端口,这就很致命了,很显然没有哪个公司的网站是需要你输入域名+端口模式的,所以可以采取这种方式进行规避:
更改端口
调整默认端口为1-65535,可根据需求自行调整:
1234567891011121314151617181920212223[root@node-1 manifests]# vim /etc/kubernetes/manifests/kube-apiserver.yaml apiVersion: v1kind: Podmetadata: cr ...