k8s生产实践
k8s在生产中需要注意的各种事项和便捷方法
1 | spring: |
validation-query
validation-query
是一个 SQL 查询语句,用于验证连接是否仍然有效。当连接从连接池中获取并且处于空闲状态时,Hikari 连接池会执行 validation-query
来确保连接仍然有效。如果执行 validation-query
失败或返回的结果不符合预期,连接将被标记为无效并从连接池中移除,然后将会尝试获取一个新的连接来替代。默认情况下,validation-query
被设置为 null
,表示不进行连接的验证。
connection-test-query
connection-test-query
是一个可选的 SQL 查询语句,用于在连接被创建时进行测试。当连接池创建新的连接时,会在连接被返回之前执行 connection-test-query
。如果执行 connection-test-query
失败或返回的结果不符合预期,连接将被标记为无效并丢弃,然后将会尝试获取一个新的连接来替代。默认情况下,connection-test-query
被设置为 null
,表示不进行连接的测试。
总结起来,validation-query
在连接从连接池中获取时进行验证,而 connection-test-query
在连接被创建时进行测试。这两个属性的目的都是确保连接的有效性,并在需要时替换无效的连接。
validation-timeout 毫秒 默认5s
当连接从连接池中获取并且处于空闲状态时,连接池会执行 validation-query
来验证连接的有效性。validation-timeout
指定了执行验证查询的最大等待时间。如果在指定的超时时间内无法完成验证查询,连接将被标记为无效并从连接池中移除,然后将会尝试获取一个新的连接来替代。
https://www.elastic.co/cn/downloads/elasticsearch
1 | 使用非root用户 |
https://www.elastic.co/cn/downloads/kibana
1 | 使用非root用户 |
1 | # fluent-package 5 (LTS) |
编辑配置文件
1 | vim /etc/fluent/fluentd.conf |
多行匹配
1 | <source> |
对我来说netbird比headscale好处就是可以分组自定义peer路由,完全实现服务端控制下发路由,且下发和回收路由速度几乎秒级(headscale关闭路由后很长时间不清理路由)
参考:
https://icloudnative.io/posts/custom-derp-servers/
1 | server_url: https://xxxxxxxx # 必须是https |
nginx:
1 | map $http_upgrade $connection_upgrade { |
1 | docker run --restart always \ |
有几点需要注意:
3478
;假设你的域名是 xxx.com
,那么证书的名称必须是 xxx.com.crt
,一个字符都不能错!同理,私钥名称必须是 xxx.com.key
,一个字符都不能错!
部署好 derper 之后,就可以修改 Headscale 的配置来使用自定义的 DERP 服务器了。Headscale 可以通过两种形式的配置来使用自定义 DERP:
JSON
,与 Tailscale 官方控制服务器使用的格式和语法相同。YAML
。我们可以直接使用本地的 YAML 配置文件,内容如下:
1 | # /etc/headscale/derp.yaml |
配置说明:
regions
是 YAML 中的对象,下面的每一个对象表示一个可用区,每个可用区里面可设置多个 DERP 节点,即 nodes
。regionid
不能重复。node
的 name
不能重复。regionname
一般用来描述可用区,regioncode
一般设置成可用区的缩写。ipv4
字段不是必须的,如果你的域名可以通过公网解析到你的 DERP 服务器地址,这里可以不填。如果你使用了一个二级域名,而这个域名你并没有在公共 DNS server 中添加相关的解析记录,那么这里就需要指定 IP(前提是你的证书包含了这个二级域名,这个很好支持,搞个泛域名证书就行了)。stunonly: false
表示除了使用 STUN 服务,还可以使用 DERP 服务。接下来还需要修改 Headscale 的配置文件,引用上面的自定义 DERP 配置文件。需要修改的配置项如下:
1 | # /etc/headscale/config.yaml |
重启后访问https://xxxx:12345
tailscale netcheck
1 | 服务器C ping 服务器A 内网docker服务 |
一般来说,如果算到点对点就优先走点对点,否则走了DERP延迟更高
先在derp节点启动tailscale
1 | headscale preauthkeys create -e 24h -u t1 |
再启动derp
1 | docker run --restart always \ |
我的手机是Android10,需要将证书从用户移动到系统,但是MT管理器和RE管理器和adb,移动都会挂载失败,然后网上去搜索后,才知道,Android10对于/system目录只有读的权限。
解决方法:用magisk的模块movecert(https://github.com/Magisk-Modules-Repo/movecert),我的magisk版本为25.2,本地安装一直报unzip error,我就放弃直接用magisk安装,然后找到一个magisk的模块,可以代替magisk安装,FoxMagiskModuleManager(https://github.com/Fox2Code/FoxMagiskModuleManager)。可以在我分享的网盘链接下载链接:https://pan.baidu.com/s/1U_g536YICT3q-bcdMROzbg
提取码:xzcc。
安装方法:1.安装apk,2.将zip adb push 到手机,3.打开apk,安装zip,重启手机,4.打开加密与凭证,就可以看到证书移动到系统里了
参考:
在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:
1 | [Service] |