分类目录归档:技术笔记

常用公共 DNS 服务器

汇总表格

名称 IPv4 IPv6
DNSPod 119.29.29.29 2402:4e00::
AliDNS 223.5.5.5 223.6.6.6 2400:3200::1 2400:3200:baba::1
BaiduDNS 180.76.76.76 2400:da00::6666
360DNS 101.226.4.6 218.30.118.6 123.125.81.6 140.207.198.6
114DNS 114.114.114.114 114.114.115.115
ChinaDNS 1.2.4.8 210.2.4.8 2001:dc7:1000::1
OneDNS 117.50.11.11 117.50.22.22
Hi!XNS DNS 40.73.101.101
TWNIC DNS 101.101.101.101 101.102.103.104 2001:de4::101 2001:de4::102

国内知名公共 DNS 服务器

腾讯 DNS (DNSPod)

由 DNSPod 提供的公共免费 DNS,后来 DNSPod 被腾讯(Tencent)收购,现在属于腾讯公司所有,稳定性和连通性也是不错的,经测试海外也可以使用。 DNSPod 除了 IPv4,现在同时支持 IPv6 DNS 和 DoT/DoH 服务。

类型 地址
IPv4 119.29.29.29
IPv6 2402:4e00::
DoH https://doh.pub/dns-query
DoH (国密 SM2) https://sm2.doh.pub/dns-query
DoT dot.pub

阿里 DNS (Alidns)

这组 DNS 是由阿里巴巴提供的,国内连通性还是不错的,海外部分地区连通性不是特别好,具体可以测试一下。 阿里 DNS 同时提供了 IPv4/IPv6 DNS 和 DoT/DoH 服务。

类型 地址
IPv4 223.5.5.5 223.6.6.6
IPv6 2400:3200::1 2400:3200:baba::1
DoH https://dns.alidns.com/dns-query
DoT dns.alidns.com

百度 DNS

中国最大的搜索引擎百度提供的公共 DNS,经测试海外连通性也是不错的,暂时百度只提供了一组 IPv4 和 IPv6 DNS 地址。

类型 地址
IPv4 180.76.76.76
IPv6 2400:da00::6666

360 安全 DNS

360 提供的 DNS 服务,只提供了 IPv4 和 DoT/DoH 服务。

针对中国电信/铁通/移动的 IPv4:

类型 地址
IPv4(电信/铁通/移动) 101.226.4.6 218.30.118.6
IPv4(联通) 123.125.81.6 140.207.198.6
DoH https://doh.360.cn
DoT dot.360.cn

国内运营商

类型 地址
安徽电信IPv4 61.132.163.68 202.102.213.68
北京电信IPv4 219.141.136.10 219.141.140.10
重庆电信IPv4 61.128.192.68 61.128.128.68
福建电信IPv4 218.85.152.99 218.85.157.99
甘肃电信IPv4 202.100.64.68 61.178.0.93
广东电信IPv4 202.96.128.86 202.96.128.166
202.96.134.133 202.96.128.68
广西电信IPv4 202.103.225.68 202.103.224.68
贵州电信IPv4 202.98.192.67 202.98.198.167
河南电信IPv4 222.88.88.88 222.85.85.85
黑龙江电信IPv4 219.147.198.230 219.147.198.242
湖北电信IPv4 202.103.24.68 202.103.0.68
湖南电信IPv4 222.246.129.80 59.51.78.211
江苏电信IPv4 218.2.2.2 218.4.4.4
61.147.37.1 218.2.135.1
江西电信IPv4 202.101.224.69 202.101.226.68
内蒙古电信IPv4 219.148.162.31 222.74.39.50
山东电信IPv4 219.146.1.66 219.147.1.66
陕西电信IPv4 218.30.19.40 61.134.1.4
上海电信IPv4 202.96.209.133 116.228.111.118
202.96.209.5 180.168.255.118
四川电信IPv4 61.139.2.69 218.6.200.139
天津电信IPv4 219.150.32.132 219.146.0.132
云南电信IPv4 222.172.200.68 61.166.150.123
浙江电信IPv4 202.101.172.35 61.153.177.196
61.153.81.75 60.191.244.5
北京联通IPv4 123.123.123.123 123.123.123.124
202.106.0.20 202.106.195.68
重庆联通IPv4 221.5.203.98 221.7.92.98
广东联通IPv4 210.21.196.6 221.5.88.88
河北联通IPv4 202.99.160.68 202.99.166.4
河南联通IPv4 202.102.224.68 202.102.227.68
黑龙江联通IPv4 202.97.224.69 202.97.224.68
吉林联通IPv4 202.98.0.68 202.98.5.68
江苏联通IPv4 221.6.4.66 221.6.4.67
内蒙古联通IPv4 202.99.224.68 202.99.224.8
山东联通IPv4 202.102.128.68 202.102.152.3
202.102.134.68 202.102.154.3
山西联通IPv4 202.99.192.66 202.99.192.68
陕西联通IPv4 221.11.1.67 221.11.1.68
上海联通IPv4 210.22.70.3 210.22.84.3
四川联通IPv4 119.6.6.6 124.161.87.155
天津联通IPv4 202.99.104.68 202.99.96.68
浙江联通IPv4 221.12.1.227 221.12.33.227
辽宁联通IPv4 202.96.69.38 202.96.64.68
江苏移动IPv4 221.131.143.69 112.4.0.55
安徽移动IPv4 211.138.180.2 211.138.180.3
山东移动IPv4 218.201.96.130 211.137.191.26
IPv6(电信) 240e:4c:4008::1 240e:4c:4808::1
IPv6(联通) 2408:8899::8 2408:8888::8
IPv6(移动) 2409:8088::a 2409:8088::b

114DNS

类型 地址
IPv4 114.114.114.114 114.114.115.115

CNNIC DNS

类型 地址
IPv4 1.2.4.8 210.2.4.8
IPv6 2001:dc7:1000::1

Yeti DNS

