update at 2024-03-07 10:41:48
parent
6be2e308bb
commit
354827aa2d
|
@ -0,0 +1,12 @@
|
|||
log-queries=extra
|
||||
no-resolv
|
||||
no-poll
|
||||
server=61.139.2.69
|
||||
strict-order
|
||||
log-dhcp
|
||||
cache-size=2000
|
||||
dhcp-range=10.10.10.11,10.10.10.254,255.255.255.0,12h
|
||||
dhcp-authoritative
|
||||
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
|
||||
dhcp-option=option:router,10.10.10.2
|
||||
dhcp-option=option:dns-server,61.139.2.69,218.6.200.139
|
|
@ -0,0 +1,46 @@
|
|||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
labels:
|
||||
app: dnsmasq
|
||||
name: dnsmasq
|
||||
namespace: default
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: dnsmasq
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: dnsmasq
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 3
|
||||
containers:
|
||||
- image: 4km3/dnsmasq:2.85-r2
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: dnsmasq
|
||||
securityContext:
|
||||
privileged: true
|
||||
args:
|
||||
- '--log-facility=-'
|
||||
volumeMounts:
|
||||
- mountPath: /etc/dnsmasq.conf
|
||||
name: dnsmasq-config
|
||||
subPath: dnsmasq.conf
|
||||
- mountPath: /var/lib/dnsmasq
|
||||
name: lease
|
||||
hostNetwork: true
|
||||
restartPolicy: Always
|
||||
volumes:
|
||||
- configMap:
|
||||
name: dnsmasq-config
|
||||
name: dnsmasq-config
|
||||
- name: lease
|
||||
hostPath:
|
||||
path: /data/lease
|
||||
type: DirectoryOrCreate
|
||||
updateStrategy:
|
||||
rollingUpdate:
|
||||
maxSurge: 0
|
||||
maxUnavailable: 1
|
||||
type: RollingUpdate
|
|
@ -0,0 +1,44 @@
|
|||
# DHCP 与 DNS 服务
|
||||
|
||||
DHCP 与 DNS 服务需在主路由上开启,如果用的主路由方案,可用云原生的方式部署一个 DHCP 和 DNS 服务,dnsmasq 是一个同时支持这两种功能的开源软件,我们可以用下面的方法部署。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```txt
|
||||
dnsmasq
|
||||
├── config
|
||||
│ └── dnsmasq.conf
|
||||
├── daemonset.yaml
|
||||
└── kustomization.yaml
|
||||
```
|
||||
|
||||
## 准备 dnsmasq 配置
|
||||
|
||||
<FileBlock showLineNumbers title="config/dnsmasq.conf" file="home-network/dnsmasq.conf" />
|
||||
|
||||
* `server` 指向上游的 DNS 地址,主路由在 PPPoE 拨号后会自动获取上游 dns 地址并写到 `/etc/resolv.conf`,可以复制过来。
|
||||
* `dhcp-range` 指定内网设备自动获取的 IP 地址范围以及子网掩码。
|
||||
* `dhcp-option=option:router` 指定内网设备的默认网关,即当前主路由的内网静态 IP 地址。
|
||||
* `dhcp-option=option:dns-server` 指定内网设备自动获取的 DNS 地址,通常写 dnsmasq 自身的地址,即主路由的内网静态 IP 地址,不过由于我用了透明代理,希望内网设备直接用 PPPoE 拨号获得的运营商的 DNS 地址。
|
||||
|
||||
|
||||
## 准备 daemonset.yaml
|
||||
|
||||
<FileBlock showLineNumbers title="daemonset.yaml" file="home-network/daemonset.yaml" />
|
||||
|
||||
## 准备 kustomization.yaml
|
||||
|
||||
```yaml
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- daemonset.yaml
|
||||
|
||||
configMapGenerator:
|
||||
- name: dnsmasq-config
|
||||
files:
|
||||
- config/dnsmasq.conf
|
||||
|
||||
namespace: default
|
||||
```
|
|
@ -17,6 +17,21 @@ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIR
|
|||
|
||||
## 应用部署与配置维护方式
|
||||
|
||||
所有应用使用 kubernetes 的 YAML 进行声明式部署,YAML 通过 kustomize 引用,应用的相关配置文件通过 kustomize 自动生成相关的 ConfigMap 或 Secret 挂载进去。
|
||||
使用 kubernetes 的 YAML 进行声明式部署,YAML 通过 kustomize 引用,应用的相关配置文件通过 kustomize 自动生成相关的 ConfigMap 或 Secret 挂载进去。如果应用使用 helm chart 渲染,在 kustomize 中也可以被引用。
|
||||
|
||||
如果应用使用 helm chart 渲染,在 kustomize 中也可以被引用。
|
||||
每个应用使用一个目录来声明所有 yaml 和所需配置,在目录内执行以下命令安装到 k3s:
|
||||
|
||||
```bash
|
||||
kustomize build --enable-helm --load-restrictor=LoadRestrictionsNone . | kubectl apply -f -。
|
||||
```
|
||||
|
||||
如果要一键部署,在上层目录中再建一个 `kustomization.yaml` 引用所有应用的目录,然后在上层目录中执行上面相同的命令可以实现所有应用一键部署。
|
||||
|
||||
## YAML 声明方式
|
||||
|
||||
使用云原生的方式主要为了实现容器化、声明式管理的能力,不引入其它复杂的特性,所以考虑:
|
||||
|
||||
* 使用 Daemonset 这种类型的工作负载进行部署,保证只有一个副本,滚动更新策略为先销毁旧的,再创建新的。
|
||||
* 使用 HostNetwork,不使用容器网络。
|
||||
* 使用特权容器,避免因权限导致的各种问题。
|
||||
* 如果数据需要持久化,挂载 hostPath。
|
||||
|
|
Loading…
Reference in New Issue