k8s - Volume 简介和HostPath的使用

在这里插入图片描述

K8S 的持久化

K8S 实现持久化存储的方法有很多种
例如 卷 (Volume), 持久卷(PV), 临时卷(EV) 等, 还有很多不常用的选项上图没有列出来

其中Volume 本身也分很多种
包括

Secret, configMap(之前的文章covered了), hostPath, emptyDir等
本文主要focus on hostPath



HostPath 的简介

官方定义:
hostPath 卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用提供了强大的逃生舱。

简单来讲就是让k8s node 的目录or 文件map在你的POD 容器里
至于为什么上面提到的逃生舱, 是因为假如你的POD 崩溃了or 被shutdown, 我们仍然可以在node对应的path上找到我们想要的数据(前提是把相应的数据output 到hostpath)

但是 官方并不推荐使用hostpath 把数据输出到node上
建议用local PersisentVolume代替, 主要是安全风险的原因

原因:
如果你通过准入时的验证来限制对节点上特定目录的访问,这种限制只有在你额外要求所有 hostPath 卷的挂载都是只读的情况下才有效。如果你允许不受信任的 Pod 以读写方式挂载任意主机路径, 则该 Pod 中的容器可能会破坏可读写主机挂载卷的安全性。

无论 hostPath 卷是以只读还是读写方式挂载,使用时都需要小心,这是因为:

  1. 访问主机文件系统可能会暴露特权系统凭证(例如 kubelet 的凭证)或特权 API(例如容器运行时套接字), 这些可以被用于容器逃逸或攻击集群的其他部分。
  2. 具有相同配置的 Pod(例如基于 PodTemplate 创建的 Pod)可能会由于节点上的文件不同而在不同节点上表现出不同的行为。
  3. hostPath 卷的用量不会被视为临时存储用量。 你需要自己监控磁盘使用情况,因为过多的 hostPath 磁盘使用量会导致节点上的磁盘压力。



HostPath 的类型

除了必需的 path 属性外,你还可以选择为 hostPath 卷指定 type。

value desc
“” 空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。
DirectoryOrCreate 如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息。
Directory 在给定路径上必须存在的目录。
FileOrCreate 如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 kubelet 相同的组和所有权。
File 在给定路径上必须存在的文件。
Socket 在给定路径上必须存在的 UNIX 套接字。
CharDevice (仅 Linux Node) 在给定路径上必须存在的字符设备。
BlockDevice (仅 Linux Node) 在给定路径上必须存在的块设备。



例子

这个例子是测试多个pod同时往1个hostpath 写日志


添加filter 让其可以输出api 调用日志

我们先为springboot cloud-order service 增加1个filter

@Component
@WebFilter
@Order(1)
@Slf4j
public class InfoFilter implements Filter {
   
   
    @Autowired
    private String hostname;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
   
        // Initialization code
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   
   
        HttpServletRequest httpRequest = (HttpServletRequest) request;

        // Log the request information
        log.info("API of hostname: {} has been called, Request Method: {}, Request URI: {}, Requested from : {}",  hostname, httpRequest.getMethod(), httpRequest.getR
### Kubernetes 上部署 GitLab 的最佳实践 在 Kubernetes (K8s) 平台上部署 GitLab 是一种常见的需求,尤其是在微服务架构 CI/CD 流程中。以下是关于如何实现这一目标的最佳实践。 #### 1. 使用 Helm Chart 部署 GitLab Helm 是 K8s 生态中最流行的包管理工具之一,它提供了官方支持的 GitLab Helm Charts[^5]。通过这些 Charts 可以快速完成 GitLab 的安装与配置。 ```bash helm repo add gitlab https://charts.gitlab.io/ helm install my-gitlab gitlab/gitlab \ --set global.hosts.domain=mydomain.com \ --set certmanager-issuer.email=admin@example.com ``` 上述命令会自动创建所需的资源并初始化 GitLab 实例。需要注意的是,在实际操作前应调整 `values.yaml` 文件中的参数来适配环境需求[^5]。 #### 2. RBAC 权限分配 为了使 GitLab Runner 能够访问特定命名空间下的 Pod 或其他资源,需定义 RoleBinding ServiceAccount 。例如: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: gitlab-runner-binding subjects: - kind: ServiceAccount name: gitlab-runner namespace: default roleRef: kind: ClusterRole name: edit apiGroup: rbac.authorization.k8s.io ``` 此片段展示了如何绑定角色到指定的服务账户上[^1]。 #### 3. 数据持久化存储 对于生产级别的 GitLab 安装来说,数据持久化的处理至关重要。可以利用 PersistentVolume(PV)以及PersistentVolumeClaim(PVC),确保数据库、日志文件等重要资料不会因Pod重启而丢失[^6]。 ```yaml --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume-for-gitlab spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: "/mnt/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-claim-for-gitlab spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi ``` #### 4. 自动扩展能力 借助 Horizontal Pod Autoscaler(HPA),可以根据 CPU 利用率或者自定义指标动态调节工作负载副本数量,从而提高系统的弹性响应速度[^7]。 #### 5. 监控与告警机制建立 Prometheus Operator 结合 Grafana 提供了一套完整的监控解决方案,能够实时跟踪 GitLab 各组件的状态变化趋势,并及时发出异常通知[^8]。 --- ### 示例代码:GitLab Runner ConfigMap 设置样例 如果计划让多个项目共享同一个 runner,则可以通过 configmap 方式统一维护其配置项。 ```yaml apiVersion: v1 data: config.toml: | [[runners]] url = "https://gitlab.example.com/" token = "<your_token>" executor = "kubernetes" [runners.kubernetes] image = "alpine:latest" privileged = true kind: ConfigMap metadata: name: gitlab-runner-config namespace: gitlab ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值