分类目录归档:技术笔记

kompose 转换 docker compose 应用为 k8s 资源清单

Compose是Docker Compose到容器编排(如Kubernetes或OpenShift)的转换工具。

官方Kubernetes项目,仓库位于github.com/kubernetes/kompose。

安装

# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.34.0/kompose-linux-amd64 -o kompose

# Linux ARM64
curl -L https://github.com/kubernetes/kompose/releases/download/v1.34.0/kompose-linux-arm64 -o kompose

# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.34.0/kompose-darwin-amd64 -o kompose

# macOS ARM64
curl -L https://github.com/kubernetes/kompose/releases/download/v1.34.0/kompose-darwin-arm64 -o kompose

chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

使用

$ kompose convert -f compose.yaml

$ kubectl apply -f .

$ kubectl get po
NAME                            READY     STATUS              RESTARTS   AGE
frontend-591253677-5t038        1/1       Running             0          10s
redis-leader-2410703502-9hshf   1/1       Running             0          10s
redis-replica-4049176185-hr1lr  1/1       Running             0          10s

也可以修改控制器,比如指定使用 Statefulset 就这样:

$ kompose convert -f compose.yaml --controller statefulset

作者 使用这个工具快速成功部署了 logtolobechat

更多详情查询官网

References

kubernetes 部署 cert-manager 快速实现自动 ssl

简单记录,使用 cloudflare dns 自动完成域名 ssl 证书申请并配置到 ingress 的关键步骤。

安装

使用 helm 安装方法如下:

helm repo add jetstack https://charts.jetstack.io --force-update
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.16.1 \
  --set crds.enabled=true

配置

使用 cloudflare 密钥自动认证

apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
  namespace: cert-manager
type: Opaque
stringData:
  api-token: xxxxxxxxxx

定义 issuer

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: issuer01
spec:
  acme:
    email: XXXXXX
      # 配置证书目录,演练环境使用Staging环境,正式环境使用另一个
    #server: https://acme-staging-v02.api.letsencrypt.org/directory
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Secret resource that will be used to store the account's private key.
      name: issuer-account-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token-secret
            key: api-token

示例程序

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:
  selector:
    app: whoami
    release: canary
  ports:
  - name: http
    port: 80
    targetPort: 80 # pod port

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-whoami
  annotations:
    cert-manager.io/cluster-issuer: issuer01
  #  kubernetes.io/tls-acme: "true"
spec:
  ingressClassName: nginx
  rules:
  - host: whoami.hzc1.skybyte.me
    http:
      paths:
      - backend:
          service:
            name: whoami
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - whoami.hzc1.skybyte.me
    secretName: whoami-hzc1-skybyte-me-tls # Name of secret automatically generated.

References

临时解决 vagrant 不支持 virtualbox7.1

介绍一种临时解决 Recent version of Virtualbox 7.1.0 is not supported by vagrant 2.4.1 的方法:

解决方案

方案一

$ sudo viVirtualBoxVM|virtualboxvm)
     VBoxManage|vboxmanage)
-        exec "$INSTALL_DIR/VBoxManage" "$@"
+   if [[ $@ == "--version" ]]; then
+     echo "7.0.0r164728"
+   else
+          exec "$INSTALL_DIR/VBoxManage" "$@"
+   fi
         ;;
     VBoxSDL|vboxsdl)
         exec "$INSTALL_DIR/VBoxSDL" "$@"

方案二

$ sudo vim /opt/vagrant/embedded/gems/gems/vagrant-2.4.1/plugins/providers/virtualbox/driver
$ diff -u meta.rb.orig meta.rb
--- meta.rb.orig        2024-09-16 11:37:37.017440100 +0100
+++ meta.rb     2024-09-16 11:33:51.312254400 +0100
@@ -69,6 +69,7 @@
             "6.0" => Version_6_0,
             "6.1" => Version_6_1,
             "7.0" => Version_7_0,
+            "7.1" => Version_7_0,
           }

           if @@version.start_with?("4.2.14")

References

查看 linux 安装时间

想要评估一下自己当前使用的 linux 工作环境已经持续多久,询问 claude3.5 得到了几个方法:

