Filebeat输出日志格式处理
使用filebeat可以在收集过程中进行一些简单的处理,如丢弃日志等,给后面的kafka等减少压力
普通文本日志格式原始日志格式:
1{"log":"2022-03-15 14:53:48.972 [http-nio-8080-exec-10] o.s.c.c.c.ConfigServicePropertySourceLocator-[227]-[INFO]-Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available\n","stream":"stdout","time":"2022-03-15T06:53:48.972854745Z"}
这里的原始日志是指要收集的日志文件的格式,上面的这个日志是被Kubernetes处理过的,真正程序输出的日志应该是log字段。
对应的filebeat配置文件如下:
1234 ...
Kubernetes之master高可用方案
之前一直用使用的负载方案是搭建一台负载均衡器,可以是haproxy或nginx或lvs,来将多个master节点的6443端口做个负载均衡,但是考虑到负载均衡也需要高可用,所以会引入类似keepalived的方案来解决问题。偶然看到了kubeasz这个开源项目,宣称解决了master高可用问题,部署了一遍发现并没有额外搭建负载均衡器,研究了一下,发现了另一种思路。
使用额外的负载均衡来做高可用这种就是比较容易想到的一种方案,比如3个master节点,前面有一台负载均衡(nginx、haproxy、lvs)等,但是负载均衡本身就是一个单点故障,所以一般来说还需要另一台负载均衡,通过keepalived来实现VIP的切换使用Keepalived来实现Nginx高可用
在master上使用vip架构图如图所示, 使用keepalived维护vip,每台master节点上都运行着一个负载均衡
抢占式 和 非抢占式的区别: 比如master1默认的权重(priority)高,vip当前在master1上, master1挂掉后vip会飘到master2上,那么如果master1恢复正常 ...
Kubernetes使用NFS作为存储
我们玩单机的容器,如果需要持久化的话,需要将容器目录映射到主机,但是在K8S环境下容器是可能会被调度到任意节点的,所以需要使用远程服务存储数据。在云平台上都会提供自己的云盘存储,但是自己搭建的Kubernetes没有办法使用云盘做存储,所以需要用自己搭建的存储,NFS是比较常见的一种,其他还有glusterfs、ceph等。
关于NFS搭建教程,可以查看https://zahui.fan/posts/4b677f68/容器镜像开源地址https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
安装NFS client工具所有的worker节点上都需要安装NFS client
Ubuntu
1sudo apt install nfs-common -y
CentOS
1sudo yum install nfs-utils -y
rbac授权rbac.yml
12345678910111213141516171819202122232425262728293031323334353637383940 ...
Kubernetes之ingress-nginx安装配置
部署ingress-nginx
ingress-nginx 官方文档 https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters自建的Kubernetes可以参数bare-metal安装
1kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/baremetal/deploy.yaml
部署成功后修改NodePort,把里面30xxx的端口换成你想要的端口
1kubectl edit service ingress-nginx-controller -n ingress-nginx
也可以wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/baremetal/dep ...
Linux Shell 命令补全
12kubectl操作k8s集群,如何自动补全pod、service名字?kubectl的命令补全主要依赖于bash自动补全。
用户层级K8s命令自动补全1234yum install -y bash-completionsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrc
系统层级开启bash_completion把/etc/bash.bashrc如下几行的注释取消
12345678# enable bash completion in interactive shellsif ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_comp ...
Nginx使用module_vts模块来做监控
最近我们想要用Prometheus来监控Nginx的状态,所以看了一下有个module可以支持。项目地址在:https://github.com/vozlt/nginx-module-vts.git
重新编译Nginx首先执行nginx -V 查看编译参数,记录一下, 比如
1--prefix=/usr/local/nginx --user=www --group=www --with-stream --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1k --with-pcre=../pcre-8.45 --with-pcre-jit --with-ld-opt=-ljemall ...
正则表达式入门
在线测试正则表达式: https://c.runoob.com/front-end/854/
字符匹配普通字符:普通字符按照字面意义进行匹配,例如匹配字母 “a” 将匹配到文本中的 “a” 字符。
元字符:元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符,. 匹配任意字符(除了换行符)等。
量词123456*:匹配前面的模式零次或多次。+:匹配前面的模式一次或多次。?:匹配前面的模式零次或一次。{n}:匹配前面的模式恰好 n 次。{n,}:匹配前面的模式至少 n 次。{n,m}:匹配前面的模式至少 n 次且不超过 m 次。
字符类12[ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。[^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
边界匹配1234^:匹 ...
Ansible系列之条件判断
在ansible中,使用when关键字来做条件判断,when关键字即为当条件成功就执行此条任务。在when判断中不需要加{{}}
字符串判断
判断符
说明
==
判断字符串是否相同,相同为真,不同为假
lower
是否全是小写,是为真,不是为假
upper
是否是纯大写,是为真,不是为假
in
判断字符串是否在另一个字符串中,是为真,不是为假
判断系统,不支持的系统直接报错退出
ansible_distribution是ansible自带变量,查看变量可以用ansible localhost -m setup命令。
12345---- hosts: all tasks: - fail: msg="this playbook don't support CentOS" when: ansible_distribution == "CentOS"
判断字符串大小写123456789101112---- hosts: all va ...
Linux的crontab无法执行的一些问题
crontab是linux平台的定时任务系统,不过有时候可以运行的命令或脚本在crontab里面就是不运行,下面找了一些可能的原因以及解决方案。
看不到日志一般来说,crontab的任务控制台输出会打到/var/spool/mail/<username>里面,然后通过email发出去crontab服务的运行的日志一般都在/var/log/cron里面,这个日志可以看到任务有没有执行
如果想将命令输出内容重定向到其他文件,可以在命令后添加2>&1, 不加2>&1错误日志看不到
1* * * * * date >> /tmp/cron.log 2>&1
环境变量的问题crontab环境变量和登录shell查看的环境变量是不同的,比如
1* * * * * env >> /tmp/env.log 2>&1
查看一下:
123456HOME=/home/iuxtLOGNAME=iuxtPATH=/usr/bin:/binLANG=C.UTF-8SHELL=/bin/shPWD=/home/iux ...
使用s6-Overlay来管理多进程容器
容器使用最佳实践是:一个容器运行一个进程,进程退出容器也就退出,很优雅是不是?但是…在日常工作中总有一些你懂的的原因,就需要多个进程塞在一个容器里面,那么我们可以怎么来管理容器内进程呢?这个时候容器内的进程管理工具就派上用场了。s6-Overlay就是其中之一s6-Overlay官方github地址:https://github.com/just-containers/s6-overlay
安装容器是通过判断pid=1的进程来判断容器是否工作正常的,也就是说s6-Overlay进程pid为1
通过官方安装脚本来安装
12345678FROM ubuntuADD https://github.com/just-containers/s6-overlay/releases/download/v2.2.0.1/s6-overlay-amd64-installer /tmp/RUN chmod +x /tmp/s6-overlay-amd64-installer && /tmp/s6-overlay-amd64-installer /RUN apt-get updat ...