Yeti IPv6 Project 是由WIDE、TISF 和 BII 发起的一个只针对 IPv6 的互联网公益 DNS 项目,现阶段主要以 IPv6 服务为主。各公司、学校、组织都可以加入这个项目提供 DNS 服务。

类型 地址
IPv6(北京互联网研究所) 240c:f:1:22::6 240C::6666 240C::6644
南京 240e:eb:8001:e01::53
成都 240e:d9:c200:14c:7472::19e0
广州 2408:8756:f5f:4::6

OneDNS

北京微步在线科技有限公司提供的 DNS 服务,不太了解到底怎么样,大家可以试试看。

类型 地址
IPv4 117.50.11.11 117.50.22.22
纯净版 117.50.10.10/52.80.52.52

Hi!XNS DNS 服务器

嘉兴艾泰德信息技术有限公司提供的 DNS 服务,之前也没有了解过。

类型 地址
IPv4 40.73.101.101

TWNIC DNS Quad 101

类型 地址
IPv4 101.101.101.101 101.102.103.104
IPv6 2001:de4::101 2001:de4::102

国内教育网 DNS 服务器

大学的DNS

类型 地址
北京邮电大学 IPv6 2001:da8:202:10::36 2001:da8:202:10::37
上海交通大学 IPv6 DNS 服务器 2001:da8:8000:1:202:120:2:100 2001:da8:8000:1:202:120:2:101
北京科技大学 2001:da8:208:10::6
中国科技网 2001:cc0:2fff:2::6

Yeti DNS Project 注册的 IPv6 DNS 服务器

类型 地址
中科院网络信息中心 2001:cc0:2fff:1::6666
北京交通大学 2001:da8:205:2060::188
清华大学 2001:da8:ff:305:20c:29ff:fe1f:a92a

清华大学 TUNA 协会 DNS 服务器

据说已经停止对校外用户解析,未验证,可以自己试试看。

类型 地址
IPv4 101.6.6.6
IPv6 2001:da8::666

海外知名公共 DNS 服务器

Google Public DNS

Google 提供的公共免费 DNS,应该是最流行的 公共 DNS 了,不过国内可能无法正常使用,同时提供 IPv4/IPv6/DoT/DoH 服务。

类型 地址
IPv4 8.8.8.8 8.8.4.4
IPv6 2001:4860:4860::8888 2001:4860:4860::8844
DoH https://dns.google/dns-query
DoH(IPv6) https://dns64.dns.google/dns-query
DoT dns.google

Cloudflare DNS

Cloudflare DNS 是 Cloudflare 与 APNIC 联合推出的号称全球最快的 DNS 服务。APNIC 是一个管理亚太与大洋洲地区 IP 地址分配的非盈利性组织,1.1.1.1 归 APNIC 所有,现在交给 Cloudflare 来提供 DNS 服务,同时提供 IPv4/IPv6/DoT/DoH 服务。

类型 地址
IPv4 1.1.1.1 1.0.0.1
IPv6 2606:4700:4700::1111 2606:4700:4700::1001
DoH https://cloudflare-dns.com/dns-query
https://1.1.1.1/dns-query
https://1.0.0.1/dns-query
DoH(IPv6) https://dns64.dns.google/dns-query
DoT 1dot1dot1dot1.cloudflare-dns.com one.one.one.one

Quad9 DNS

IBM 发起的 Quad9 提供的公共免费 DNS 服务,同时包含 IPv4/IPv6/DoT/DoH.

类型 地址
IPv4 9.9.9.9 149.112.112.112
IPv6 2620:fe::fe 2620:fe::9
DoH https://dns.quad9.net/dns-query
DoT dns.quad9.net

DNS.SB

德国的一个公共 DNS 服务商 提供的 DNS 服务器,除了德国之外,还在荷兰/英国/爱沙尼亚/俄罗斯/美国/加拿大/日本/新加坡/印度/韩国/香港/澳大利亚等很多国家和地区有服务器,同时提供 IPv4/IPv6/DoT/DoH 服务。

类型 地址
IPv4 45.11.45.11
IPv6 2a09:: 2a11::
DoH https://doh.dns.sb/dns-query https://doh.sb/dns-query
DoT dot.sb

OpenDNS

OpenDNS 是由美国老牌通信设备商 Cisco 思科 提供的公共 DNS 服务,其中基础版和家庭版提供免费的 IPv4/IPv6/DoH 服务。

类型 地址
IPv4 208.67.222.222 208.67.220.220 208.67.222.220 208.67.220.222
IPv6 2620:119:35::35 2620:119:53::53
DoH https://doh.opendns.com/dns-query

OpenDNS FamilyShield

(OpenDNS 家庭盾版 DNS,应该是有安全+防成人内容的功能)

类型 地址
IPv4 208.67.222.123 208.67.220.123
IPv6 2620:119:35::123 2620:119:53::123
DoH https://doh.familyshield.opendns.com/dns-query

Yandex DNS

Yandex DNS 是俄国最大的搜索引擎 Yandex 提供的 DNS 服务,提供基础版/安全版/家庭版三个版本的 IPv4/IPv6 服务。

  • 基础版(快速可靠)

  • 安全版(病毒和钓鱼防御)

  • 家庭版(拦截成人内容)

类型 地址
基础版IPv4 77.88.8.8 77.88.8.1
基础版IPv6 2a02:6b8::feed:0ff 2a02:6b8:0:1::feed:0ff
安全版IPv4 77.88.8.88 77.88.8.2
安全版IPv6 2a02:6b8::feed:bad 2a02:6b8:0:1::feed:bad
家庭版IPv4 77.88.8.7 77.88.8.3
家庭版IPv6 2a02:6b8::feed:a11 2a02:6b8:0:1::feed:a11

COMODO SecureDNS

COMODO 是美国知名的 IT 安全服务商,这个 DNS 是由 COMODO 提供的安全 DNS.

类型 地址
IPv4 8.26.56.26 8.20.247.20

Neustar UltraDNS

