kubernetes生产环境使用filebeat sidecar收集日志

在生产环境中,ES 通常是不会在 k8s 集群中存在的,一般 MySQL 和 Elasticsearch 都是独立在 k8s 之外。 那么无论哪种 pod,要甩日志到 ES,最轻量的方案肯定是用 filebeat 甩过去了。 当然,如果是阿里的 ACK,logtail 和 logstore 配搭已经非常不错了,根本用不到 filebeat 和 ES。 可但是,我们不想为阿里 sls、logstore 出钱买单,就只能用 filebeat + ES 了 说一下 filebeat 的 sidecar 边车(僚机)用法: 如上图所示,简单说就是起一个 filebeat 的 logging-agent 边车(僚机),边车和主应用之间共享某个文件夹(mountPath),达到收集主应用日志并发送到 ES,而不用动 app-container 分毫。 我们以部署一个 Tomcat 应用为例来说明: 一、打造 filebeat 边车镜像 首先准备 Dockerfile FROM alpine:3.12 ARG VERSION=7.15.1 COPY docker-entrypoint.sh / RUN set -x \ && cd /tmp \ && wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${VERSION}-linux-x86_64.tar.gz \ && tar xzvf filebeat-${VERSION}-linux-x86_64.tar.gz \ && mv filebeat-${VERSION}-linux-x86_64 /opt \ && rm /tmp/* \ && chmod +x /docker-entrypoint.sh ENV PATH $PATH:/opt/filebeat-${VERSION}-linux-x86_64 WORKDIR /opt/filebeat-${VERSION}-linux-x86_64 ENTRYPOINT ["/docker-entrypoint.sh"] 我们以 alphine:3.12 为底版,然后下载 filebeat 7.15.1的二进制包并释放到 /opt 下,最后指定入口文件 /docker-entrypoint.sh ...

2021年11月10日 · 2 分钟 · 369 字 · 八戒

haproxy一个端口跑多个服务

我们选择 haproxy 1.8 版本以上的,编译安装到路径 /export/servers/haproxy make TARGET=linux2628 PREFIX=/export/servers/haproxy USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 \ USE_SYSTEMD=1 USE_PCRE=1 USE_PCRE_JIT=1 USE_NS=1 make install PREFIX=/export/servers/haproxy 编辑 haproxy.conf 配置文件: global maxconn 5120 chroot /export/servers/haproxy daemon quiet nbproc 2 pidfile /tmp/haproxy.pid defaults timeout connect 5s timeout client 50s timeout server 20s listen http bind :80 timeout client 1h tcp-request inspect-delay 2s acl is_http req_proto_http tcp-request content accept if is_http server server-http :8080 use_backend ssh if !is_http backend ssh mode tcp timeout server 1h server server-ssh :22 解释一下:我们在 8080 端口开了 http 服务,在 22 端口开了 ssh 服务,80端口由 haproxy 做代理转发,首先判断客户端请求是否是 http 请求,如果是就转发到 8080 端口,如果不是,就转发到 22 端口,这样就实现了 80 端口同时跑 http 和 ssh 两个服务。 ...

2021年11月10日 · 1 分钟 · 102 字 · 八戒

sslh的一个端口同时跑多个服务

Ucloud的机器在两会期间干脆端口全灭,firewall设置进来的端口全关闭!!!!!! 还好有个Global ssh的服务,可以 ssh ubuntu@111.129.37.89.ipssh.net 登录上去,注意,直接ssh ubuntu@111.129.37.89是不通的。 那我们就搭建一个SSLH服务,可以把ssh和openvpn以及ssl服务统统塞到一个端口22里 动手吧 1、修改openssh的端口 从22端口改成2222,千万别重启,22这会先得归ssh用 2、安装sslh sudo apt install sslh vi /etc/default/sslh 找到Run=no 改成Run=yes 然后到下面,按需配置(不跑443的话可以不配) DAEMON_OPTS="--user sslh --listen 0.0.0.0:22 --ssh 127.0.0.1:2222 --ssl 127.0.0.1:443 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid --timeout 5" 3、配置sslh并且重启服务器 sudo systemctl enable sslh sudo reboot 就搞定了

2021年11月10日 · 1 分钟 · 43 字 · 八戒

Nginx的一个端口同时跑SSH和HTTPS服务

这个要求挺古怪的,背景是防火墙只开了 nginx 443 端口。我也想同时 ssh 登录进去,但是F5没开IP 就只能这么干了,让 Nginx 一个端口跑多个服务 在 nginx.conf 加一段,stream 配置,nginx 的 ip 是 192.168.8.110: #Multi Ports stream { upstream ssh { server 192.168.8.112:22; } upstream https { server 192.168.8.111:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" https; "TLSv1.3" https; "TLSv1.1" https; "TLSv1.0" https; } # SSH and SSL on the same port server { listen 443; proxy_pass $upstream; ssl_preread on; } } 测试一下: ...

2021年11月09日 · 1 分钟 · 75 字 · 八戒

Kubernetes创建普通账号

kubernetes 装好正常运行一段时间后,会出现要把研发和运维权限分开的场景: 比如: 给某个用户某一指定名称空间下的管理权限 给用户赋予集群的只读权限 … 非常麻烦,我们这里不讨论过多的概念,从运维的角度出发,简单实用化 我们需要明确三个RBAC最基本的概念 Role: 角色,它定义了一组规则,定义了一组对Kubernetes API对象的操作权限 RoleBinding: 定义了"被作用者"和"角色"的绑定关系 Subject: 被作用者,既可以是"人",也可以是机器,当然也可以是 Kubernetes 中定义的用户(ServiceAccount主要负责kubernetes内置用户) 我们的操作过程流程如下,首先创建客户端证书;其次创建Role角色;再创建RoleBinding,把Subject和Role绑定,就完事了;最后一步是生成 kubectl 的配置文件。 一、创建客户端证书 我们以已建好的阿里 ACK 为例,或者自建好的 Kubernetes 也行;确定已经有了 .kube/config 配置文件,拥有集群最高权限,并且可以正常执行 kubectl 命令。 首先是生成证书,并向集群提出证书请求并签发,脚本如下: #!/bin/sh useraccount=reader openssl req -new -newkey rsa:4096 -nodes -keyout $useraccount-k8s.key -out $useraccount-k8s.csr -subj "/CN=$useraccount/O=devops" csr=$(cat $useraccount-k8s.csr | base64 | tr -d '\n') cat << EOF > k8s-csr.yaml apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: $useraccount-k8s-access spec: groups: - system:authenticated request: $csr usages: - client auth EOF kubectl create -f k8s-csr.yaml kubectl certificate approve $useraccount-k8s-access kubectl get csr $useraccount-k8s-access -o jsonpath='{.status.certificate}' | base64 --decode > $useraccount-k8s-access.crt kubectl config view -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' --raw | base64 --decode - > k8s-ca.crt 解释一下:我们定义了一个用户CN=reader,然后向集群发送了证书请求并签发,最终从集群获得了 reader-k8s-access.crt 的客户端证书和 k8s-ca.crt 的 CA 证书。 ...

2021年11月09日 · 3 分钟 · 427 字 · 八戒

clash的搭建教程

没啊办法,翻墙翻墙还是翻墙。 上游有若干 trojian 、v2ray 、sock5 、http各种各样的代理,这样多种的选择,那么就装一个 clash 客户端就可以全接管了。 说下我们的做法:找个小Linux做旁路由,DNS和网关都设置在这台机器上,局域网内的机器都通过这台上网。 我们用到的是 clash 的 Tproxy redir-host 和 udp-proxy 模式,这种模式比较强大。用就用最强大的。 安装很简单,操作系统 centos 或者 ubuntu 都行,项目地址: https://github.com/Dreamacro/clash 说明书: https://lancellc.gitbook.io/clash/clash-config-file/proxy-groups/load-balance 首先下载二进制文件,现在版本是 v1.7.1,解压后放到 /usr/local/bin 目录下 wget https://github.com/Dreamacro/clash/releases/download/v1.7.1/clash-linux-amd64-v1.7.1.gz gzip -d clash-linux-amd64-v1.7.1.gz chmod 755 clash-linux-amd64-v1.7.1 mv clash-linux-amd64-v1.7.1 /usr/local/bin 然后生成 clash.service cat << EOF >> /etc/systemd/system/clash.service [Unit] Description=clash service After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/clash-linux-amd64-v1.7.1 Restart=on-failure # or always, on-abort, etc [Install] WantedBy=multi-user.target EOF 然后最重要的,就是配置文件了 我这里这个旁路由的设备 IP 地址是 192.168.2.2,网卡设备是 enp2s0 ...

2021年11月08日 · 3 分钟 · 474 字 · 八戒

onedev构建一个实际java spring应用

上篇简单介绍了 onedev ,这篇我们具体拿个 java spring 的项目来实际编译一下 首先必须确认环境: onedev 和 agent 都是用 root 安装运行的,然后已经安装了 docker,且 selinux 设置为 disabled,否则会出权限麻烦。 我们用的例子是 spring 的 petclinic,正常的 build 的步骤如下: git clone https://github.com/spring-projects/spring-petclinic.git cd spring-petclinic ./mvnw package 我们首先在 onedev 的 projects 新建一个项目 spring-boot 然后到 clone 下来的源代码目录下 cd spring-petclinic git init git add . git commit -m "Spring boot demo project" git remote add origin http://192.168.86.101:6610/spring-boot git push --set-upstream origin master 这样就可以在 spring-boot 里看到代码了 然后看上图,有个紫色灯泡,Enable build support by adding.onedev-buildspec.yml,点那个链接 ...

2021年11月08日 · 1 分钟 · 176 字 · 八戒

n2n一种peer to peer的VPN的使用

vpn的搭建一直是一个难解的题目,openvpn、ipsec、tinc 都在用,都不够简洁。 n2n 是一种 peer to peer 端到端的 vpn,搭建起来非常简单方便。必备利器 首先了解一下概念 n2n 的 vpn 分为两种角色,Supernode 超级节点和 Edgenode 边缘节点。 很简单,Supernode 最好是公网地址,需要开放端口供其它节点连接上来;剩余的 Edgenode 可以没有公网地址,各个 Edgenode 边缘节点之间会尝试绕过 Supernode 直接连接。这大大提高了节点之间通讯的效率。通讯是加密的,非常安全。 安装的话完全不用安装,直接一个命令就搞定了。 https://github.com/ntop/n2n 弄出两个可执行文件 supernode 和 edge 就好了 超级节点: /usr/local/bin/supernode -p 11111 -v 边缘节点: /usr/local/bin/edge -d n2n0 -c ThisisaSecret2012 -k Fuck2020 -a 192.168.0.2 -l 41.22.59.112:11111 -f 参数解释: -d 生成的虚拟网卡的命名 -c community-name 同一组vpn节点的密码。大家看到启动 supernode 的时候没有任何参数,supdernode 只负责转发,且支持多组不同的 vpn。这里就是用来区分不同的 vpn 组的。 -k 密码,节点之间通讯是用的 twofish 加密算法 -a 节点的ip -l supernode的ip和端口 -f 放到后台 daemon 执行 这样就建立好了,系统中会多出一张 n2n0 的网卡。 ...

2021年11月05日 · 1 分钟 · 77 字 · 八戒

一站式Git软件onedev的安装使用

其实一直在用 github、gitlab、jenkins,但是 github 时不时的抽风, gitlab 的 runner 套 Docker in docker 的方法委实很难用。 所以 CI/CD 这一块反倒挺喜欢阿里云效这种简便易行的。但确实找不到其他合适且类似的软件。 从 V2EX 上看到一个老哥发的 onedev,是一个一站式的开源软件,这不就试试先 以 centos7 为例,安装过程如下: 一、安装 java 1.8 版本 rpm -ivh jdk-8u201-linux-x64.rpm 二、安装 git 高版本 缺省 centos7 和 epel 带的 git 版本太低,不符合要求,得加个新的源装新版本 yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm yum -y install git curl 三、安装配置 onedev https://github.com/theonedev/onedev 下载压缩包,然后解压运行 bin/server.sh start ,很简洁,不错! 运行完打开 http://192.168.86.101:6610 进行初始配置,就两步就 ok 了。 三、例子 我们是要在正式生产环境用的,所以在 projects 新建一个项目 spring-boot,以 spring-petclinic 为例: 然后到源代码目录下 ...

2021年11月05日 · 1 分钟 · 117 字 · 八戒

Haproxy的Zero downtime重启如何做

Nginx 可以用 kill -HUP 来重启,不会丢失已建连接。Haproxy 如何做才能做到 zero downtime 无缝重载呢? 做法如下: 一、配置 编译harpoxy的时候带上参数 USE_SYSTEMD,选择 Haproxy 1.8 以上版本 make TARGET=linux2628 USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 \ USE_SYSTEMD=1 USE_PCRE=1 USE_PCRE_JIT=1 USE_NS=1 make install Haproxy无缝重载技术: 旧进程当前管理的连接根据 file descriptor 文件描述符通过 socket 套接字传输到新进程。 在这个过程中,文件socket(unix socket)的连接没有断开。 新进程在充当 master-worker 主工作者的同时执行此任务。 综上所述,通过使用unix socket来维护连接状态并在旧进程和新进程之间传递,防止了连接丢失。 haproxy 的运行使用 Systemd 重载,使用 -Ws 方式。 (此外,在构建时必须启用 USE_SYSTEMD) -D : start as a daemon. The process detaches from the current terminal after forking, and errors are not reported anymore in the terminal. It is equivalent to the "daemon" keyword in the "global" section of the configuration. It is recommended to always force it in any init script so that a faulty configuration doesn't prevent the system from booting. -W : master-worker mode. It is equivalent to the "master-worker" keyword in the "global" section of the configuration. This mode will launch a "master" which will monitor the "workers". Using this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to the master. The master-worker mode is compatible either with the foreground or daemon mode. It is recommended to use this mode with multiprocess and systemd. -Ws : master-worker mode with support of `notify` type of systemd service. This option is only available when HAProxy was built with `USE_SYSTEMD` build option enabled. 具体的启动脚本:/etc/systemd/system/haproxy.service ...

2021年11月04日 · 2 分钟 · 389 字 · 八戒