Debian安装NFS
服务端
1 | # 安装nfs服务 |
客户端
1 | # 安装nfs |
编辑fstab 配置自动挂载
1 | sudo vim /etc/fstab |
卸载
1 | sudo umount [local_mount_point] |
需要认证参考为 Linux 客户端设置具有基于 Kerberos 的身份验证的 NFS 服务器 (linux-console.net)
1 | # 安装nfs服务 |
1 | # 安装nfs |
编辑fstab 配置自动挂载
1 | sudo vim /etc/fstab |
卸载
1 | sudo umount [local_mount_point] |
需要认证参考为 Linux 客户端设置具有基于 Kerberos 的身份验证的 NFS 服务器 (linux-console.net)
本地路径映射(HostPath)
HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。 当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
1 | apiVersion: v1 |
支持的 type 值如下:
| 取值 | 行为 |
|---|---|
| 空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。 | |
DirectoryOrCreate |
如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息。 |
Directory |
在给定路径上必须存在的目录。 |
FileOrCreate |
如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 kubelet 相同的组和所有权。 |
File |
在给定路径上必须存在的文件。 |
Socket |
在给定路径上必须存在的 UNIX 套接字。 |
CharDevice |
在给定路径上必须存在的字符设备。 |
BlockDevice |
在给定路径上必须存在的块设备。 |
1 | apiVersion: storage.k8s.io/v1 |
local
local卷只能用作静态创建的持久卷。不支持动态配置。与
hostPath卷相比,local卷能够以持久和可移植的方式使用,而无需手动将 Pod 调度到节点。系统通过查看 PersistentVolume 的节点亲和性配置,就能了解卷的节点约束。
使用 local 卷时,你需要设置 PersistentVolume 对象的 nodeAffinity 字段。 Kubernetes 调度器使用 PersistentVolume 的 nodeAffinity 信息来将使用 local 卷的 Pod 调度到正确的节点。
PersistentVolume 对象的 volumeMode 字段可被设置为 “Block” (而不是默认值 “Filesystem”),以将 local 卷作为原始块设备暴露出来。
1 | apiVersion: v1 |
NFS映射
1 |
Minio
1 |
Ceph
1 |
[[../杂项/OpenSSL生成自签名证书|OpenSSL生成自签名证书]]
[[K3s证书管理|K3s证书管理]]
1 | helm show values harbor/harbor > harbor-values.yaml |
harbor-value.yaml
1 | expose: |
harbor-ingress.yaml
1 | apiVersion: traefik.containo.us/v1alpha1 |
1 | # 添加Harbor仓库 |
1 | kubectl edit configmap harobr-registry -n harbor |
参考
Kubernetes ≥ 1.25 Containerd配置Harbor私有镜像仓库_containerd登录镜像仓库-CSDN博客
结合Cert-Manager完成Harbor的Https证书自动签发 | 风格 | 风起于青萍之末 (lusyoe.github.io)
Containerd容器镜像管理-腾讯云开发者社区-腾讯云 (tencent.com)
通过helm在k8s上搭建Harbor - 简书 (jianshu.com)
Kubernetes 集群仓库 harbor Helm3 部署-腾讯云开发者社区-腾讯云 (tencent.com)
1 | helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ |
1 | kubectl -n kubernetes-dashboard edit service kubernetes-dashboard-web |
1 | # Please edit the object below. Lines beginning with a '#' will be ignored, |
创建证书请求文件dashboard-cert-manager.yaml
1 | apiVersion: cert-manager.io/v1 |
此配置文件是测试版,正式版参考K3s部署cert-manager
1 | kubectl apply -f dashboard-cert-manager.yaml |
新建dashboard-admin.yaml
1 | # 创建ServiceAccount |
新建用户
1 | # 部署用户资源 |
获取token
1 | # v1.24+ |
最新版本只支持Helm,旧版本v2.7支持Kubectl部署
1 | kubectl apply -f recommended.yaml |
修改recommended.yaml
1 | ... |
dashboard的默认webui证书是自动生成的,由于时间和名称存在问题,导致谷歌和ie浏览器无法打开登录界面,经过测试Firefox可以正常打开。解决证书问题参考Kubernetes Dashboard的安装与坑 - 简书 (jianshu.com)
1 | --- |
生成证书文件 tls.crt,tls.csr,tls.key
1 | # 生成key |
subj子参数解释
| 缩写 | 翻译 | 英文对照 |
|---|---|---|
| C | 国家名称缩写 | Country Name (2 letter code) |
| ST | 州或省名称 | State or Province Name (full name) |
| L | 城市或区域称 | Locality Name (eg, city) |
| O | 组织名(或公司名) | Organization Name (eg, company) |
| OU | 组织单位名称(或部门名) | Organizational Unit Name (eg, section) |
| CN | 服务器域名/证书拥有者名称 | Common Name (e.g. server FQDN or YOUR name) |
| emailAddress | 邮件地址 |
参考
k3s集群单节点部署与集群内DashBoard部署 - 知乎 (zhihu.com)
k3s集群搭建并安装kubernetes-dashboard - 东峰叵,com - 博客园 (cnblogs.com)
[K8S 快速入门(十九)通过Helm 安装 Kubernetes Dashboard_helm安装dashboard ingress-CSDN博客](https://blog.csdn.net/weixin_41947378/article/details/111661539#:~:text=通过Helm 安装 Kubernetes Dashboard 1 1. 下载 %23,外网访问 %23 将svc的ClusterIP改为NotePort,外网访问 … 5 5. 令牌方式登录仪表盘)
使用 traefik ingress暴露kubernetes-dashbord - HTTPS版本_svclb-traefik-CSDN博客
1 | https://pypi.tuna.tsinghua.edu.cn/simple |
查看当前镜像地址
1 | pip config list |
1 | pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple |
1 | pip config unset global.index-url |
在K3s集群中部署Redis,需依托Kubernetes资源清单,完成组件配置、存储挂载、网络访问等全流程操作。本文基于实际可直接复用的YAML配置文件,详细拆解Redis在K3s环境中的部署步骤,解析核心配置要点,确保部署过程规范、可落地。
本次部署基于K3s集群,选用Redis 6.0.8版本,所有相关资源统一部署在redis命名空间下(需提前执行命令kubectl create namespace redis完成命名空间创建)。部署采用StatefulSet控制器保障Redis实例的稳定运行,结合PersistentVolumeClaim(PVC)实现数据持久化,通过IngressRouteTCP暴露外部访问入口,借助ConfigMap统一管理Redis配置文件,形成完整的部署闭环。
创建redis-config.yaml文件,通过ConfigMap存储Redis核心配置参数,涵盖网络绑定、数据持久化策略、密码认证等关键配置,确保Redis运行参数可灵活调整、统一管理,具体配置如下:
1 | apiVersion: v1 |
配置文件创建完成后,执行以下命令部署ConfigMap:
1 | kubectl apply -f redis-config.yaml |
K3s集群默认内置local-path存储类,可满足日常Redis数据持久化需求。本次部署提供两种PVC配置方式,用户可根据实际存储场景灵活选择。
创建redis-pvc-local-path.yaml文件,申请2Gi存储容量,访问模式设为ReadWriteOnce(仅允许单个节点读写),适配单节点Redis部署场景,配置如下:
1 | apiVersion: v1 |
执行部署命令:
1 | kubectl apply -f redis-pvc-local-path.yaml |
若需自定义存储路径,可创建redis-pvc-host-path.yaml文件,手动定义PersistentVolume(PV)和PVC。其中PV指定宿主机/mnt/redis/data路径作为存储目录,容量设为5Gi;PVC关联local-path存储类,申请2Gi存储容量,配置如下:
1 | apiVersion: v1 |
执行部署命令:
1 | kubectl apply -f redis-pvc-host-path.yaml |
创建redis-deployment.yaml文件,采用StatefulSet控制器管理Redis Pod,配置包含初始化容器(调整内核参数)、存储卷挂载、配置文件挂载、启动命令指定等核心内容,确保Redis实例稳定启动,配置如下:
1 | apiVersion: apps/v1 |
执行部署命令,启动Redis StatefulSet:
1 | kubectl apply -f redis-deployment.yaml |
创建redis-service.yaml文件,定义ClusterIP类型Service,暴露Redis 6379端口,供K3s集群内其他应用程序访问Redis服务,配置如下:
1 | apiVersion: v1 |
执行部署命令:
1 | kubectl apply -f redis-service.yaml |
基于K3s默认集成的Traefik IngressController,创建redis-ingress.yaml文件,通过IngressRouteTCP暴露Redis的6379端口,实现集群外部对Redis服务的访问,配置如下:
1 | apiVersion: traefik.io/v1alpha1 |
执行部署命令:
1 | kubectl apply -f redis-ingress.yaml |
注意:需提前在Traefik中配置名为redis的entryPoint(监听6379端口),否则IngressRouteTCP无法正常生效。
Redis相关资源部署完成后,需通过以下命令检查资源状态,并验证服务可正常访问。
1 | # 检查StatefulSet运行状态 |
若所有资源状态均为Running/Bound,说明部署成功。
集群内访问:通过集群内部服务地址redis.redis.svc.cluster.local:6379访问,访问密码为配置文件中设置的passwd。
集群外访问:通过Traefik节点IP+6379端口访问,访问密码同样为passwd。
内核参数调整:通过初始化容器(initContainers)执行sysctl -w net.core.somaxconn=511,提升Redis网络连接上限,避免因连接数不足导致服务异常。
数据持久化:通过PVC挂载/var/lib/redis目录,结合Redis配置中的RDB和AOF双重持久化策略,确保数据不丢失;hostPath模式下,数据实际存储在宿主机/mnt/redis/data目录,local-path模式下存储在集群默认存储路径。
配置管理:通过ConfigMap挂载redis.conf配置文件,后续需修改Redis运行参数时,仅需更新ConfigMap并重启Pod即可,无需重建镜像,提升维护效率。
网络安全:采用ClusterIP类型Service限制集群内访问,通过IngressRouteTCP实现外部可控访问,同时Redis配置密码认证,多重保障服务安全。
本文基于实际生产可用的YAML配置文件,完成了K3s集群中Redis的标准化部署,覆盖配置管理、数据持久化、网络访问、部署验证等核心环节。所有配置均保持原始内容不变,可直接复用至K3s环境,无需额外修改,能够满足中小规模业务场景下Redis的稳定运行需求,为K3s环境中Redis的部署提供了可落地的实践参考。