因家里部署了K3S,借助K8S的安全,在K8S部署adguardhome过滤广告。由于我家里的K3S只有单机,故部署脚本如下:
在单机 Kubernetes 环境中,可以将 AdGuard 配置调整为使用本地存储,以便数据可以在容器重启或主机重启后仍然保留。以下是改进的 YAML 配置,添加了对本地存储的支持。
adguard-deployment-local.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: adguard
namespace: mmgg
spec:
replicas: 1
selector:
matchLabels:
app: adguard
strategy:
type: Recreate
template:
metadata:
labels:
app: adguard
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: adguard
image: adguard/adguardhome:latest
ports:
- name: web
containerPort: 3000
- name: web2
containerPort: 3100
- name: dns
containerPort: 53
protocol: UDP
- name: dns-tcp
containerPort: 53
protocol: TCP
volumeMounts:
- name: adguard-config
mountPath: /opt/adguardhome/work
- name: adguard-data
mountPath: /opt/adguardhome/conf
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
volumes:
- name: adguard-config
hostPath:
path: /root/adguard/work
type: DirectoryOrCreate
- name: adguard-data
hostPath:
path: /root/adguard/conf
type: DirectoryOrCreate
主要特点
- 使用
hostPath
实现本地存储:- 配置文件和数据存储路径分别为
/root/adguard/work
和/root/adguard/conf
。 - Kubernetes 将这两个路径映射到容器中的
/opt/adguardhome/work
和/opt/adguardhome/conf
。 type: DirectoryOrCreate
:如果目录不存在,会自动创建。
- 配置文件和数据存储路径分别为
- 资源限制:
- 为 AdGuard 设置了合理的 CPU 和内存请求与限制,以确保单机环境稳定。
- 添加 hostNetwork: true。
- Pod 会共享宿主机的 IP 地址,并使用宿主机的网络接口。
- 设置 dnsPolicy: ClusterFirstWithHostNet,以确保 Pod 能解析集群内的 DNS。
部署与测试
-
应用配置:
kubectl apply -f adguard-deployment-local.yaml
-
检查本地存储内容:
- 配置和数据将保存在
/root/adguard/work
和/root/adguard/conf
中。 - 可以直接检查这些目录来确认文件是否正确存储。
注意事项
- 权限问题: 确保 Kubernetes 节点的
/root/adguard
目录有合适的权限,容器内用户可以读写。 - 由于是共享宿主主机的IP来暴露服务,故重启策略需要改成删除重建
Recreate
,而不是滚动更新