Neustar UltraDNS 是美国信息服务公司 Neustar 提供的公共免费 DNS 服务.

  • 基础版(快速可靠)
  • 安全版(病毒和钓鱼防御)
  • 家庭版(拦截成人内容)
类型 地址
基础版IPv4 64.6.64.6 64.6.65.6
基础版IPv6 2620:74:1b::1:1 2620:74:1c::2:2
安全版IPv4 156.154.70.2 156.154.71.2
安全版IPv6 2610:a1:1018::2 2610:a1:1019::2
家庭版IPv4 156.154.70.3 156.154.71.3
家庭版IPv6 2610:a1:1018::3 2610:a1:1019::3

Level 3 Parent DNS

美国 Level 3 Parent 公司 提供的 DNS 服务器,如果 Windows 升级出现问题,可以使用这个 DNS 服务器。

类型 地址
IPv4 4.2.2.1 4.2.2.2 4.2.2.3 4.2.2.4 4.2.2.5 4.2.2.6

References

ArchLinux 图片压缩工具

在 Arch Linux 下有几个优秀的 PNG 图片压缩工具:

  1. OptiPNG
    
    # 安装
    sudo pacman -S optipng

使用示例

optipng -o5 image.png # o5 表示优化级别,范围是 0-7 c“`

  1. pngquant
    
    # 安装
    sudo pacman -S pngquant

使用示例

pngquant –quality=65-80 image.png # 设置质量范围在65-80之间


3. **Trimage**
- 这是一个带 GUI 界面的工具,可以同时压缩 PNG 和 JPEG
```bash
# 安装(从 AUR)
yay -S trimage
  1. oxipng
    
    # 安装(从 AUR)
    yay -S oxipng

使用示例

oxipng -o 4 image.png # o4 表示优化级别,范围是 0-6


个人推荐:
- 如果喜欢命令行,推荐使用 **optipng** 或 **pngquant**
  - optipng 无损压缩,但压缩率相对较低
  - pngquant 有损压缩,但压缩率高,且视觉效果通常很好
- 如果需要 GUI 界面,可以使用 **Trimage**

所有这些工具都可以通过 pacman 或 AUR 轻松安装。你也可以将它们结合使用,以获得最佳的压缩效果。

## OptiPNG

```bash
$ optipng -o5 10ti5a3.png 
** Processing: 10ti5a3.png
2345x1243 pixels, 4x8 bits/pixel, RGB+alpha
Reducing image to 3x8 bits/pixel, RGB
Input IDAT size = 2715319 bytes
Input file size = 2719369 bytes

Trying:
  zc = 9  zm = 9  zs = 0  f = 1         IDAT size = 2669468
  zc = 9  zm = 8  zs = 0  f = 1         IDAT size = 2664950
  zc = 9  zm = 9  zs = 1  f = 1         IDAT size = 2636506
  zc = 9  zm = 8  zs = 1  f = 1         IDAT size = 2634703
  zc = 9  zm = 9  zs = 0  f = 2         IDAT size = 2460587
  zc = 9  zm = 8  zs = 0  f = 2         IDAT size = 2454191
  zc = 9  zm = 9  zs = 0  f = 4         IDAT size = 2337037
  zc = 9  zm = 8  zs = 0  f = 4         IDAT size = 2332616
  zc = 9  zm = 9  zs = 1  f = 4         IDAT size = 2294549
  zc = 9  zm = 8  zs = 1  f = 4         IDAT size = 2289899
  zc = 9  zm = 9  zs = 3  f = 4         IDAT size = 2279697

Selecting parameters:
  zc = 9  zm = 9  zs = 3  f = 4         IDAT size = 2279697

Output IDAT size = 2279697 bytes (435622 bytes decrease)
Output file size = 2279775 bytes (439594 bytes = 16.17% decrease)

# optipng 会覆盖原始文件,这里仅展示大小对比
$ ls -lha 10ti5a3*
-rw-r--r-- 1 songtianlun songtianlun 2.2M 11月22日 09:46 10ti5a3-c.png
-rw-r--r-- 1 songtianlun songtianlun 2.6M 11月22日 09:46 10ti5a3.png

pngquant

$ pngquant --quality=65-80 10ti5a3.png
$ ls -lha 10ti5a3*
-rw-r--r-- 1 songtianlun songtianlun 2.2M 11月22日 09:46 10ti5a3-c.png
-rw-r--r-- 1 songtianlun songtianlun 987K 11月22日 09:50 10ti5a3-fs8.png
-rw-r--r-- 1 songtianlun songtianlun 2.6M 11月22日 09:46 10ti5a3.png

Trimage

Trimage 软件截图

效果类似 OptiPNG,灵活性不及,好在有 GUI,按需选择。

除此之外还有类似 tinypng 在线方案,也很好用。

#ArchLinux #GNU_Linux

K8s 第一个容器及服务 whoami

示例资源清单

示例部署资源清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: whoami
      release: canary
  template:
    metadata:
      labels:
        app: whoami
        release: canary
    spec:
      containers:
      - name: whoami
        image: traefik/whoami:v1.10
        ports:
        - name: http
          containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: whoami
spec:
  type: NodePort
  selector:
    app: whoami
    release: canary
  ports:
  - name: http
    port: 80
    targetPort: 80 # pod port
    nodePort: 30080

部署:

kubectl apply -f xxx.yaml

关键参数说明

我来为您解释这个 Kubernetes 配置文件中的关键参数:

Deployment 部分

apiVersion: apps/v1  # K8s API 版本
kind: Deployment     # 资源类型为 Deployment

metadata:

  • name: whoami-deploy – Deployment 的名称

spec:

  • replicas: 1 – 指定要运行的 Pod 副本数量
  • selector – 用于选择要管理哪些 Pod
    • matchLabels – Pod 必须包含这些标签才会被该 Deployment 管理
      • app: whoami
      • release: canary

