基于Docker的Redis 5.0 单机集群搭建
如果安装redis 5.0以下版本,则需要redis、ruby、redis-trib等各种组件安装,比较繁琐,在redis 5.0及以后,不需要ruby,仅在安装redis后执行一行命令即可。
前置条件:
Docker
redis:5.0.0镜像
12[root@lemonlzy redis]# docker images | grep redisredis 5.0.0 1babb1dde7e1 24 months ago 94.9MB
集群搭建
创建Redis 容器1. 创建redis自定义network1$ docker network create redis-net
备注:创建redis-net虚拟网卡 目的是让docker容器能与宿主(centos7)桥接网络 并间接与外界连接
2. 查看redis-net虚拟网卡网关ip这里的ip用于后续配置文件中的集群ip配置:
12[root@lemonlzy redis]# docker netwo ...
Helm部署Dashboard UI
1. 前提条件
本次安装基于Helm v3版本的chart包安装的,,所以有以下前提:
已安装好kubernetes集群
已安装好Helm v3版本
如未安装helm,可以参照:Helm安装。
2. dashboard安装
2.1 helm拉取dashboard的chart添加helmhub上的dashboard官方repo仓库:
1helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
查看添加完成后的仓库:
12345[root@lemonlzy helm]# helm repo listNAME URL bitnami https://charts.bitnami.com/bitnami stable http://mirror.azure.cn/kubernetes/chartskubernetes-dashb ...
kubernetes ingress跨域设置
在使用kubernetes部署项目时,有些功能可能会存在如下报错:
1Access to XMLHttpRequest at ... has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
很显然这是一个跨域问题,在传统项目中更改Nginx配置即可,那么在kubernetes中,应该如何处理这种问题呢?
解决方法
启用CORSkubernetes中的跨域设置在Ingress中进行配置,要在Ingress规则中启用跨域资源共享(CORS),请添加注释 nginx.ingress.kubernetes.io/enable-cors: “true”。这将在服务器位置中添加一个部分以启用此功能。
详见Ingress CORS官方文档。
可以使用以下注释来控制CORS:
注解
描述
nginx.ingress.kubernetes.io/cors-allow-methods
控制接 ...
Docker资源限制
默认情况下,容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源。Docker提供了一种控制分配多少量的内存、CPU或阻塞I/O给一个容器的方式,即通过在docker run或docker create命令时设置运行时配置的标志。
在Linux主机上,如果内核检测到没有足够的内存来执行重要的系统功能,它会抛出一个OOME(Out Of Memory Exception),一旦发生OOME,Linux就会开始查杀进程以释放内存。任何进程都有可能会被杀死,包括docker daemon和其他重要的应用程序。如果错误的进程被杀死,这可会降低整个系统的使用效果。
限制Docker使用内存
在Docker中可以强行限制容器的资源使用的限制,即只允许容器使用不超过给定数量的系统内存或其他软限制。下面介绍几个最常用的选项,我们可以在docker run或docker create创建容器时指定,用以限制容器的资源使用限制。
选项
描述
-m 或 -memory=
容器可以使用的最大内存量。如果你设置了此选项,那么允许的最小值为4m(4MB)。
–memo ...
pip设置默认镜像源
背景
在使用pip下载python模块的时候,默认是从python官方库下载,而在国内下载速度非常慢,且容易超时导致失败,一般情况下我们会在命令行中指定下载源,如下所示:
1pip install -U httprunner -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
但是这样不方便,难不成每一次都要我手动指定吗,能不能更改pip的默认下载地址?
解决
设为默认:升级pip到最新的版本(>=10.0.0)后可配置,首先指定国内源更新pip版本:
1python -m pip install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
更改python默认下载地址:
1pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
国内常用的镜像源(随自己喜好,任意设置一个国内源即可):
123 ...
kubernetes部署PHP项目
背景
在基于Docker部署PHP应用时,我用到了php-fpm:5.4.45,nginx:1.17.10两个镜像来部署PHP项目,通过Nginx反向代理至php-fpm的根目录即可。那么在kubernetes中部署PHP应用时,应该如何做呢,将这个两个镜像放在同一个pod中吗?
解决
其实是可以将Nginx与php-fpm制作为一个镜像,并提前定义好Nginx的配置,这样的话会方便很多,这里提供一个已经做好的nginx-php的镜像,nginx-php镜像的docker-hub地址:
1docker pull lemonlzy/nginx-php:latest
把php代码添加到镜像的/usr/local/nginx/html文件夹,比如将当前目录下的v4文件夹内的所有php代码添加到容器内部,如下为Dockerfile,这样做的话访问路径为ip+80/v4/文件名,当然,如果不需要目录层级划分,访问路径要求为ip+80/文件名,则使用COPY命令即可,不使用ADD命令:
1234567FROM lemonlzy/nginx-php:late ...
Linux安装expect
简介
expect是一款自动化的脚本解释型工具。对一些需要交互输入的命令很有帮助,比如ssh,npm login。远程登录linux服务器的时候,ssh命令需要手动输入密码,当登录多台机器的时候会非常繁琐,expect可以根据设定的规则,自动帮我们输入密码,大大节省时间。用jenkins实现npm包自动发布时,可以用expect帮助我们实现npm login登录,免去在命令行登录的操作。
linux安装expect
yum安装直接使用yum install安装即可:
1yum install -y spawn
编译安装1.安装mwget
123456wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2tar -xjvf mwget_0.1.0.orig.tar.bz2cd mwget_0.1.0.orig./configuremakemake install
2.安装tcl
1234mwget https://nchc.dl.sourceforge.net/ ...
docker容器内挂载目录无权限 ls cannot open directory Permission denied
docker运行一个容器,将主机中当前目录下的文件夹挂载到容器的文件夹后,进入到docker容器内对应的挂载目录中,运行命令ls后提示:
1ls: cannot open directory .: Permission denied
问题原因及解决办法原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:
1.在运行容器的时候,给容器加特权,及加上--privileged=true参数:
1docker run -d -t --privileged=true xxx
2.如果使用的是docker-compose,则在配置文件中加上-privileged=true环境变量:
123environment: - TZ=Asia/Shanghai - privileged=true
3.临时关闭selinux:
1setenforce 0
4.添加selinux规则,改变要挂载的目录的安全性文本。
jenkins报错之It appears that your reverse proxy set up is broken
背景
在服务器上部署了一个jenkins,由于其他项目的存在,所以使用的是Nginx做反向代理,但是每次访问jenkins管理界面都会抛出一个报错,看着有点闹心,想把它解决掉:
An error message is displayed in the “Manage Jenkins” page - “It appears that your reverse proxy set up is broken”
出现这个错误以后,我们点击更多信息,进到官网的解释,看以看到有这么一个警告:
Be sure to set the X-Forwarded-Proto header if your reverse proxy is accessed via HTTPS and then Jenkins itself is accessed via HTTP i.e. proxying HTTPS to HTTP. 这句话的大概意思是: 如果你的反向代理使用https访问,并且jenkins使用http访问,是代理https到http,那么就一定要设置X-Forwarded-Proto这个请求头。
...
jenkins更换插件安装源
背景
关于Jenkins安装插件替换源地址的方案,相信大家都很容易就能搜索到。
但是大多数教程中都是在插件配置里使用https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,看上去没有什么问题,替换为了清华源地址,但是我们打开这个链接就可以发现:
每个插件下载路径依旧没有改变,变的只是这个json是从清华源下来的,其内写死的插件下载地址是没有变的,还是从官网下载。
所以无论是更换还是没更换镜像json,下载插件的速度其实是没有变的,这就比较尴尬了。
解决
进入Jenkins工作目录:
12345[lzy@lemonlzy ~]$ cd /var/lib/jenkins/updates/[lzy@lemonlzy updates]$ lsdefault.json hudson.plugins.gradle.GradleInstaller hudson.tasks.Maven.MavenInstaller ru.yandex.qatools.allure.jenkins.tools.Al ...