==============================================================================
vim /etc/systemd/system/alist.service
[Unit]
Description=alist
After=network.target
[Service]
Type=simple
WorkingDirectory=/lei/soft/alist
ExecStart=/lei/soft/alist/alist server
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start alist
systemctl enable alist
==============================================================================
# k3s配置alist
apiVersion: apps/v1
kind: Deployment
metadata:
name: alist
labels:
app: alist
spec:
replicas: 1
selector:
matchLabels:
app: alist
template:
metadata:
labels:
app: alist
spec:
nodeSelector:
kubernetes.io/hostname: opsdev
containers:
- name: alist
# 使用轻量的 ubuntu 或 alpine 基础镜像,直接运行宿主机挂载过来的二进制文件
image: registry.cn-hangzhou.aliyuncs.com/leiuvn/ubuntu:2404
imagePullPolicy: IfNotPresent
workingDir: /opt/alist
# Alist 默认监听 5244 端口
command: ["/bin/sh", "-c", "apt-get update && apt-get install -y ca-certificates && update-ca-certificates && /opt/alist/alist server --no-prefix --data /opt/alist/data"]
ports:
- containerPort: 5244
name: http
# 资源限制
resources:
limits:
cpu: "3000m"
memory: "3Gi"
requests:
cpu: "10m"
memory: "50Mi"
# 挂载宿主机的 alist 目录
volumeMounts:
- mountPath: /opt/alist
name: alist-volume
volumes:
- name: alist-volume
hostPath:
path: /lei/soft/alist
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: alist-service
spec:
type: ClusterIP
selector:
app: alist
ports:
- port: 5244 # 集群内部端口
targetPort: 5244 # 容器内部 Alist 监听端口
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alist-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
# 可选:如果希望强制将 HTTP 请求重定向到 HTTPS
traefik.ingress.kubernetes.io/redirect-entry-point: https
spec:
ingressClassName: traefik
tls:
- hosts:
- s.lbu.cn
secretName: s-lbu-cn-tls # 对应刚才创建的 Secret 名称
rules:
- host: s.lbu.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: alist-service
port:
number: 5244
# 创建ssl证书给yaml文件用
kubectl create secret tls s-lbu-cn-tls \
--cert=/lei/yaml/alist/ssl/s.lbu.cn.crt \
--key=/lei/yaml/alist/ssl/s.lbu.cn.key \
--dry-run=client -o yaml | kubectl apply -f -
==============================================================================
vim filebrowser.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: filebrowser
namespace: default
labels:
app: filebrowser
spec:
replicas: 1
selector:
matchLabels:
app: filebrowser
template:
metadata:
labels:
app: filebrowser
spec:
# 固定在 sl-19 节点运行(与你的存储目录所在节点保持一致)
nodeSelector:
kubernetes.io/hostname: sl-19
# 以 root 用户运行容器,避免挂载宿主机目录出现 Permission Denied 权限问题
securityContext:
runAsUser: 0
runAsGroup: 0
containers:
- name: filebrowser
image: registry.cn-hangzhou.aliyuncs.com/leiuvn/filebrowser:2.63
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: http
# 资源限制
resources:
limits:
cpu: "1000m"
memory: "1Gi"
requests:
cpu: "50m"
memory: "128Mi"
# 挂载数据存储目录与配置数据库
volumeMounts:
- mountPath: /srv
name: home1-volume
- mountPath: /database
name: db-volume
volumes:
- name: home1-volume
hostPath:
path: /lei/data/Home1
type: DirectoryOrCreate
- name: db-volume
hostPath:
path: /lei/data/filebrowser
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: filebrowser-service
namespace: default
spec:
type: NodePort
selector:
app: filebrowser
ports:
- port: 8880 # 集群内访问端口 (避免使用 80)
targetPort: 80 # 容器内部端口
nodePort: 30880 # NodePort 节点暴露端口
name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: filebrowser-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
spec:
ingressClassName: traefik
rules:
- host: f.lbu.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: filebrowser-service
port:
number: 8880 # 对接 Service 的集群访问端口 (8080)
==============================================================================
vim es9pro.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: es9pro-pv
spec:
capacity:
storage: 800Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: es9pro
local:
path: /lei/data/es9pro
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- sl-19
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es9pro-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
storageClassName: es9pro
resources:
requests:
storage: 800Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: es9pro
namespace: default
labels:
app: es9pro
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: es9pro
template:
metadata:
labels:
app: es9pro
spec:
nodeSelector:
kubernetes.io/hostname: sl-19
containers:
- name: es9pro
image: registry.cn-hangzhou.aliyuncs.com/leiuvn/es:9.5.5
imagePullPolicy: IfNotPresent
env:
# 通过环境变量直接配置 Elasticsearch,无需改动配置文件
- name: cluster.name
value: "es9pro-cluster"
- name: node.name
value: "es9pro-node-1"
- name: network.host
value: "0.0.0.0"
- name: discovery.type
value: "single-node"
- name: xpack.security.enabled
value: "false"
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: "500m"
memory: 1Gi
volumeMounts:
- name: es9pro-data
mountPath: /usr/share/elasticsearch/data
volumes:
- name: es9pro-data
persistentVolumeClaim:
claimName: es9pro-pvc
---
apiVersion: v1
kind: Service
metadata:
name: es9pro-service
namespace: default
labels:
app: es9pro
spec:
type: NodePort
selector:
app: es9pro
ports:
- name: http
port: 9200
targetPort: 9200
nodePort: 30920
- name: transport
port: 9300
targetPort: 9300
nodePort: 30930
==============================================================================