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
创建Ingress1234567891011 ...
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 localhost:9092 --list# 删除topic ...
编译安装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/iuxt/nginx-module-vts/archive/refs/tags/v0.1.18.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 --prefix=/usr/local/nginx \ ...
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: app: logstash-k8s sp ...
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 namespace: ingress-nginx labels: ...
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 { listen 80; ...
使用vscode来写hugo博客并处理图片插入问题
如果对typora情有独钟的同学可以参考https://zahui.fan/posts/b4cf69c3/,不过我用来用去还是发现vscode好,哪怕不写代码,仅仅写文章也挺不错的。不过直接用的话有很多问题,我们还需要借助vscode强大的插件系统。
插入到static目录插入图片问题我们在写博客的时候,有时会有一些插入图片的需求,之前的做法是–截图保存到static/images目录,然后文章里面添加![图片说明](https://static.zahui.fan/images/xxx.png),操作很繁琐,或者也可以使用图床,不过也挺麻烦的。我们可以用一款叫paste image的插件来简化我们的插入图片的操作。
假设你的博客图片放在仓库根目录的static/images目录下,博客文章在其他地方,需要修改
图片存放的位置:
图片的基础路径:
即在markdown文件里面不显示static了,只从images开始显示
路径的前缀:
如果不加的话,路径是类似于![图片说明](images/xxx.png),我们想要的是![图片说明](https:/ ...
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 /data/kafka-logs -pmkdir /data/ ...
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恢复正常 ...