首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么pulumi kubernetes provider要更改服务和部署名称?

为什么pulumi kubernetes provider要更改服务和部署名称?
EN

Stack Overflow用户
提问于 2020-10-22 02:52:23
回答 1查看 111关注 0票数 0

我尝试将下面工作的kubernetes清单从

代码语言:javascript
运行
复制
##namespace
---
apiVersion: v1
kind: Namespace
metadata:
  name: poc

##postgress
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: db
  name: db
  namespace: poc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
      - image: postgres
        name: postgres
        env:
        - name: POSTGRES_USER
          value: postgres
        - name: POSTGRES_PASSWORD
          value: postgres
        ports:
        - containerPort: 5432
          name: postgres
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: db
  name: db
  namespace: poc
spec:
  type: ClusterIP
  ports:
  - name: "db-service"
    port: 5432
    targetPort: 5432
  selector:
    app: db

##adminer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ui
  name: ui
  namespace: poc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ui
  template:
    metadata:
      labels:
        app: ui
    spec:
      containers:
      - image: adminer
        name: adminer
        ports:
        - containerPort: 8080
          name: ui
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: ui
  name: ui
  namespace: poc
spec:
  type: NodePort
  ports:
  - name: "ui-service"
    port: 8080
    targetPort: 8080
  selector:
    app: ui

代码语言:javascript
运行
复制
import * as k8s from "@pulumi/kubernetes";
import * as kx from "@pulumi/kubernetesx";

//db
const dbLabels = { app: "db" };
const dbDeployment = new k8s.apps.v1.Deployment("db", {
    spec: {
        selector: { matchLabels: dbLabels },
        replicas: 1,
        template: {
            metadata: { labels: dbLabels },
            spec: { 
                containers: [
                    { 
                        name: "postgres", 
                        image: "postgres",
                        env: [{ name: "POSTGRES_USER", value: "postgres"},{ name: "POSTGRES_PASSWORD", value: "postgres"}],
                        ports: [{containerPort: 5432}]
                    }
                ] 
            }
        }
    }
});

const dbService = new k8s.core.v1.Service("db", {
    metadata: { labels: dbDeployment.spec.template.metadata.labels },
    spec: {
        selector: dbLabels,
        type: "ClusterIP",
        ports: [{ port: 5432, targetPort: 5432, protocol: "TCP" }],
    }
});

//adminer
const uiLabels = { app: "ui" };
const uiDeployment = new k8s.apps.v1.Deployment("ui", {
    spec: {
        selector: { matchLabels: uiLabels },
        replicas: 1,
        template: {
            metadata: { labels: uiLabels },
            spec: { 
                containers: [
                    { 
                        name: "adminer", 
                        image: "adminer",
                        ports: [{containerPort: 8080}],
                    }
                ] 
            }
        }
    }
});

const uiService = new k8s.core.v1.Service("ui", {
    metadata: { labels: uiDeployment.spec.template.metadata.labels },
    spec: {
        selector: uiLabels,
        type: "NodePort",
        ports: [{ port: 8080, targetPort: 8080, protocol: "TCP" }]
    }
});

使用这个pulumi up -y是成功的,没有错误,但是应用程序并没有完全启动和运行。因为adminer镜像试图使用Postgres数据库主机名作为db,但看起来pulumi正在更改服务名称,如下所示:

我的问题是,如何使其可行?在普鲁米有没有办法严格要求命名?

注意-我知道我们可以很容易地将主机名作为环境变量传递给adminer镜像,但我想知道是否有什么方法可以让我们不更改名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 03:12:13

Pulumi会自动将随机字符串添加到您的资源中,以帮助替换资源。您可以在FAQ中找到有关这方面的更多信息

如果您想禁用它,您可以使用metadata覆盖它,如下所示:

代码语言:javascript
运行
复制
import * as k8s from "@pulumi/kubernetes";
import * as kx from "@pulumi/kubernetesx";

//db
const dbLabels = { app: "db" };
const dbDeployment = new k8s.apps.v1.Deployment("db", {
    spec: {
        selector: { matchLabels: dbLabels },
        replicas: 1,
        template: {
            metadata: { labels: dbLabels },
            spec: { 
                containers: [
                    { 
                        name: "postgres", 
                        image: "postgres",
                        env: [{ name: "POSTGRES_USER", value: "postgres"},{ name: "POSTGRES_PASSWORD", value: "postgres"}],
                        ports: [{containerPort: 5432}]
                    }
                ] 
            }
        }
    }
});
    
const dbService = new k8s.core.v1.Service("db", {
    metadata: { 
        name: "db", // explicitly set a name on the service
        labels: dbDeployment.spec.template.metadata.labels 
    },
    spec: {
        selector: dbLabels,
        type: "ClusterIP",
        ports: [{ port: 5432, targetPort: 5432, protocol: "TCP" }],
    }
});

尽管如此,硬编码这样的名称并不总是最佳实践,如果可能,您应该引用资源的输出并将它们传递给新的资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64469926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档