ai 的答案

要查看您的 Arch Linux 安装时间,您可以尝试以下几种方法:

  1. 查看根文件系统的创建时间: 打开终端,输入以下命令:

    stat /

    在输出中查找”Birth”或”创建时间”这一行,它通常表示系统的安装时间。

  2. 检查最早的日志文件: 使用以下命令查看最早的系统日志文件的时间戳:

    ls -lct /var/log | tail -1
  3. 查看安装包数据库的修改时间: 运行以下命令:

    stat /var/lib/pacman/local

    查看”Modify”或”修改时间”这一行,它可能接近您的系统安装时间。

  4. 如果您使用systemd,可以尝试:

    sudo journalctl --list-boots

    这会显示系统启动的历史记录,最早的记录可能接近安装时间。

请注意,这些方法可能不会给出精确的安装时间,但通常可以提供一个相当接近的估计。如果您在安装后立即更改了系统时间,这些方法的准确性可能会受到影响。

实际使用

实测有两个方法看起来比较靠谱,原理是查看根文件系统的创建时间,我后续虽然改动过其他分区,但是根一直没动过,应该比较准确:

➜  PentaCortex git:(test) cd
➜  ~ stat /                    
  文件:/
  大小:4096            块:8          IO 块大小:4096   目录
设备:259,2     Inode: 2           硬链接:20
权限:(0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
访问时间:2024-10-12 14:32:19.003665547 +0800
修改时间:2024-09-05 16:06:53.850059764 +0800
变更时间:2024-09-05 16:06:53.850059764 +0800
创建时间:2024-02-16 11:43:29.000000000 +0800
➜  ~ stat /var/lib/pacman/local
  文件:/var/lib/pacman/local
  大小:131072          块:264        IO 块大小:4096   目录
设备:259,2     Inode: 559536      硬链接:2119
权限:(0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
访问时间:2024-10-14 10:23:22.640397815 +0800
修改时间:2024-10-14 10:23:19.712278043 +0800
变更时间:2024-10-14 10:23:19.712278043 +0800
创建时间:2024-02-16 12:06:46.299561805 +0800
➜  ~ neofetch
                   -`                    songtianlun@srd-songtianlun-archlinux 
                  .o+`                   ------------------------------------- 
                 `ooo/                   OS: Arch Linux x86_64 
                `+oooo:                  Host: ASUS Zenbook 14 UX3405MA_UX3405MA 1.0 
               `+oooooo:                 Kernel: 6.11.2-zen1-1-zen 
               -+oooooo+:                Uptime: 2 days, 18 hours, 14 mins 
             `/:-:++oooo+:               Packages: 2118 (pacman), 9 (flatpak) 
            `/++++/+++++++:              Shell: zsh 5.9 
           `/++++++++++++++:             Resolution: 1920x1080 
          `/+++ooooooooooooo/`           DE: Plasma 6.2.0 
         ./ooosssso++osssssso+`          WM: kwin 
        .oossssso-````/ossssss+`         Theme: Breeze [GTK2/3] 
       -osssssso.      :ssssssso.        Icons: breeze [GTK2/3] 
      :osssssss/        osssso+++.       Terminal: konsole 
     /ossssssss/        +ssssooo/-       Terminal Font: SauceCodePro Nerd Font Mono 12 
   `/ossssso+/:-        -:/+osssso+-     CPU: Intel Ultra 7 155H (22) @ 4.500GHz 
  `+sso+:-`                 `.-/+oso:    GPU: Intel Arc Graphics] 
 `++:.                           `-/+/   Memory: 19381MiB / 31455MiB 
 .`                                 `/

安装时间大概是今年二月份,当前已经完全在日常工作环境使用八个月,目前感觉良好。

解决 archlinux fcitx5 中文输入错漏乱序问题

不知道配置了什么,突然输入中文经常出现错漏乱字,

类似这样:输入“dacheng” 变成 edachng

拼音顺序混乱,导致乱字。

最后在 deepin 找到一个解决方法,尝试后确实有用:

即关闭 fcitx5 — 全局 — 关闭“在程序中显示预编辑文本”

这样就可以了。

References