kompose 是一个不错的快速转换docker-compose 文件为k8s 部署yaml文件的工具,使用次工具咱们
能够将简单的docker-compose文件,转换为复杂的yaml文件,对于使用者来讲能够减小yaml的错误,
同时能够实现docker-compose 向k8s 的快速迁移mysql
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 文件不是很复杂git
brew install kompose
kompose convert
效果以下,文件很简单,包含了deploy 以及pvc 的定义,ingress 是我本身添加的
生成的deploy(gogs)github
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: {}
servicesql
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 删除文件夹docker
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应用迁移api