将 Docker-Compose 转换为 Kubernetes

跑路者

我正在学习 Kubernetes,并且在理解名称/标签/选择器的使用以及 pod 名称和容器名称是否应该对齐时遇到了很大的麻烦。

我有一个 .NET Core MVC 应用程序、一个 PostgreSQL 数据库和一个 Nginx 反向代理的设置。

它与这个 docker-compose.yml 配合得很好:

version: "3.7"

services:

  reverseproxy:
    build:
      context: ./Nginx
      dockerfile: ../Nginx.dockerfile
    ports:
      - "80:80"
      - "443:443"
    restart: always

  db:
    image: postgres:12.1-alpine
    environment:
      POSTGRES_PASSWORD: "mvcdbsecretpassword"

  mvc:
    depends_on:
      - reverseproxy
      - db
    build:
      context: .
      dockerfile: ./MyMvc.dockerfile
    environment:
      ConnectionStrings.MyMvc: "Host=db;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
    expose:
      - "5000"
    restart: always

MVC 应用程序容器已构建并标记并推送到我的 Docker 中心注册表。在启动时,它记录连接字符串并接受来自 docker-compose 文件的设置(显然 - 毕竟它正在工作)。

我已将其转换为六个 kubernetes yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  labels:
    name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:12.1-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mvcdbsecretpassword
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  ports:
  - name: "postgres"
    port: 5432
    targetPort: 5432
  selector:
    app: postgres
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mvc
  labels:
    name: mymvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mymvc
  template:
    metadata:
      labels:
        app: mymvc
    spec:
      containers:
      - name: mvc
        image: mymvc:v2
        env:
          - name: ConnectionStrings.MyMvc
            value: "Host=postgres;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: mvc
  labels:
    app: mymvc
spec:
  ports:
  - name: "mvc"
    port: 5000
    targetPort: 5000
  selector:
    app: mymvc
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: reverseproxy-deployment
  labels:
    app: mymvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mymvc
  template:
    metadata:
      labels:
        app: mymvc
    spec:
      containers:
      - name: reverseproxy
        image: reverseproxy:v2
        ports:
        - containerPort: 80
        - containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
  name: reverseproxy-service
  labels:
    app: mymvc
spec:
  ports:
  - name: "http"
    port: 80
    targetPort: 80
  - name: "https"
    port: 443
    targetPort: 443
  selector:
    app: mymvc
  type: LoadBalancer

如前所述,我对何时使用名称以及何时使用标签感到非常困惑。

一些指导将不胜感激。

编辑:David Maze 帮助我理解了名称、标签和选择器之间的关系。YAML 文件会相应地更新。

我还为暴露端口 5000 的 mvc 应用程序添加了一个服务。

现在 Pod 不再崩溃,但我仍然无法访问 MVC 应用程序。

我想,我应该提一下,我正试图让它在 Windows 10 机器上的 Docker 桌面上运行。

反向代理在 Compose 堆栈中有意义,但我不再确定它在 Kubernetes 集群中是否也有意义,或者我是否应该设置某种 Ingress 控制器。

有人能告诉我,是否有可能在 Docker 桌面上测试这个设置?

运行kubectl get nodes -o wide显示没有外部IP,但我也不确定集群是否镜像到本地主机。

跑路者

我需要了解的是需要一个 Ingress 控制器和一个 Ingress.yaml。

所有云托管提供商都提供自己的 Ingress Controller,但在 Docker Desktop 上进行测试,您必须自己安装一个。

为 Docker 桌面安装 Nginx-Ingress 的命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.2/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.2/deploy/static/provider/

我的示例 Ingress.yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mvc-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "false"
spec:
  tls:
  - hosts:
    - mymvc.local
    secretName: mvcsecret-tls
  rules:
    - host: mymvc.local
      http:
        paths:
        - path: /
          backend:
            serviceName: mvc
            servicePort: 5000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 docker run 转换为 docker compose

将Kubernetes的docker run转换为YAML

将 Docker run 转换为 Kubernetes 的问题

将docker中的网络选项转换为docker-compose?

将docker run命令转换为docker-compose

将 docker run 命令转换为 docker-compose

将docker run命令转换为docker compose

将 docker-compose.yml 转换为 docker run

如何将Dockerfile转换为Docker Compose镜像?

将简单的Dockerfile转换为docker-compose

如何将docker-compose.yml转换为Dockerfile

将 Docker 映像转换为 Kubernetes 部署文件的问题

将Docker命令转换为docker-compose.yml时出错

将docker run语句转换为docker-compose.yml文件

将docker-compose.yml转换为runc config.json

如何将docker-compose.yml转换为Django的Dockerrun.aws.json

将docker-compose环境变量的值转换为服务ip地址

Docker Swarm,Kubernetes和Compose

Kubernetes入门-部署Docker Compose

无法使用Postgres,Docker Compose和Psycopg2将主机名“ db”转换为地址

从 Docker Compose 迁移到 Kubernetes,将配置存储在持久卷上

是否有人将Stellar的Docker Compose迁移到Kubernetes并解决了Stellar Horizon DB的问题?

kubernetes中的入口Nginx路由(使用nginx反向代理从docker-compose转换)

将“ docker run ...”转换为“ docker create ...” &&“ docker start ...”

将SSL .crt转换为kubernetes内联格式

将kubernetes yaml转换为kubectl cli命令

将服务结构参与者转换为kubernetes

检索无法将yaml转换为json错误kubernetes yaml

将 Github HELM 图表转换为标准 Kubernetes 清单?