template: – Pod 的模板定义

  • metadata/labels – 为创建的 Pod 添加标签
  • containers – 容器配置
    • image: traefik/whoami:v1.10 – 使用的容器镜像
    • containerPort: 80 – 容器内部暴露的端口

Service 部分

kind: Service       # 资源类型为 Service
type: NodePort      # Service 类型为 NodePort,允许从集群外访问

selector: – 选择要暴露哪些 Pod

  • 与 Deployment 中的标签对应:
    • app: whoami
    • release: canary

ports:

  • port: 80 – Service 的端口
  • targetPort: 80 – Pod 的目标端口
  • nodePort: 30080 – 节点上暴露的端口(可以通过 :30080 访问)

重要概念说明:

  1. 这是一个完整的应用部署配置,包含了 Deployment(管理 Pod)和 Service(暴露服务)两部分

  2. 标签(Labels)在这里起到了关键作用:

    • Deployment 使用标签选择器来管理 Pod
    • Service 使用相同的标签来确定要暴露哪些 Pod
  3. 端口映射关系:

    • 容器端口 80
    • Service 端口 80
    • 节点端口 30080(外部访问端口)
  4. NodePort 类型的 Service 允许从集群外部访问服务,端口范围通常在 30000-32767 之间

kuboard v3 快速部署

Kuboard 官网给的 k8s 单节点快速部署似乎不太好用,直接用 docker 的翻译了一份,用于快速部署。

---
apiVersion: v1
kind: Namespace
metadata:
  name: kuboard
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kuboard
  namespace: kuboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kuboard
  template:
    metadata:
      labels:
        app: kuboard
    spec:
      containers:
      - name: kuboard
        image: eipwork/kuboard:v3
        ports:
        - containerPort: 80
          name: http
        - containerPort: 10081
          name: agent
        env:
        - name: KUBOARD_ENDPOINT
          value: "http://192.168.26.133:30080"  # 请替换为您的实际内网 IP
        - name: KUBOARD_AGENT_SERVER_TCP_PORT
          value: "10081"
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        hostPath:
          path: /etc/kuboard/data
          type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
  name: kuboard-svc
  namespace: kuboard
spec:
  selector:
    app: kuboard
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30080
  - name: agent
    port: 10081
    targetPort: 10081
  type: NodePort

Kubard 官网:https://kuboard.cn/

#Kubernetes

Ubuntu 22.04设置DNS

DNS域名系统是网络基础架构的核心部分,提供了一种将域名转换为IP地址的方法。

您可以将DNS视为互联网的电话簿。注意这篇文章不是在Ubuntu 22.04配置自己的DNS服务器。而是给客户端配置DNS的IP地址。

连接到Internet的每个设备均由其IP地址作为唯一标识。当您在浏览器中键入要访问的网站时,其域名必须转换为相应的IP地址。

什么是 DNS与DNS工作方式

操作系统首先检查其hosts文w件中是否存在相应的域,如果域名中不存在hosts文件,它将查询配置的DNS域名服务器以解析指定的域名。

域名解析后,系统将缓存请求并保留域名和相应IP地址的记录。DNS域名服务器为其他设备执行DNS解释的服务器。

通常,DNS服务器地址由您的ISP分配。但是,这些DNS服务器可能运行缓慢或未定期更新,这可能会导致在查询域名时解析为错误的IP地址。

或者出现延迟,有时您可能根本无法解析所需的域名的IP地址。有很多免费的公共DNS服务器。

这些DNS域名服务器快速,并定期更新。这是一些最受欢迎的公共DNS服务器。Google(8.8.8.88.8.4.4),Cloudflare(1.1.1.11.0.0.1)。

OpenDNS(208.67.222.222208.67.220.220),Level3(209.244.0.3209.244.0.4)。

如果要为连接到本地网络的所有设备设置DNS域名服务器,那么最简单和建议的方法是在家庭路由器进行更改。

Ubuntu 22.04 查看 DNS

在Linux 查看正在使用DNS服务器IP地址方法有很多,可以使用dig命令或者查看systemd-resolve服务的状态。

systemd-resolve -status命令打印很多信息。但我们可以使用grep命令来过滤DNS Servers字符串。

对于dig命令,如果只需要查看当前使用DNS地址,请运行命令dig myfreax.com | grep SERVER

dig myfreax.com | grep SERVER 
sudo systemd-resolve --status | grep 'DNS Servers' -A2

dig myfreax.com | grep SERVER
;; SERVER: 8.8.8.8#53(8.8.8.8)

sudo systemd-resolve --status | grep 'DNS Servers' -A2
         DNS Servers: 1.1.1.1
                      1.0.0.1

sudo systemd-resolve –status | grep ‘DNS Servers’ -A2

Ubuntu 22.04 桌面设置DNS

在Ubuntu 22.04桌面环境设置DNS地址非常简单,不需要任何技术知识。首先打开设置窗口。

如果您连接到WiFi网络,请单击Wi-FI标签。否则,如果您有有线连接,请单击网络选项卡。

选择要为其设置DNS的连接,然后单击齿轮图标以打开网络管理器。选择IPv4设置选项卡。

禁用自动切换开关,然后输入DNS服务器的IP地址,以逗号分隔。我们将使用Google DNS服务器。

Ubunut 22.04 设置 DNS地址

点击应用按钮以保存更改。更改立即生效,除非您的系统或应用程序缓存了DNS记录。

如果要切换回原来的设置,请打开网络管理器,转到IPv4设置并启用自动切换开关。

Ubuntu 22.04 服务器设置DNS

过去,每当您想在Linux中配置DNS地址时,只需打开/etc/resolv.conf文件,编辑记录,保存文件就可以。

现在/etc/resolv.conf文件仍然存在,但它是由systemd-resolved服务控制的符号链接,不应手动对其进行编辑。

systemd-resolved是为本地服务和应用程序提供DNS名称解析的服务,可以使用Netplan进行配置,Netplan是Ubuntu 22.04的默认网络管理工具。

