jenkins-okd-issue.md
一、Docker
需要安装Docker plugin、Docker pipeline plugin
1、系统管理->全局工具配置->Docker,安装对应的docker版本
2、系统管理->节点管理->配置集群
3、需要挂载/.docker文件夹到Jenkins服务上,默认没有root权限生成不到文件
1 | stage('镜像打包') { |
openshift-3.11
部署
一、准备机器
master1
router1
node1
node2
master 主要作为控制机器,並不属于openshift,主要用来跑ansible,可以使用上面的任何一台机器替代
如果本地安装的centos,需要配置网络,网卡名字可能不一样
1 | # 编辑网卡配置文件 |
二、配置yum
1 | # 取消快速查找插件,修改plugins=1为plugins=0 |
all.repo
1 | [base] |
三、安装ansible
在master机器上进行
1 | curl https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.6.8-1.el7.ans.noarch.rpm -O |
四、配置hosts和免密登录
在master机器上进行
1、配置master的hosts文件
1 | 192.168.242.140 master |
2、配置免密登录
1 | ssh-keygen -t rsa |
五、准备inventory
更多详细参数请参考官方文档:https://access.redhat.com/documentation/zh-cn/openshift_container_platform/3.11/html/installing_clusters/multiple-masters
vi /etc/ansible/hosts
1 | [OSEv3:children] |
六、安装
主机名:
1 | ansible all -m shell -a "hostnamectl set-hostname --static {{ inventory_hostname }}" |
YUM:
1 | cp /etc/yum.repos.d/all.repo /tmp/ |
/etc/hosts:
1 | ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts' |
集群节点selinux设置(需要重启生效)
1 | ansible all -m shell -a 'sed -i "s/^SELINUX=disabled/SELINUX=permissive/g" /etc/selinux/config' |
下载安装程序,https://github.com/openshift/openshift-ansible/tags,选择一个最新的3.11版本下载,解压。
禁用集群安装默认的repos源
1 | cd openshift-ansible-release-3.11 |
安装
1 | ansible-playbook ~/openshift-ansible/playbooks/prerequisites.yml |
卸载
1 | ansible-playbook ~/openshift-ansible/playbooks/adhoc/uninstall.yml |
七、创建管理员用户和密码
1 | ansible masters -m shell -a 'htpasswd -b /etc/origin/master/htpasswd admin admin' |
即可用admin/admin登录
八、常见问题
1、Privileged containers are not allowed spec.initContainers[1].securityContext.privileged: Invalid value: true
权限问题,-n后面是namespace也就是project
1 | oc adm policy add-scc-to-user privileged -z default -n efk |
2、Error: EACCES: permission denied, mkdir
权限问题,没有写入到指定目录权限
- 配置私有存储,指定分配路径
- 直接分配权限(生产环境不建议)
1 | oc adm policy add-scc-to-user anyuid -z default |
ansible安装和常用命令
安裝
brew安装
1 | # 安装 |
yum安装
1 | # 添加EPEL源 |
配置
1 | vi /etc/ansible/ansible.cfg |
1 | host_key_checking=False |
1 | # 配置的主机需要配置免密登录 |
1 | # 单个主机 |
ansible命令
ansible命令又被称为ad-hoc命令,他主要是用来快速在多个远程机器Hosts上执行单个任务(task)
列出所有主机
ansible all --list-hosts
ping
默认用户是当前机器的用户ansible all -m ping
指定用户ansible all -m ping -u root
执行shell指令
下面是执行了ls命令
ansible all -m shell -a ls
复制文件到主机
ansible -i /etc/ansible/hosts test -m copy -a "src=/tmp/ansible.tar.gz dest=/home/root/ owner=root group=root mode=0777"
解压文件
ansible -i test -m unarchive -a 'src=/etc/bin/ansible.tar.gz dest=/usr/local copy=no mode=0755'
ansible -i /etc/ansible/hosts test -m shell "tar -zxvf /etc/bin/ansible.tar.gz -C /usr/local"
批量杀掉进程
ansible test -m shell -a "ps -ef | grep zabbix |grep -v grep |awk '{print \$2}' | xargs kill -9"
设置cron
ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.254.139"'
建立组
ansible all -m group -a 'gid=2017 name=a'
建立用户
ansible all -m user -a 'name=aaa groups=aaa state=present'
删除用户
ansible all -m user -a 'name=aaa groups=aaa remove=yes'
在节点上安装httpd
ansible all -m yum -a "state=present name=httpd"
在节点上启动服务,并开机自启动
ansible all -m service -a 'name=httpd state=started enabled=yes'
执行远程命令
ansible all -m command -a 'uptime'
执行主控端脚本
ansible all -m script -a '/root/test.sh'
执行远程主机的脚本
ansible all -m shell -a 'ps aux|grep zabbix'
类似shell
ansible all -m raw -a "ps aux|grep zabbix|awk '{print $2}'"
创建软链接
ansible all -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
删除软链接
ansible all -m file -a "path=/tmp/resolv.conf state=absent"
复制文件到远程服务器
ansible all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
在节点上运行hostname
ansible all -m raw -a 'hostname|tee'
将指定url上的文件下载到/tmp下
ansible all -m get_url -a 'url=http://10.1.1.116/favicon.ico dest=/tmp'
帮助
ansible --help
ansible-playbook命令
ansible-playbook主要用来执行ansible的playbook。他可以用来在多个远程机器Hosts上执行一个或多个任务(task),这个命令执行时可以指定一个或多个playbook的名字。
ansible-playbook playbook.yml [options]
1 | -u REMOTE_USER, --user=REMOTE_USER # ssh 连接的用户名 |
ansible-config
这个命令主要用来初始化或者查看当前机器ansible的配置信息
ansible-config [-h] [-version] [-v] {list,dump,view,init}
ansible-inventory
该命令主要用于显示或者导出ansible配置好的Inventory
ansible-inventory {--list/--host/--graph}
ansible-doc
该命令主要用于通过获取当前安装的plugin的一些api
ansible-doc [plugin [plugin ...]]
openfire重置admin密码
刪除admin賬號,並插入默認的admin
1 | delete from ofUser where username='admin'; |
修改openfire配置文件,重新配置openfire
vi /opt/openfire/conf/openfire.xml
setup->false
重啟openfire服務
systemctl restart openfire
liquibase基本使用
下载和安装
下载地址:
https://download.liquibase.org/
1 | liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=~/development/lib/mysql-connector-java-8.0.30.jar --changeLogFile=./init-table.xml --url="jdbc:mysql://localhost:3306/yudb" --username=root generateChangeLog |
logrotate分割tomcat日志
配置
新建tomcat配置文件
1 | vi /etc/logrotate.d/tomcat |
配置文件内容如下
1 | /usr/local/tomcat/logs/catalina.out { |
参数详解:
- daily 指定转储周期为每天
- rotate 5 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
- missingok 如果日志不存在则忽略该警告信息
- dateext 文件后缀是日期格式,也就是切割后文件是:xxx.log-20150828.gz
- compress 通过gzip压缩转储以后的日志(gzip -d xxx.gz解压)
- notifempty 如果是空文件的话,不转储
- copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
立即截断日志
1 | logrotate --force /etc/logrotate.d/tomcat |
Docker设置日志大小的方法
一、设置单个容器的日志大小
1、通过运行时参数配置日志大小
1 | docker run -d --log-driver json-file --log-opt max-size=1g nginx |
2、通过docker-compose配置文件限制
1 | nginx: |
二、全局设置所有容器的日志大小
修改docker默认配置文件
1 | vi /etc/docker/daemon.json |
将配置文件内容改成如下,增加log-driver和log-opts配置项
1 | { |
重新加载配置和重启docker
1 | systemctl daemon-reload |
三、开启远程访问(非安全方式)
1 | vi /usr/lib/systemd/system/docker.service |
四、开启远程访问(安全方式)
缓存系统的三大问题
一、缓存穿透
- 数据库和缓存中都没有数据,用户每次查询都查询数据库但是没法写入到缓存
- 查询的KEY不存在,例如id:-1
解决方法:
- 过滤不正常的参数key
- 将查询空的结果设置短时间的key-null缓存
二、缓存击穿
- 数据库中有数据,但是缓存没有,首次请求或者是缓存的KEY过期
解决方法:
- 限流、熔断、降级
- key不过期(注意使用)
- 佈隆过滤器,快速查询key是否存在
- 互斥锁(常用)
三、缓存雪崩
- 缓存中大批量数据过期
解决方法:
- 缓存数据随机时间
- 分散缓存到不同缓存系统
- key不过期
1 | /** |




