k8s配置文件外挂

1.采用hostpath:yaml文件如下

apiVersion: v1
kind: Service
metadata:
  name: zuul-server
  namespace: stg
  labels:
    app: zuul-server
spec:
  type: NodePort
  ports:
  - port: 8088
    targetPort: 8088
    nodePort: 32223
  selector:
    app: zuul-server
---
apiVersion: apps/v1
kind: Deployment 
metadata:
  name: zuul-server
  namespace: stg
  labels:
    app: zuul-server 
spec:
  replicas: 1 
    selector:
    matchLabels:
      app: zuul-server
  template:
    metadata:
      labels:
        app: zuul-server
    spec:
      containers: 
      - name: zuul-server
        image: 10.10.10.10/zongbu-sre/zuul-server:v202108241 
        imagePullPolicy: IfNotPresent 
        ports:
        - containerPort: 8088 
        volumeMounts:
            - name: test
              mountPath: /var/smart-tg/zuul-server-0.0.1-SNAPSHOT/config/application.yml
      volumes:
        - name: test
          hostPath:         
              path: /home/dcos/wm/conf/application.yml
              type: FileOrCreate

上面配置采用hostpath方式配置外挂文件,这种方式会增加主机与pod的耦合度,非常用方式,再集群中不方便使用,因为这种方式相当于是docker的那种挂载方式,和主机目录是对应的,集群中相当于每台主机上面都要去指定目录下配置文件。

2.采用configmap方式挂载

configMap 卷 提供了向 Pod 注入配置数据的方法。 ConfigMap 对象中存储的数据可以被 configMap 类型的卷引用,然后被 Pod 中运行的 容器化应用使用。

a.创建configmap配置通过文件
kubectl create configmap cmtest --from-file application.yml
b.通过yaml创建configmap
创建configmap.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: cmtest
  labels:
    app: cmtest
data:
application.yml:
----
 server:
  port: 8640
  servlet:
    context-path: /collection
  tomcat:
    uri-encoding: UTF-8
	warnning_email_corn_time: 0 15 08 ? * MON
	data_collect_corn_time: 0 40 09 ? * SUN,TUE,WED,THU,FRI,SAT
	newcs_email_corn_time: 0 10 18 ? * MON

生成对用configmap
sudo kubectl apply -f configmap.yaml
查看生成的configmap
sudo kubectl describe configmap cmtest

下一步挂载configmap

具体pod collection-pod.yaml文件如下:
apiVersion: v1
kind: Service
metadata:
  name: collection
  namespace: stg
  labels:
    app: collection
spec:
  type: NodePort
  ports:
  - port: 8646
    targetPort: 8646
    nodePort: 32224
  selector:
    app: collection
---
apiVersion: apps/v1
kind: Deployment 
metadata:
  name: collection 
  namespace: stg
  labels:
    app: collection 
spec:
  replicas: 1 
    selector:
    matchLabels:
      app: collection
  template:
    metadata:
      labels:
        app: collection
    spec:
      containers: 
      - name: collection
        image: 10.10.10.10/zongbu-sre/collection:v20210831 
        imagePullPolicy: IfNotPresent 
        ports:
        - containerPort: 8646 
        volumeMounts:
            - name: test
              mountPath: /var/smart-tg/collection-0.0.1-SNAPSHOT/config/config
      volumes:
        - name: test
          configMap:
            name: cmtest

生成pod以及service
sudo kubectl apply -f collection-pod.yaml

Kubernetes 配置文件通常以 YAML 格式编写,用于定义集群中资源对象的期望状态。YAML 是一种可读性高、结构清晰的数据序列化格式,非常适合用来描述 Kubernetes 的资源对象配置。下面将详细说明 Kubernetes 配置文件的基本结构及其字段的含义。 ### 三级标题:基本结构 一个典型的 Kubernetes 配置文件通常包含以下几个关键字段: - `apiVersion`:指定资源对象的 API 版本。不同的资源类型可能属于不同的 API 组,例如 `v1`、`apps/v1`、`networking.k8s.io/v1` 等。 - `kind`:指定资源对象的类型,例如 `Pod`、`Deployment`、`Service`、`PersistentVolume` 等。 - `metadata`:包含资源对象的元数据,如名称、命名空间、标签和注解等。 - `spec`:定义资源对象的期望状态,即用户希望 Kubernetes 实现的状态。不同资源类型对应的 `spec` 字段内容不同。 - `status`(通常由系统自动管理):反映资源对象的当前状态,例如 Pod 的运行状态、IP 地址等信息,一般不需要用户手动配置 [^2]。 ### 三级标题:常见字段详解 #### `apiVersion` `apiVersion` 指定了资源对象使用的 Kubernetes API 版本。常见的 API 版本包括: - `v1`:核心 API 版本,适用于 `Pod`、`Service`、`Node` 等基本资源。 - `apps/v1`:适用于 `Deployment`、`StatefulSet`、`DaemonSet` 等高级控制器资源。 - `networking.k8s.io/v1`:适用于 `Ingress` 资源。 - `storage.k8s.io/v1`:适用于 `StorageClass` 和 `PersistentVolume` 等存储相关资源 [^4]。 #### `kind` `kind` 字段指定当前配置文件所定义的资源类型。例如,`Pod`、`Deployment`、`Service` 等。每个资源类型都有其特定的 `spec` 结构和用途 [^1]。 #### `metadata` `metadata` 包含资源对象的标识信息,主要包括: - `name`:资源对象的名称,在同一命名空间内必须唯一。 - `namespace`:资源对象所属的命名空间,默认为 `default`。 - `labels`:一组键值对,用于对资源进行分类和选择。 - `annotations`:用于存储额外的元数据信息,通常用于工具或系统扩展 [^2]。 #### `spec` `spec` 字段定义了资源对象的期望状态。不同的资源类型具有不同的 `spec` 结构。例如: - 对于 `Pod`,`spec` 包括容器定义、卷挂载、重启策略等。 - 对于 `Deployment`,`spec` 包括副本数、滚动更新策略、Pod 模板等。 - 对于 `Service`,`spec` 包括服务类型、端口映射、选择器等 [^3]。 #### `status` `status` 字段由 Kubernetes 系统自动管理,反映资源对象的当前状态。例如,`Pod` 的 `status` 可能包括其当前运行状态(如 `Running`、`Pending`)、IP 地址、容器状态等 [^1]。 ### 三级标题:示例配置文件 以下是一个简单的 `Deployment` 配置文件示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 该配置文件定义了一个名为 `nginx-deployment` 的 Deployment,它将确保始终运行 3 个 `nginx` 容器实例,并监听 80 端口 [^3]。 ### 三级标题:配置文件的最佳实践 - **使用标签(Labels)进行资源分组**:通过 `labels` 和 `selectors` 可以实现资源之间的关联和筛选。 - **合理使用命名空间(Namespaces)**:将不同环境或团队的资源隔离到不同的命名空间中,提高管理效率。 - **使用 ConfigMap 和 Secret 管理配置信息**:避免将敏感信息或配置硬编码到 YAML 文件中。 - **版本控制与模板化**:使用 Helm 等工具进行模板化部署,提升配置文件的可维护性和复用性 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值