Netplan配置文件存储在/etc/netplan目录。您可能会在此目录中找到一个或两个YAML文件。

各个安装程序的文件名可能不同。通常,该文件名为01-netcfg.yaml50-cloud-init.yaml,但在您的系统中,可能会有所不同。

这些文件使您可以配置网络接口,我们通常称为网卡,包括IP地址,网关,DNS域名服务器等。

要设置DNS,请使用你喜欢的文本编辑器编辑文件,在本教程中我们将使用vim编辑文件

sudo vim /etc/netplan/01-network-manager-all.yaml

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens3:
      dhcp4: true
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

注意,你必须修改本教程中接口名称ens3为你的计算机接口名称。然后使用您的首选DNS更改nameservers的IP地址。

例如如果您想使用Cloudflare的DNS服务器,则可以将nameservers的addresses行更改为。

DNS服务器IP地址必须用逗号分隔,如果该nameservers字段不存在,请将nameservers添加到接口名称字段下。

      nameservers:
          addresses: [1.1.1.1, 1.0.0.1]

编辑Yaml文件时,请确保您遵循YAML代码缩进标准。如果配置中存在语法错误,Netplan将无法解析该文件。完成后,保存文件并退出vim

然后运行命令sudo netplan apply应用更改。Netplan将为systemd-resolved的服务生成配置文件/run/systemd/resolve/resolv.conf。

此外,还有一些应用程序依然使用/etc/resolv.conf的配置文件的DNS地址进行域名的解释,因此你还需要修改/etc/resolv.conf文件。

要修改此文件我们只需要将/run/systemd/resolve/resolv.conf软链接到/etc/resolv.con即可。

运行命令sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

sudo netplan apply
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Ubuntu 22.04 验证DNS设置

要验证是否正确设置DNS地址,请运行命令systemd-resolve --status | grep 'DNS Servers' -A2或者命令dig www.myfreax.com

systemd-resolve -status命令打印很多信息。我们使用grep命令来过滤DNS Servers字符串。

sudo systemd-resolve --status | grep 'DNS Servers' -A2
         DNS Servers: 1.1.1.1
                      1.0.0.1

这里需要注意的是,如果你的Ubuntu 22.04带有桌面环境,请一定使用桌面环境的网络设置来修改DNS的IP地址。

如果你想使用命令的方式修改DNS地址,可能会不如你所愿。当你在终端运行命令dig www.myfreax.com的时候。

你将会在dig命令的结果看到应答的服务器永远是;; SERVER: 127.0.0.1#53(127.0.0.1)或者是你的网关地址;; SERVER: 192.168.1.1#53(192.168.1.1)。

dig www.myfreax.com
; <<>> DiG 9.16.1-Ubuntu <<>> www.myfreax.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 451
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.myfreax.com.       IN  A

;; ANSWER SECTION:
www.myfreax.com.    300 IN  A   43.457.68.101

;; Query time: 119 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Dec 01 19:14:33 HKT 2022
;; MSG SIZE  rcvd: 60

结论

Netplan是Ubuntu 22.04的默认网络管理工具,替代之前的Ubuntu版本中用于配置网络的/etc/resolv.conf/etc/network/interfaces配置文件。

#GNU_Linux #Ubunt #Dig #DNS

References

Obsidian 多设备同步方案整理

同步方案大致有下面这几种:

  • obsidian-livesync(插件):自托管在线同步,支持实时同步,社区活跃,使用自建 CouchDB 数据库存放数据;
  • remotely-save(插件):支持S3 (Amazon S3/Cloudflare R2/Backblaze B2/…)、Dropbox、webdav (NextCloud/InfiniCLOUD/Synology/…)、OneDrive 等数据源。
  • obsidian git(插件):集成 git,主要是 git 做版本管理的,用起来不是很方便。
  • obsidian-sync(官方同步):官方方案,无需多言,每月4$。

对比表格

claude 对以上方案的对比如下表:

特性 官方同步 LiveSync Remotely Save Git
价格 $4/月 免费 免费 免费
配置难度 简单 较复杂 中等 复杂
实时同步 × ×
版本历史 ×
端到端加密 × ×
选择性同步 ×
移动端支持 完善 一般 一般 较差
稳定性
技术要求
自建服务器 × ×
冲突处理 自动 自动 手动 手动

注:

  • ✓ 表示支持
  • × 表示不支持
  • 评价标准为:高/中/低 或 完善/一般/较差

Claude 3.5 Sonnet 回答,大部分正确,供参考。

obsidian-livesync 方案

我目前在使用 obsidian-livesync ,因为可以自托管,无需支付 S3 的按量费用,用起来速度也很不错,约 4k 条笔记约1min上下。配置一次后生成 url,在其他设备只需 安装 obsidian、安装 obsidian-livesync 插件、再填写 url 即可,很方便。

实时同步体验也很好。

建议按照官方文档一步一步进行即可。

以下贴出我部署用到的 compose.yaml 供参考,注意替换其中的密码

version: '3.8'

services:
  couchdb:
    image: couchdb:3.4.2
    container_name: couchdb-for-ols
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=xxxxxxxxx
        #- hostname=ocdb.xxxx.com
    restart: unless-stopped
    volumes:
      - ./data/couchdb-data:/opt/couchdb/data
      - ./data/couchdb-etc:/opt/couchdb/etc/local.d
    ports:
      - "5984:5984"

执行后执行以下命令初始化数据库:

export hostname=localhost:5984
export username=admin     #Please change as you like.
export password=xxxxxxxxx #Please change as you like
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | bash

References

查找文件所属 rpm 安装包的方法

我来介绍几种在 RPM 系统中查找文件所属包的方法:

  1. 对于已安装的文件,使用 rpm -qf 命令:

    rpm -qf /path/to/file
  2. 使用 dnf provides 命令(适用于已安装或未安装的文件):

    dnf provides /path/to/file
  3. 使用 yum provides 命令(与 dnf provides 类似):

    yum provides /path/to/file

举个实际例子:

