天天看点

ConfigMap 笔记

简单记录一下ConfigMap使用的一个小坑。最近演示项目,需要用ArgoCD部署一个demo的app,app需要从一个.net 的pod连接另外一个postgres的pod。

ConfigMap 主要就是两种用途,一个是作为配置文件通过volume来挂载,一个是作为环境变量通过envFrom来传入变量值。下面看看具体使用例子

下面是相关的manifest文件

首先是dotnet的配置文件

dotnet-configmap.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: template-service-app-settings
data:
  appsettings.json: |-
    {
      "ConnectionStrings": {
      "WebApiDatabase": "Host=template-service-postgres; Port=5432; SearchPath=template; Username=postgres; Password=Template"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }

           

dotnet-ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: template-service
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
               service:
                  name: template-service
                  port: 
                    number: 80
           

dotnet-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: template-service
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 7000
  selector:
    name: template-service
           

dotnet.yml 这里注意使用了subpath的方式来挂载一个文件,而不是整个挂载到/app上,不然会覆盖掉他原先的其他的文件,无法启动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: template-service
spec:
  selector:
    matchLabels:
      name: template-service
  template:
    metadata:
      labels:
        name: template-service
    spec:
      containers:
        - name: template-service
          image: gitlabazuredemo.azurecr.io/template_service_app:latest
          imagePullPolicy: Always
          workingDir: /app
          volumeMounts:
          - name: template-service-app-settings
            mountPath: /app/appsettings.json
            subPath: appsettings.json
          ports:
            - containerPort: 7000
      volumes:
        - name: template-service-app-settings
          configMap:
            name: template-service-app-settings

           

然后是postgres的配置

postgres-configmap.yml, 这个configmap作为环境变量传入

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: postgres
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: Template
           
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-initdb-config
data:
  initdb.sql: |
    CREATE SCHEMA template;

    SET search_path TO template;

    CREATE TABLE template_data (
    id serial PRIMARY KEY,
    username VARCHAR ( 255 ) UNIQUE NOT NULL,
    email VARCHAR ( 255 ) UNIQUE NOT NULL
    );

    INSERT INTO template_data(username, email) VALUES ('John Doe', '[email protected]');
           
apiVersion: v1
kind: Service
metadata:
  name: template-service-postgres
spec:
  type: ClusterIP
  ports:
    - port: 5432
      targetPort: 5432
  selector:
    name: template-service-postgres
           
apiVersion: apps/v1
kind: Deployment
metadata:
  name: template-service-postgres
spec:
  selector:
    matchLabels:
      name: template-service-postgres
  template:
    metadata:
      labels:
        name: template-service-postgres
    spec:
      containers:
        - name: template-service-postgres
          image: postgres
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - name: postgres-initdb
              mountPath: /docker-entrypoint-initdb.d
      volumes:
        - name: postgres-initdb
          configMap:
            name: postgres-initdb-config