精华内容
下载资源
问答
  • Kubernetes之Configmap挂载单个文件

    千次阅读 2020-10-31 10:20:18
    apiVersion: v1 ... xxxx.yml: |- #这里可以用你的文件替代 spring: cloud: nacos: discovery: server-addr: xxxxx config: server-addr: xxxxx dubbo: metadata-report: address: xxxx prot
    apiVersion: v1
    data:
      xxxx.yml: |- #这里可以用你的文件替代
        spring:
          cloud:
            nacos:
              discovery:
                server-addr: xxxxx
              config:
                server-addr: xxxxx
        dubbo:
          metadata-report:
            address: xxxx
          protocols:
            dubbo:
              name: xxx
              port: xx 
    kind: ConfigMap
    metadata:
      name: xx
      namespace: xxx
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: xxx
      name: xxx
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: xxx
          annotations:
            pod.alpha.kubernetes.io/initialized: "true"
        spec:
          imagePullSecrets:
            - name: xxx
          containers:
            - name: xxx
              image: xxx
              volumeMounts:
                - mountPath: /work/xxx.yml
                  subPath: xxxx
                  name: xxx
          volumes:
            - name: xxx
              configMap:
                name: xxx
      selector:
        matchLabels:
          app: xxx
    
    展开全文
  • 问题现象 默认挂载 configMap 时,...下面说一下 kubernetes 中如何挂载单个文件而不是整个目录。 解决方案 使用 subPath 实际上 kubernets 本身提供了 volumeMounts.subPath 属性用于挂在单个文件而不是整个目录。...

    问题现象

    默认挂载 configMap 时,kubernetes 会覆盖掉挂载的整个目录,哪怕使用 items 也会导致整个目录被覆盖,那么如何实现挂在单个文件而不覆盖整个目录呢。下面说一下 kubernetes 中如何挂载单个文件而不是整个目录。

    解决方案

    使用 subPath

    实际上 kubernets 本身提供了 volumeMounts.subPath 属性用于挂在单个文件而不是整个目录。

    下面是一个示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-lamp-site
    spec:
        containers:
        - name: php
          image: php:7.0-apache
          volumeMounts:
          - mountPath: /var/www/html/index.php
            name: index
            subPath: index.php
        volumes:
        - name: index
          configMap:
            name: php-index
            items:
            - key: index.php
              path: index.php
    

    注意事项

    需要注意的是:

    • 如果使用ConfigMap的subPath挂载为Container的Volume,Kubernetes不会做自动热更新
    • ConfigMap 哪怕不使用subPath的挂载方式 C# 文件修改监听功能也没有触发,Golang 的正常,怀疑可能和自己的实现有关,因为还有其他事情没有继续跟进,下周准备继续跟进一下。此处只是作为提醒
    展开全文
  • kubernetes 以单个文件的方式挂载 configMap 及挂载注意事项 问题现象 默认挂载 configMap 时,kubernetes 会覆盖掉挂载的整个目录,哪怕使用 items 也会导致整个目录被覆盖。 我们经常需要把一些程序的配置文件通过...

    kubernetes 以单个文件的方式挂载 configMap 及挂载注意事项

    问题现象

    默认挂载 configMap 时,kubernetes 会覆盖掉挂载的整个目录,哪怕使用 items 也会导致整个目录被覆盖。
    我们经常需要把一些程序的配置文件通过configmap挂载到容器中,一般都是单个文件,默认情况下,configmap就会将整个目录的文件情况,只保留configmap中存储的文件,这样一来其他配置文件丢失,我们的程序自然就起不来了。

    解决方案

    使用volumeMount.subPath来声明我们只是挂载单个文件,而不是整个目录,只需要在subPath后面加上我们挂载的单个文件名即可。
    以elasticsearch配置文件为例进行演示

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
     name: elastic-cluster
      <
    展开全文
  • 属性配置文件在任何应用程序中都非常重要。它们不仅可以让应用程序具备灵活性,还能够根据文件中配置的值产生不同的功能。实际上,在staging、开发、测试、UAT或生产环境中,我们都使用属性配置文件来驱动不同的行为...

    属性配置文件在任何应用程序中都非常重要。它们不仅可以让应用程序具备灵活性,还能够根据文件中配置的值产生不同的功能。实际上,在staging、开发、测试、UAT或生产环境中,我们都使用属性配置文件来驱动不同的行为。

    通常情况下,属性配置文件会与代码一起打包,并且整个程序包都部署在执行环境中。这一方法中,如果你想更改任何配置(即便配置文件中也发生了更改),你需要重新发布代码。尽管这种方法行之有效,但是对于现在而言,效率还是太低了。因此我们需要一种外部化的配置。

    在本文中,我将阐述Kubernetes如何为容器提供外部化、灵活的配置以及可移植性。ConfigMap主要是为了让应用程序的配置和部署解耦,这一功能可以让容器化应用程序具备可移植性。

    如果你对Spring Cloud的生态很熟悉,那么接下来你会发现ConfigMap与Spring Cloud server十分类似。这里有两种使用ConfigMap的方法:

    1. 将ConfigMap作为一种环境变量

    2. 将ConfigMap挂载为文件

    让我们开始进行实践!我们将使用一个简单的应用程序,基于Spring Boot、Docker和Kubernetes进行演示。

    f11724b1acdc647d76baba1d189557d1.png

    将ConfigMap作为一种环境变量

    在本例中,我们将在Kubernetes中创建一个新的环境变量,并将其用于代码中。在Java中,可以通过System.getenv(String) API在代码中使用环境变量。在常规Java应用程序中,可以在J2EE应用程序容器(如Oracle WLS或IBM WAS)中设置环境变量,也可以在OS中设置环境变量。然而,在Kubernetes中情况并不相同。要使用环境变量,我们必须根据literal创建配置映射。

    87deefcdfbed0f44b885927cd9730439.png

    通过kubectl create configmap 命令,我们创建了两个环境变量:app.name 和 app.desc。

    我们来了解一下这背后发生了什么。

    a75907ca696dbc409c10ffac217f7d0f.png

    现在注意数据部分,在数据部分下,你会找到键值对。从技术上来说,ConfigMap仅仅是键值存储。属性的名称是键,属性的值是值。应用程序的代码会要求你查找这些键值对。

    为了在Java代码中使用此环境变量,我们需要编写以下代码:

    6430fb30cf601f3155ecdf5155a999f1.png

    下面的代码段定义了两个K8s环境变量,分别为“ SPRING_BOOT_HELLO_WORLD_APP_NAME”和“ SPRING_BOOT_HELLO_WORLD_DESC”。这些变量将从ConfigMap app-env-config获取值。需要重点关注的是键。

    92710f7c674c31479f32c5f309be705e.png

    属性配置文件可以在单个文件中保存很多个属性,以在不同环境中运行应用程序。在Spring Boot应用程序中,属性保存在classpath下的application.properties文件中。我们来看一下打包在应用程序jar包中的application.properties文件。

    888aeacd932cab193ae0487470b035da.png

    我们正在使用命令kubectl create configmap从单个文件或从多个文件创建ConfigMap。

    现在让我们查看完整的代码。

    a49347263f50bf11943cc563140965da.png 9a60cb0790c198846bd128bc04ccb577.png f11724b1acdc647d76baba1d189557d1.png

    将ConfigMap挂载为文件

    在本节中,我将说明如何使用ConfigMap挂载文件以外部化配置。在此示例中,我将使用ConfigMap来外部化application.properties文件。即使默认文件打包在jar中,也位于src / main / resources下。简单来说,我们将通过ConfigMap所提供的文件来覆盖默认文件。

    第一步是从application.properties创建ConfigMap。让我们了解如何在K8s中存储此ConfigMap。

    d3b0f28eb6ef74a70bb345bbb505581b.png

    通过ConfigMap,我们将挂载application.properties文件到K8s集群中,并且可以在应用程序中使用它。请注意,数据部分包含了application.properties的内容,键是文件名。

    现在,为了覆盖默认配置文件,我们需要(通过ConfigMap)将application.properties挂载到应用程序的classpath中。Spring Boot通过提供不同的选项来提供这一功能。SpringApplication在以下位置从application.properties文件加载属性,并将它们添加到Spring Environment:

    1. 当前目录的/config 子目录

    2.  当前目录

    3.  classpath / config包

    4.  The classpath root

    如果你想了解更多信息,可以查阅官方文档:

    https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

    最简单,最好的方法是将application.properties挂载在“ / config”目录中。

    3853196c7381cf6701fee31f23b9fb58.png

    仔细检查挂载路径,请注意ConfigMap的名称应与我们在上面创建的app-file-configmap完全相同,键为文件名。另外,请确保将volume mount配置的名称更改为volume配置的名称。

    b6915af9ce57832f5724ace44710bccf.png

    这段代码说明了如何在application.properties文件中定义属性。如果使用Spring推荐的标准方法的话,这十分简单。具体而言,就是使用@Value 注释将属性值注入到变量中。

    现在,我们可以继续进行ConfigMap示例应用程序了。我们来看一下完整的代码段。

    c635f7ec85c54d431f1b4678b851ede0.png

    让我们创建一个Docker镜像并将其上传到Dockerhub。在本例中,镜像名称是k8s-springboot-helloworld-configmap—app。

    以下是K8S pod配置文件:

    88bc6879dd1b00bd7fe23c4df77f962d.png

    现在我们使用NodePort服务类型创建服务,以便可以从K8S集群外部使用Welcome服务。

    4d53fb14a42882e5de40fc81e907bd3f.png

    现在,让我们把这些更改应用于K8S。

    导航到浏览器并访问http://:/welcome。在本例,应该是http:// 192.168.99.100:30880/welcome。

    认真观察输出,返回的字符串是:

    f2437247bd4e491c3e9eabd87167c8af.png

    同时,检查代码中硬编码的环境变量的默认值,以及打包在jar中的application.properties的property默认值。你发现从ConfigMap中获取了环境变量和application.properties的值。

    这个项目可以从我的Github中获取:

    https://github.com/nikhilbhide/MicroServicesTutorial/tree/master/k8s_spring_boot_hello_world_config_map

    小声提醒:

    昨天圣诞解谜游戏的答案已经推送到今天的次条了,点开公众号即可查看。

    2d101bd27954b4a5bbbe72e7078bef4b.png

    推荐阅读

    超长干货丨Kubernetes网络快速入门完全指南

    独家!K8S安全成头等大事,2019年K8S漏洞盘点与解读

    服务网格数据平面的关键:层层剖析Envoy配置

    2d101bd27954b4a5bbbe72e7078bef4b.png

    Rancher年终招聘啦!北京、上海、深圳、沈阳四地火热招聘中,快来加入我们!

    解决方案架构师、测试、Golang工程师等众多岗位等你来投!还有更多岗位详情,戳文看咯!

    简历投递地址:chinajobs@rancher.com

    46d20e73b1a7edc5d42a3425e826a939.png 2d101bd27954b4a5bbbe72e7078bef4b.png

    About Rancher Labs

    Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。

    目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。

    e69230b0bbf8095bc3b32954876aa4ed.png

    点击阅读原文,投递简历!

    ↓↓↓
    展开全文
  • 读书笔记互联网编程随时代发展,现在也是开发的重中之重,没得办法,虽然身在传统crud中,那也不能不学习不是,这不,最近在看K8S的一份文档,自我感觉不错,但是出于个人的习惯,我比较习惯整理知识图谱和做笔记...
  • 几乎所有的应用都需要配置信息,在K8S部署应用,最佳实践是将应用的配置信息(环境变量或者配置文件)和程序本身分离,这样配置信息的更新和复用都可以更简单,也使得程序更加灵活。Kubernetes允许将配置选项分离到...
  • 1. 卷的作用,K8S中的volume挂载方式 容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。首先,当容器崩溃时,kubelet 将重新启动容器,容器中的文件将会丢失,因为容器会以干净的状态...
  • 1. K8S中的volume挂载方式 容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。 首先,当容器崩溃时,kubelet 将重新启动容器,容器中的文件将会丢失——因为容器会以干净的状态重建。 ...
  • 简介P161pod 中的每个容器都有自己独立的文件系统,因为文件系统来自容器镜像。P161Kubernetes 中的卷是 pod 的一部分,并和 pod 共享相同的生命周期。...在每个容器中,都可以在其文件系统的任意位置挂载卷。...
  • k8s的卷是pod的一个组成部分,和pod共享相同的生命周期,pod的新老容器都可以识别/使用卷的内容 卷用于实现容器间的数据共享 卷类型 emptyDir—用于存储临时数据的简单空目录 hostPath—用于将目录从工作节点的...
  • 前言docker 中的 volume 可以 mount 文件到特定目录,同时保留原有目录不变;同样的 mount 放到 Kubernetes 却变成了:只是把 mount 的几个文件直接...
  • Kubernetes hostPath挂载的使用

    千次阅读 2020-08-04 10:12:03
    name: html-s #名字要和下面一样 mountPath: /usr/share/nginx/html #nginx服务的html目录 volumes: - name: html-s hostPath: #名字要和上面一样 path: /root/html #虚拟机本地目录
  • Kubernetes 存储卷挂载方式

    千次阅读 2020-08-21 07:17:44
    存储卷挂载方式大致分为三类,容器内存储卷挂载、宿主机存储卷挂载、分布式文件存储卷挂载。 1、容器内存储卷挂载 POD增加一个cachevol的Volume存储卷,挂载到容器的nginx-cache目录上,内容如下: apiVersion: ...
  • [经验交流] k8s mount 文件到容器目录

    千次阅读 2017-04-25 11:06:00
    docker 的 volume 可以 mount 单个文件(比如单个配置文件)到容器目录、同时保留原目录的内容。放到 k8s 中,结果却变成了这样:k8s 的 volume 把文件mount 到容器目录后,该目录下的其它文件却消失了(如果 mount ...
  • Kubernetes K8S之存储PV-PVC详解

    千次阅读 2020-10-23 00:02:10
    K8S之存储PV-PVC概述与说明,并详解常用PV-PVC示例
  • k8s 重启pod_Storage - K8S

    2020-11-21 14:55:49
    本文对Kubernetes中的storage进行研究学习,参见文档Storage。VolumeContainer中On-disk files是临时的,会导致一些问题:1.Container重启之后,file会丢失; 2. Pod中的多个container之间需要share files。K8S ...
  • k8s 各类yaml文件

    万次阅读 多人点赞 2019-04-19 10:25:41
    deployment.yaml文件详解 Pod yaml文件详解 Service yaml文件详解 ingress.yaml详解 deployment.yaml文件详解 apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata: name: cango-...
  • 先准备你自己的文件,比如为config.js 内容如下 (function(global, factory) { typeof exports === &amp;amp;amp;amp;amp;quot;undefined&amp;amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;amp;...
  • 2.使用YAML用于K8s的定义的好处 便捷性: 不必添加大量的参数到命令行中执行命令 可维护性:YAML文件可以通过源头控制,跟踪每次操作 灵活性: YAML可以创建比命令行更加复杂的结构 3.YAML语法规则 大小写敏感 使用...
  • K8S YAML 详解

    千次阅读 2019-09-29 15:11:56
    YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tal键,只允许使用空格 缩进的...
  • k8s使用nfs存储数据

    千次阅读 2020-03-31 18:16:23
    一般k8s的数据都会存放于远程存储服务器上来保证安全,采用的方式也有很多,如nfs,ceph等等多种,这里我们介绍nfs存储。nfs存储配置简单,但存是储量特别大,传输特别频繁的情况下难免会出现传输延迟,难以保证高...
  • K8S常见的面试题

    2021-08-09 20:05:27
    1、 k8s是什么?请说出你的了解? 答:Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的...
  • 谈到存储对象的灾备,我们可以想象成当你启动了挂载卷的 Pod 的时候,突然集群机器宕机的场景,我们应该如何应对存储对象的容错能力呢?应用的高可用固然最好,但是灾备方案一直都是最后一道门槛,...
  • 文章目录一、简介二、K8s三种认证方式三、用户分类四、K8s权限控制(以ServiceAccount展开讲解)1)介绍2)Role和ClusterRole3)RoleBinding和ClusterRoleBinding1、Role角色绑定ServiceAccount2、ClusterRole角色...
  • Kubernetes一.k8s概述1.K8S作用2.由来3.含义4.为什么要用K8S?5.k8s的特性二.k8s集群架构与组件1.核心组件2.k8s核心概念三.常见的k8s部署方式四.k8s工作流程 一.k8s概述 1.K8S作用 用于自动部署、扩展和管理“容器化...
  • k8s-YAML配置文件

    千次阅读 2018-11-20 15:49:15
    k8s-YAML配置文件 一、YAML基础  YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许...
  • k8s篇-k8s集群架构及组件详解【史上最详细】

    千次阅读 多人点赞 2019-12-26 19:14:23
    k8s是什么 k8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可以促进声明式配置和自动化。 k8s能做什么 1)服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开...
  • Docker-安装部署K8S集群

    2021-02-07 16:07:51
    kubernetes ...为此引入了虚拟化的技术,虚拟化技术允许在单个物理服务器的 CPU 上运行多个虚拟机(VM)。 虚拟化允许应用程序在 VM 之间隔离,并提供一定程度的安全。比如vmware和openstack,我们可以使
  • k8s存储类型详解

    千次阅读 2020-12-20 13:15:57
    k8s存储一、k8s存储类型简介二、PV和PVC相关介绍三、pv的空间回收策略验证四、pv和pvc的运用示例 一、k8s存储类型简介 1.类比docker的存储类型 回顾docker的数据持久化。 docker的容器层可以提供存储:存储在可写层...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,418
精华内容 967
关键字:

k8s挂载单个文件