# 比如要查找 ls 命令属于哪个包
rpm -qf /bin/ls
# 输出: coreutils-8.32-30.el9.x86_64

# 或者使用 dnf
dnf provides /bin/ls

几点说明:

  • rpm -qf 只能查询已经安装的文件
  • dnf providesyum provides 可以查询未安装的文件
  • 如果不确定文件的完整路径,可以使用通配符,如:
    dnf provides */ls

这些命令在系统维护和故障排查时非常有用,特别是当需要知道某个文件来自哪个软件包时。

Kubespray 部署生产级 k8s 集群

kubespray 是基于 ansible 开发的一套 K8s 生命周期管理软件,由 k8s 官方 sig 维护。

遇到问题多读文档,搞清楚命令意味着什么再操作。

部署方法

获取部署程序

# 从 kubespray 官方仓库拉取
git clone --depth=1 https://github.com/kubernetes-sigs/kubespray.git
# 切换到 v2.26.0 版本,不同版本对应支持不同 k8s 版本,根据需要切换
git checkout v2.26.0

# 进入部署程序目录
cd kubespray

# 创建 python 虚拟环境,激活,并安装依赖
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r  requirements.txt

定义部署节点信息

# 从集群配置模板拷贝一份
cp -rfp inventory/sample inventory/mycluster

# 定义节点 IP 清单,将 IP 更换为自己节点的 IP
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

# 根据需要调整节点角色
inventory/mycluster/hosts.yaml

执行以上命令后会在生成一份节点角色清单在 inventory/mycluster/hosts.yaml 路径下,可以根据需要调整,如调整希望作为 master 的节点、运行 etcd 的节点、作为 worker 的节点等。

定义部署 集群信息

