zoukankan      html  css  js  c++  java
  • 使用kompose 快速转换dokcer-compose 文件为k8s deploy 文件

    kompose 是一个不错的快速转换docker-compose 文件为k8s 部署yaml文件的工具,使用次工具我们
    可以将简单的docker-compose文件,转换为复杂的yaml文件,对于使用者来说可以减少yaml的错误,
    同时可以实现docker-compose 向k8s 的快速迁移

    简单docker-compose 文件

    version: '3'
    services:
      gogs-service:
        image: gogs/gogs
        restart: always
        ports:
          - "10022:22"
          - "10080:3000"
        volumes:
          - ./data/gogs:/data
        depends_on:
          - mysql-gogs
      mysql-gogs:
        image: mysql:5.7.16
        restart: 'always'
        volumes:
          - ./gogs/mysql:/var/lib/mysql
        ports:
          - 3308:3306
        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
        environment:
          MYSQL_ROOT_PASSWORD: dalongrong
          MYSQL_DATABASE: gogs
          MYSQL_USER: gogs
          MYSQL_PASSWORD: dalongrong
          TZ: Asia/Shanghai
    

    说明,这是一个gogs git 工具的安装,docker-compose 文件不是很复杂

    安装kompose

    brew install kompose

    生成k8s yaml 部署文件

    kompose convert

    效果如下,文件很简单,包含了deploy 以及pvc 的定义,ingress 是我自己添加的

    生成的deploy(gogs)

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.17.0 ()
      creationTimestamp: null
      labels:
        io.kompose.service: gogs-service
      name: gogs-service
    spec:
      replicas: 1
      strategy:
        type: Recreate
      template:
        metadata:
          creationTimestamp: null
          labels:
            io.kompose.service: gogs-service
        spec:
          containers:
          - image: gogs/gogs
            name: gogs-service
            ports:
            - containerPort: 22
            - containerPort: 3000
            resources: {}
            volumeMounts:
            - mountPath: /data
              name: gogs-service-claim0
          restartPolicy: Always
          volumes:
          - name: gogs-service-claim0
            persistentVolumeClaim:
              claimName: gogs-service-claim0
    status: {}
    

    service

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.17.0 ()
      creationTimestamp: null
      labels:
        io.kompose.service: gogs-service
      name: gogs-service
    spec:
      ports:
      - name: "10022"
        port: 10022
        targetPort: 22
      - name: "10080"
        port: 10080
        targetPort: 3000
      selector:
        io.kompose.service: gogs-service
    status:
      loadBalancer: {}
    

    说明,mysql 运行需要修改下,使用init container 删除文件夹

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.17.0 ()
      creationTimestamp: null
      labels:
        io.kompose.service: mysql-gogs
      name: mysql-gogs
    spec:
      replicas: 1
      strategy:
        type: Recreate
      template:
        metadata:
          creationTimestamp: null
          labels:
            io.kompose.service: mysql-gogs
        spec:
          initContainers:
          - name: "remove-lost-found"
            image: "busybox:1.25.0"
            command: ["rm", "-fr", "/var/lib/mysql/lost+found"]
            volumeMounts:
            - name: mysql-gogs-claim0
              mountPath: /var/lib/mysql
          containers:
          - args:
            - --character-set-server=utf8mb4
            - --collation-server=utf8mb4_unicode_ci
            env:
            - name: MYSQL_DATABASE
              value: gogs
            - name: MYSQL_PASSWORD
              value: dalongrong
            - name: MYSQL_ROOT_PASSWORD
              value: dalongrong
            - name: MYSQL_USER
              value: gogs
            - name: TZ
              value: Asia/Shanghai
            image: mysql:5.7.16
            name: mysql-gogs
            ports:
            - containerPort: 3306
            resources: {}
            volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-gogs-claim0
          restartPolicy: Always
          volumes:
          - name: mysql-gogs-claim0
            persistentVolumeClaim:
              claimName: mysql-gogs-claim0
    status: {}

    说明

    使用起来还是比较方便的,可以减少好多代码,目前来说,k8s api 的支持感觉不是很好,而且还有一些bug,但是不影响
    使用,结合这个工具,我们可以快速的向k8s应用迁移

    参考架构图

    参考资料

    https://github.com/kubernetes/kompose/

  • 相关阅读:
    Spring boot 整合 Mybatis + Thymeleaf开发web(一)
    JAVA截取字符串的几种方式
    【转】JAVA异常报错大全
    Linux中允许远程用户登录访问mysql的方法
    Ubuntu系统下将默认的python2.7升级到3.5
    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
    python将数据写入excel代码,python与office交互
    pyqt4桌面软件各种画布组合结构实例
    python之pyqt4的简单窗口布局以及信号和槽(上代码)
    python 005 正则表达式
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10003984.html
Copyright © 2011-2022 走看看