Kubernetes使用ingress反向代理外部IP
我们平常使用 k8s 的 service 都是自动发现增加 endpoint 的,但是有的时候集群外的服务我们又想用 k8s 的 ingress 来统一做入口,就会涉及到自定义 endpoint 创建 service123456789101112apiVersion: v1kind: Servicemetadata: name: kibana namespace: opsspec: type: ClusterIP ports: - name: kibana port: 80 protocol: TCP targetPort: 80 创建 endpoint12345678910111213apiVersion: v1kind: Endpointsmetadata: name: kibana namespace: opssubsets:- addresses: - ip: 10.0.0.12 - ip: 10.0.0.13 ports: - name: kibana port: 5601 protocol: TCP 创建...
Kafka常用操作记录
经常用到的 Kafka 命令记录以下,方便查找。kafka 的搭建可以参考这篇文章 Kafka和zookeeper搭建 注意: –bootstrap-server 参数配置的 kafka 地址需要根据 kafka 监听地址来判断, 如果监听的是自己的 ip 而不是 0.0.0.0, 那就不要配置 localhost, 改用 ip 地址. Topic 操作123456789101112131415161718# 创建topicbin/kafka-topics.sh --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 3 --topic test_topic# 查看topic具体信息bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic test_topic# 查看所有的topic列表bin/kafka-topics.sh --bootstrap-server...
编译安装Nginx记录
通常来说编译不通过都是因为系统环境不满足条件,如缺少包等,本文以 CentOS 7 系统为例,其中有些包如 xxx-devel 在 ubuntu 下一般都是叫做 xxx-dev 的,实在找不到可以使用 apt-file 查找文件属于哪个包。 需要准备好这些包(不用监控可以不用准备 nginx-module-vts): 1234wget https://nginx.org/download/nginx-1.22.0.tar.gzwget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.tar.gzwget https://ftp.openssl.org/source/openssl-1.1.1p.tar.gzwget https://ftp.exim.org/pub/pcre/pcre-8.45.tar.gz 全部解压,然后进入 nginx-1.22.0 目录操作 首先运行一遍 configure 命令12345678910111213141516./configure...
Kubernetes 绑定Hosts的正确姿势
有的时候我们需要在容器里面绑定 hosts,比如我们用 logstash 需要消费 kafka 消息,但是 kafka 监听的地址是 hostname,这个时候就需要绑定 hosts(规范一点是做解析)在容器里面绑定 hosts 常见的方法一种是挂载主机的 hosts 文件,一种是修改容器的启动 CMD,每次启动修改 hosts,这两种方法都有个缺点,就是不受 kubelet 管理了,默认的 hosts 内容也会被覆盖掉在 k8s 环境下有更好的解决方案:那就是让 k8s 自己来管理 使用 hostAliases 来绑定 hosts12345678910111213141516171819202122232425apiVersion: apps/v1kind: Deploymentmetadata: name: logstash-k8s namespace: opsspec: replicas: 1 selector: matchLabels: app: logstash-k8s template: metadata: labels: ...
Nginx Ingress 定义多种日志格式
生产环境有个项目需要打开 nginx 日志的 request_body 日志记录,但是如果把默认的日志格式改掉的话,日志量就太大了,所以查了一下针对某个域名进行搜集不同的日志。 k8s 的 ingress 其实就是 nginx 封装了一层,所以 nginx 可以做的,ingress 也都可以做,nginx 我们知道可以定义不同的日志格式,然后不同的虚拟主机来引用就好了。先查看文档,发现了 nginx-ingress 有一个叫 http-snippet 的参数,意思就是在 http 块下面增加一段原生的 Nginx 配置 在 configmap 里面增加一个新的日志格式配置我们可以在 ingress-nginx 的 configmap 里面添加一个新的日志格式: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647kind: ConfigMapapiVersion: v1metadata: name: ingress-nginx-controller ...
使用Systemd Timesyncd服务来同步Linux时间
现代 Linux 发行版都采用 systemd 管理系统,systemd 体系也提供了基础的 timesyncd 服务来实现 SNTP 客户端,可以替代传统的 ntpd 来实现主机 NTP 同步 (客户端)。虽然不能作为 NTP 服务器,但是精简的 systemd-timesyncd 可以实现非常轻量级的时钟同步功能。 systemd-timesyncd 是通过网络提供系统时钟同步的服务,实现了 SNTP client。和 NTP 实现 chrony ntp 服务不同, systemd-timesyncd 只实现客户端功能,而不是实现完整的 NTP,聚焦于从远程服务器查询时间并同步到本地时钟。除非你需要需要为网络中其他 NTP 客户端提供服务或者需要连接本地硬件时钟,否则一个简单的 NTP 客户端,例如 systemd-timesyncd ,往往是最好的解决方案。这个时钟同步客户端运行只需要最小的权限。每次新的 NTP 同步请求发起,timesyncd 服务就把当前时钟保存到磁盘,并使用它来矫正启动时的系统时钟,这样就适合用于缺少 RTC 的设备,例如 Raspberry Pi...
编写安全健壮的shell脚本
编写 shell 脚本容易出现的问题:比如变量为空的时候,管道报错等,容易引起一系列问题甚至灾难性的结果。可以借助工具https://www.shellcheck.net/来检查脚本里面可以改进的地方。 脚本里使用 set建议使用 1set -euo pipefail set -oset -o 可以查看 shell 的选项开关,比如常用的 pipefail 1set -o | pipefail pipefail 是指在一个管道命令中,任意一个命令执行失败就认为命令报错(但是可以继续执行,想让它报错退出需要再加上 set -e) 可以在 shell 脚本开头加上 set -o pipefail,我们来看一个例子: 1234567#!/bin/bashset -o pipefailcat test.txt | tee test2.txtecho $?# 假设test.txt不存在,这个时候输出的是1# 如果去掉 set -o pipefail,这个时候输出的是0 set -eset -e 是指任意一条命令返回值不是...
Nginx之server_name匹配和listen匹配
nginx 可以通过 listen 的 ip 和端口来匹配请求应该由哪个配置文件来处理,也可以通过 server_name 来匹配,抽空理了理这个匹配的规则和优先级,参考文档: 基于域名的虚拟主机默认是先匹配 listen 的 ip 和端口,匹配到了再检查 server_name,如果没有匹配的 server_name,则由第一个来处理,除非添加 default_server 12345678910111213server { listen 80; server_name example.net; default_type application/json; return 200 '{"server_name":"$server_name", "host": "$host", "server_addr":"$server_addr"}';}server { ...
使用vscode来写hugo博客并处理图片插入问题
如果对 typora 情有独钟的同学可以参考https://zahui.fan/posts/b4cf69c3/,不过我用来用去还是发现 vscode 好,哪怕不写代码,仅仅写文章也挺不错的。不过直接用的话有很多问题,我们还需要借助 vscode 强大的插件系统。 插入到 static 目录插入图片问题我们在写博客的时候,有时会有一些插入图片的需求,之前的做法是 – 截图保存到 static/images 目录,然后文章里面添加 ,操作很繁琐,或者也可以使用图床,不过也挺麻烦的。我们可以用一款叫 paste image 的插件来简化我们的插入图片的操作。 假设你的博客图片放在仓库根目录的 static/images 目录下,博客文章在其他地方,需要修改 图片存放的位置: 图片的基础路径: 即在 markdown 文件里面不显示 static 了,只从 images 开始显示 路径的前缀: 如果不加的话,路径是类似于...
Kafka + Zookeeper集群搭建
新版本的 kafka 可以不依赖 zookeeper,不过目前处于测试阶段,且不支持 zookeeper 迁移到新本,所以在生产环境还是建议等一等。本文使用的是 kafka_2.13-2.8.1.tgz zookeeper 相关的文档可以参考https://zookeeper.apache.org/doc/r3.8.0/zookeeperStarted.html 安装规划 说明 目录 kafka 程序目录 /data/src/kafka_2.13-2.8.1 kafka 数据目录 /data/kafka-logs zookeeper 数据目录 /data/zookeeper_data 准备首先需要安装 java 环境Ubuntu和DebianCentOS和Fedora1sudo apt install -y openjdk-8-jdk-headless1sudo yum install -y java-1.8.0-openjdk 创建目录123mkdir...