根据需要配置集群:

  • inventory/mycluster/group_vars/all/*.yml
  • inventory/mycluster/group_vars/k8s-cluster/*.yml

可以定义部署的 K8s 版本、使用的容器运行时、CNI、Ingress 等内容,具体看注释。

开始部署

# 可选,清理旧集群,若怀疑有残留可以运行这个清理,也可跳过
ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root reset.yml

# 开始部署
ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml

若调整了集群配置,重新运行部署即可。

reset.yml 亦可用于销毁集群,谨慎操作.

扩容

扩容貌似再次执行一次部署命令也可,也可运行例如下面的命令,供参考。

ansible-playbook \
  -i inventory/mycluster/inventory.ini \
  --private-key=id_rsa \
  --user=root -b \
  scale.yml

缩容

使用以下命令运行 remote-node.yml 即可,将 node 变量指向希望移除的节点,命令供参考。

ansible-playbook \
  -i inventory/mycluster/inventory.ini \
  --private-key=id_rsa \
  --user=ubuntu -b \
  --extra-vars "node=node1,node2" \
  remove-node.yml

--extra-vars 里写要移出的节点名列表,如果节点已经卡死,无法通过 SSH 登录,可以在 --extra-vars 加个 reset_nodes=false 的选项,跳过第二个步骤。

References

#Kubernetes #Kubespray

OpenWRT 软件源整理

软件源整理

官方镜像站

  1. OpenWRT官方下载站点
  • URL: https://downloads.openwrt.org/
  • 这是 OpenWRT的主站点,提供所有官方版本的固件和软件包。该站点是获取最新稳定版、开发版(snapshot)和历史版本的主要来源。
  1. OpenWRT官方GitHub仓库
  • URL: https://github.com/openwrt/openwrt
  • 虽然主要用于代码存储和开发,但也提供了一些资源和文档链接。

国内镜像站

  1. 清华大学开源软件镜像站
  • URL: https://mirrors.tuna.tsinghua.edu.cn/openwrt
  • 提供了OpenWRT各个版本的镜像,非常稳定和快速。
  1. 中科大开源镜像站
  • URL: https://mirrors.ustc.edu.cn/openwrt
  • 也是一个非常可靠的镜像源,提供OpenWRT的各个版本。
  1. 阿里云开源镜像站
  • URL: https://mirrors.aliyun.com/openwrt
  • 提供稳定的OpenWRT镜像下载服务。
  1. 重庆大学开源镜像站
  • URL: https://mirrors.cqu.edu.cn/openwrt/
  • 同样是一个可以选择的国内镜像源。
  1. 南京大学开源镜像站
  • URL: https://mirror.nju.edu.cn/openwrt/
  • 提供了OpenWRT的多版本支持。
  1. 上海交通大学开源镜像站
  • URL: https://mirror.sjtu.edu.cn/openwrt/
  • 提供稳定的开源软件镜像服务。
  1. 兰州大学开源镜像站
  • URL: https://mirror.lzu.edu.cn/openwrt/
  • 提供多个开源项目的镜像下载。界面有点意思。
  1. 浙江大学开源镜像站
  • URL: https://mirrors.zju.edu.cn/openwrt/
  • 提供多种开源软件项目的镜像。

个人镜像站

  1. OpenWRT.AI软件仓库:
  • URL: https://dl.openwrt.ai/
  • Kiddin9的自建软件仓库,目前只支持OpenWRT 23.05版本。

如何选择和使用镜像站

在OpenWRT路由器上配置官方软件源通常不需要额外操作,因为默认情况下,OpenWRT已经配置了官方软件源。只需运行opkg update命令以确保软件包列表是最新的。

要使用这些镜像源,您需要修改OpenWRT路由器上的,可以查看 /etc/opkg/customfeeds.conf 文件,确保根据您所使用的OpenWRT版本和设备架构进行正确配置。

配置示例

src/gz openwrt_core https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/targets/<target>/packages
src/gz openwrt_base https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/packages/<architecture>/base
src/gz openwrt_luci https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/packages/<architecture>/luci
src/gz openwrt_packages https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/packages/<architecture>/packages
src/gz openwrt_routing https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/packages/<architecture>/routing
src/gz openwrt_telephony https://mirror.bjtu.edu.cn/openwrt/releases/
<version>/packages/<architecture>/telephony

将上述内容中的https://mirror.bjtu.edu.cn/openwrt/替换为你想要使用的OpenWRT软件源地址,同时注意后面的`

`为版本号,需要修改为你OpenWRT的版本号,“ 为系统架构,需要修改为你对应的系统架构,例如`X86_64` #### 命令行替换方法 或者通过命令行方式进行修改,格式为`s,[原来的软件源地址],[替换的软件源地址],g` “`plain sed -e ‘s,https://downloads.openwrt.org,https://mirror.bjtu.edu.cn/openwrt,g’ \ -e ‘s,https://downloads.openwrt.org,https://mirror.bjtu.edu.cn/openwrt,g’ \ -i.bak /etc/opkg/customfeeds.conf “` Plain text 替换完成后通过`opkg update`进行更新。 #### 注意事项 OpenWRT官方版软件源并不一定完全匹配第三方定植后的固件,例如esir、Leon大佬等定制的固件,可能存在库不全或兼容问题。同时官方版本软件源提供的`k-mod-*.ipk` 软件包也可能存在无法直接安装的情况。 如果你是一个新手,或者只想将OpenWRT系统配置起来养老,那么推荐使用[ImmortalWRT](https://github.com/immortalwrt/immortalwrt),在软件源支持方面可能会更好一些,同时也可以自定义配置国内软件源[immoralwrt-opkg-replace-edu-mirror](https://www.dolingou.com/article/immoralwrt-opkg-replace-edu-mirror) ## References * [🖥️OpenWRT 软件源整理](https://www.dolingou.com/article/Compilation-of-OpenWRT-Software-Sources)

镜像操作神器 skopeo 用法总结

skopeo 是一个命令行工具,可对容器镜像和容器存储进行操作。 在没有dockerd的环境下,使用 skopeo 操作镜像是非常方便的。

安装

包管理器

# RHEL / CentOS Stream ≥ 8
sudo dnf install skopeo

# RHEL/CentOS ≤ 7.x
yum install skopeo

# openSUSE:
sudo zypper install skopeo

# alpine:
sudo apk add skopeo

# macOS:
brew install skopeo

# ArchLinux
sudo pacman -S skopeo

其他系统见 安装文档

编译安装

git clone https://github.com/containers/skopeo skopeo
cd !$
git checkout v1.0.0
make binary-static DISABLE_CGO=1
cp skopeo /usr/local/bin/

使用

在使用 skopeo 之前,我们首先要知道在命令行中镜像的格式

需要注意的是,这几种镜像的名字,对应着镜像存在的方式,不同存在的方式对镜像的 layer 处理的方式也不一样,比如 docker:// 这种方式是存在 registry 上的,docker-daemon: 是存在本地 docker pull 下来的,再比如 docker-archive 是通过 docker save 出来的镜像。同一个镜像有这几种存在的方式就像水有气体、液体、固体一样。可以这样去理解,他们表述的都是同一个镜像,只不过是存在的方式不一样而已。

IMAGE NAMES example
containers-storage: containers-storage:
dir: dir:/PATH
docker:// docker://k8s.gcr.io/kube-apiserver:v1.17.5
docker-daemon: docker-daemon:alpine:latest
docker-archive: docker-archive:alpine.tar (docker save)
oci: oci:alpine:latest

命令选项

# skopeo --help
NAME:
   skopeo - Various operations with container images and container image registries

USAGE:
   skopeo [global options] command [command options] [arguments...]

VERSION:
   0.1.37

COMMANDS:
     copy               Copy an IMAGE-NAME from one location to another
     inspect            Inspect image IMAGE-NAME
     delete             Delete image IMAGE-NAME
     manifest-digest    Compute a manifest digest of a file
     standalone-sign    Create a signature using local files
     standalone-verify  Verify a signature using local files
     help, h            Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                  enable debug output
   --policy value           Path to a trust policy file
   --insecure-policy        run the tool without any policy check
   --registries.d DIR       use registry configuration files in DIR (e.g. for container signature storage)
   --override-arch ARCH     use ARCH instead of the architecture of the machine for choosing images
   --override-os OS         use OS instead of the running OS for choosing images
   --command-timeout value  timeout for the command execution (default: 0s)
   --help, -h               show help
   --version, -v            print the version

可以看到 skopeo 的功能很简单:

  • copy:复制一个镜像从 A 到 B,这里的 A 和 B 可以为本地 docker 镜像或者 registry 上的镜像。
  • inspect:查看一个镜像的 manifest 火车 image config 详细信息
  • delete:删除一个镜像,可以是本地 docker 镜像或者 registry 上的镜像
  • list-tags:列出一个 registry 上某个镜像的所有 tag
  • login:登录到某个 registry,和 docker login 类似
  • logout: 退出已经登录到某个 registry 的 auth 信息,和 docker logout 类似
  • manifest-digeststandalone-signstandalone-verify 这三个用的不多
  • sync:同步一个镜像从 A 到 B,感觉和 copy 一样,但 sync 支持的参数更多,功能更强大

获取镜像的信息

skopeo 可以在不用下载镜像的情况下,获取镜像信息

# skopeo inspect docker://docker.io/centos
{
    "Name": "docker.io/library/centos",
    "Digest": "sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700",
    "RepoTags": [
        "5.11",
        "5",
        "6.10",
        "6.6",
        "6.7",
        "6.8",
        "6.9",
        "6",
        "7.0.1406",
        "7.1.1503",
        "7.2.1511",
        "7.3.1611",
        "7.4.1708",
        "7.5.1804",
        "7.6.1810",
        "7.7.1908",
        "7",
        "8.1.1911",
        "8",
        "centos5.11",
        "centos5",
        "centos6.10",
        "centos6.6",
        "centos6.7",
        "centos6.8",
        "centos6.9",
        "centos6",
        "centos7.0.1406",
        "centos7.1.1503",
        "centos7.2.1511",
        "centos7.3.1611",
        "centos7.4.1708",
        "centos7.5.1804",
        "centos7.6.1810",
        "centos7.7.1908",
        "centos7",
        "centos8.1.1911",
        "centos8",
        "latest"
    ],
    "Created": "2020-01-18T00:26:46.850750902Z",
    "DockerVersion": "18.06.1-ce",
    "Labels": {
        "org.label-schema.build-date": "20200114",
        "org.label-schema.license": "GPLv2",
        "org.label-schema.name": "CentOS Base Image",
        "org.label-schema.schema-version": "1.0",
        "org.label-schema.vendor": "CentOS",
        "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",
        "org.opencontainers.image.licenses": "GPL-2.0-only",
        "org.opencontainers.image.title": "CentOS Base Image",
        "org.opencontainers.image.vendor": "CentOS"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:8a29a15cefaeccf6545f7ecf11298f9672d2f0cdaf9e357a95133ac3ad3e1f07"
    ]
}

docker://: 是使用 Docker Registry HTTP API V2 进行连接远端 docker.io: 远程仓库 centos: 镜像名称

也可以获取本地dockerd的镜像信息

# skopeo inspect docker-daemon:ubuntu:latest
{
    "Name": "docker.io/library/ubuntu",
    "Digest": "sha256:004d05bd520c5c386fb8322d6081f4de567a9417e1ba8e5071663d7811992c88",
    "RepoTags": [],
    "Created": "2020-03-20T19:20:22.835345724Z",
    "DockerVersion": "18.09.7",
    "Labels": null,
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:c8be1b8f4d60d99c281fc2db75e0f56df42a83ad2f0b091621ce19357e19d853",
        "sha256:977183d4e9995d9cd5ffdfc0f29e911ec9de777bcb0f507895daa1068477f76f",
        "sha256:6597da2e2e52f4d438ad49a14ca79324f130a9ea08745505aa174a8db51cb79d",
        "sha256:16542a8fc3be1bfaff6ed1daa7922e7c3b47b6c3a8d98b7fca58b9517bb99b75"
    ]
}

docker-daemon: docker守护镜像的镜像 ubuntu:latest: 本地镜像的名称

拷贝镜像

注意一下,这里的 location 就是指的上面提到的 IMAGE NAMES ,也就是说 skopeo copy src dest 可以有 6*6=36 种组合!比如我可以将一个镜像从一个 registry 复制到另一个 registry,skopeo copy docker://IMAGE_NAME docker://IMAGE_NAME,再强调一遍,一定要注意 IMAGE_NAME 的命名的格式。

在不使用 docker 的情况下从远端下载镜像

# skopeo --insecure-policy copy docker://nginx:1.17.6 docker-archive:/tmp/nginx.tar
Getting image source signatures
Copying blob 8ec398bc0356 done
Copying blob 465560073b6f done
Copying blob f473f9fd0a8c done
Copying config f7bb5701a3 done
Writing manifest to image destination
Storing signatures
# ls -alh  /tmp/nginx.tar 
-rw-r--r-- 1 root root 125M 4月  13 15:22 /tmp/nginx.tar

--insecure-policy: 用于忽略安全策略配置文件 docker://nginx:1.17.6: 该命令将会直接通过 http 下载目标镜像 docker-archive: 存储为 /tmp/nginx.tar,此文件可以直接通过 docker load 命令导入

相应的,可以将下载的文件导入到本地

# skopeo copy docker-archive:/tmp/nginx.tar docker-daemon:nginx:latest
Getting image source signatures
Copying blob 556c5fb0d91b done
Copying blob 49434cc20e95 done
Copying blob 75248c0d5438 done
Copying config f7bb5701a3 done
Writing manifest to image destination
Storing signatures

# docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f7bb5701a33c        3 months ago        126MB

也可以将镜像下载到指定目录

# skopeo copy docker://busybox:latest dir:/tmp/busybox
Getting image source signatures
Copying blob 0669b0daf1fb done
Copying config 83aa35aa1c done
Writing manifest to image destination
Storing signatures

# ls -alh /tmp/busybox/
总用量 760K
drwxr-xr-x   2 root root  186 4月  13 15:26 .
drwxrwxrwt. 12 root root 4.0K 4月  13 15:25 ..
-rw-r--r--   1 root root 743K 4月  13 15:26 0669b0daf1fba90642d105f3bc2c94365c5282155a33cc65ac946347a90d90d1
-rw-r--r--   1 root root 1.5K 4月  13 15:26 83aa35aa1c79e4b6957e018da6e322bfca92bf3b4696a211b42502543c242d6f
-rw-r--r--   1 root root  527 4月  13 15:26 manifest.json
-rw-r--r--   1 root root   33 4月  13 15:25 version

或者从指定目录导入到本地

# skopeo copy dir:/tmp/busybox docker-daemon:busybox:latest
Getting image source signatures
Copying blob 0669b0daf1fb done
Copying config 83aa35aa1c done
Writing manifest to image destination
Storing signatures
# docker images busybox
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              83aa35aa1c79        4 weeks ago         1.22MB

其他命令

skopeo --debug copy docker-archive:/dev/stdin containers-storage:foo < /tmp/nginx.tar

删除镜像

skopeo delete docker://localhost:5000/nginx:latest

认证文件

认证文件默认存放在 $HOME/.docker/config.json

文件内容

{
    "auths": {
        "myregistrydomain.com:5000": {
            "auth": "dGVzdHVzZXI6dGVzdHBhc3N3b3Jk",
            "email": "stuf@ex.cm"
        }
    }
}

其他参数

# 跳过源地址的 tls
skopeo copy docker://192.168.25.8:5000/library/registry:latest  oci-archive:registry-latest.tar --src-tls-verify=false

# 跳过验证 tls
skopeo list-tags --tls-verify=false docker://dockerio.vkvmsg1.skybyte.me/library/registry
# 注意这里 dockerio 的顶级镜像自行补全 library 前缀

References

#Docker #Containerd #Kubernetes