使用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或者嵌入设备,可以确保这些系统时钟正确。需要注意,在安装Sy ...
编写安全健壮的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 是指任意一条命令返回值不是0,脚本就退出不继续执行了。
如果有些程序想要人为的忽略报错,可以在命令开始前加上set ...
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目录,然后文章里面添加,操作很繁琐,或者也可以使用图床,不过也挺麻烦的。我们可以用一款叫paste image的插件来简化我们的插入图片的操作。
假设你的博客图片放在仓库根目录的static/images目录下,博客文章在其他地方,需要修改
图片存放的位置:
图片的基础路径:
即在markdown文件里面不显示static了,只从images开始显示
路径的前缀:
如果不加的话,路径是类似于,我们想要的是等,但是负载均衡本身就是一个单点故障,所以一般来说还需要另一台负载均衡,通过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 ...
Hugo博客批量更换url结构
之前修改过hugo的url结构,config.toml内容如下:
12[Permalinks] posts = ":slug"
生成的URL类似于:https://zahui.fan/a7c8660c/ 不过这样随着文件越来越多,发布用的仓库根目录文件夹也越来越多,不好看,再加上域名后加上光秃秃的无意义的字符串也不优雅,所以决定改成https://zahui.fan/posts/a7c8660c/这样的域名结构。
修改config.toml我们需要修改config.toml,改变默认的url结构
12[Permalinks] posts = "/posts/:slug"
这样重新生成博客,url路径就会变成新的了
配置自动跳转这样配置的话,之前的url连接就会全部404了,对于做了SEO的同学来说就是个灾难,所以我们需要做个跳转
在frontmatter添加aliases:
123456789101112---title: "安装和配置samba共享"date: 2022-02-11T11:18:21+08:00abb ...