首页 > 其他分享 >Docker-compose至K8S迁移工具kompose

Docker-compose至K8S迁移工具kompose

时间:2024-02-07 11:12:23浏览次数:30  
标签:kubectl compose service yaml nginx Docker kompose claim0

参考Github:
https://github.com/kubernetes/kompose
kompose工具用于将docker-compose配置文件转换的k8s可识别的yaml文件

  1. 安装
    CentOS安装
# yum install epel-release
# yum install kompose

使用源安装的版本较老可直接下载

# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.32.0/kompose-linux-amd64 -o kompose

# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.32.0/kompose-darwin-amd64 -o kompose

chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

查看版本

# kompose version
1.32.0 (765fde254)
  1. 转换和使用k8s启动
    示例docker-compose.yml
# cat docker-compose.yml 
version: "2.0"
services:
  nginx:
    hostname: nginx
    image: nginx
    ports:
      - 83:80
    volumes:
    - ./html:/usr/share/nginx/html 

该示例使用nginx镜像启动并且挂载一个首页index.htmt

# cat html/index.html 
Hello Kompose

可以使用以下命令启动

# docker-compose up -d

访问
image
转换成k8s可识别的yaml文件
如果yml文件名不是docker-compose.yml则加参数-f 文件名进行转换

# kompose convert
WARN Volume mount on the host "/data/softs/kompose/html" isn't supported - ignoring path on the host 
INFO Kubernetes file "nginx-service.yaml" created 
INFO Kubernetes file "nginx-deployment.yaml" created 
INFO Kubernetes file "nginx-claim0-persistentvolumeclaim.yaml" created 

会在当前文件夹生成deployment,pvc,service文件
image
不能直接使用kubelet apply部署而是需要修改
pvc文件需要修改增加创建该pvc使用的storageclass
使用以下命令获取当时集群的storageclass,如果无storageclass则需要先创建

# kubectl get storageclass
NAME                          PROVISIONER               AGE
gluster-heketi-storageclass   kubernetes.io/glusterfs   66d
managed-nfs-storage           fuseim.pri/ifs            76d

修改后的pvc文件如下

# cat nginx-claim0-persistentvolumeclaim.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    io.kompose.service: nginx-claim0
  name: nginx-claim0
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: gluster-heketi-storageclass
  resources:
    requests:
      storage: 100Mi

在原始内容基础新增一行指定pvc使用的stoageclass
image
先生成pvc

# kubectl apply -f nginx-claim0-persistentvolumeclaim.yaml 
persistentvolumeclaim/nginx-claim0 created

查看

# kubectl get pvc nginx-claim0
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
nginx-claim0   Bound    pvc-2f0bd9e0-c562-11ee-a9a9-525400e71cb5   1Gi        RWO            gluster-heketi-storageclass   29s

应用deployment文件部署deployment

# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.32.0 (765fde254)
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: nginx
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.32.0 (765fde254)
      labels:
        io.kompose.network/kompose-default: "true"
        io.kompose.service: nginx
    spec:
      containers:
        - image: nginx
          name: nginx
          ports:
            - containerPort: 80
              hostPort: 83
              protocol: TCP
          volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: nginx-claim0
      hostname: nginx
      restartPolicy: Always
      volumes:
        - name: nginx-claim0
          persistentVolumeClaim:
            claimName: nginx-claim0
# kubectl apply -f nginx-deployment.yaml 
deployment.apps/nginx created

查看部署的pod

# kubectl get pod nginx-5d7ccd9d5-mqm92
NAME                    READY   STATUS    RESTARTS   AGE
nginx-5d7ccd9d5-mqm92   1/1     Running   0          2m1s

把首页拷贝到对应文件夹即可在node节点使用pod地址访问

# kubectl cp html/index.html nginx-5d7ccd9d5-mqm92:/usr/share/nginx/html

部署服务

# kubectl apply -f nginx-service.yaml 
service/nginx created
[root@CentOS7K8SMaster01063 kompose]# cat nginx-service.yaml 
apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.32.0 (765fde254)
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  ports:
    - name: "83"
      port: 83
      targetPort: 80
  selector:
    io.kompose.service: nginx

部署

# kubectl apply -f nginx-service.yaml 
service/nginx created

查看

# kubectl get svc nginx
NAME    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.0.0.20    <none>        83/TCP    60s

默认生成的svc为ClusetrIP模式即只能在集群内访问
在node节点访问,注意本次把port修改为83了即集群ip的83端口对应pod的80端口

# curl 10.0.0.20:83
Hello Kompose

修改service配置文件修改成nodeport
修改后如下

# cat nginx-service.yaml 
apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.32.0 (765fde254)
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  ports:
    - name: "83"
      port: 80
      targetPort: 80
  type: NodePort 
  selector:
    io.kompose.service: nginx

修改以下两处
image
应用svc文件

# kubectl apply -f nginx-service.yaml 
service/nginx configured

查看svc

# kubectl get svc nginx
NAME    TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.0.0.20    <none>        80:32858/TCP   7m23s

在Node内使用ClusterIP访问

# curl 10.0.0.20

在集群外使用任意nodeip+随机的nodeport端口访问

# curl 192.168.3.65:32858

实验完毕删除deployment pvc svc

# kubectl delete -f nginx-deployment.yaml 
# kubectl delete -f nginx-claim0-persistentvolumeclaim.yaml 
# kubectl delete -f nginx-service.yaml 

注意事项

  1. 如果在docker-compose中有设置容器的重启策略为on-failer则需要修改成always否则转换后不是deployment而是pod
  2. 如果docker-compose中有挂载配置文件则也会生成对应的pvc配置文件,可以删除对应配置修改成configmap的挂载方式
  3. 默认转换的service为clusterip格式如有需要则修改成NodePort格式
  4. 默认转换后的pvc文件是没有stoeageclass信息,需要手动添加

标签:kubectl,compose,service,yaml,nginx,Docker,kompose,claim0
From: https://www.cnblogs.com/minseo/p/18010744

相关文章

  • k8s 怎么手动拉取docker镜像?
    k8s怎么手动拉取docker镜像?在Kubernetes(K8s)中管理和部署应用时,手动拉取Docker镜像是一项基本操作。在Kubernetes中,Pod创建时通常会在其配置文件(Deployment,StatefulSet等)中指定需要使用的Docker镜像。但如果你想先手动将镜像拉取到集群节点上,可以按照以下步骤进行:首先,确保......
  • Docker私有镜像仓库harbor
    一、Harbor介绍Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC)、LDAP、日志审核......
  • Docker Arthas 实战指南
    Arthas是一款强大的Java诊断和调试工具,它能够在生产环境中实时诊断Java应用,提供强大的调试功能,帮助开发者和运维人员解决各种Java应用的性能问题和调试挑战。本指南将介绍如何在Docker环境中使用Arthas进行实战。官方文档GitHub地址gitee地址应用场景性能分析与优化:Art......
  • Docker
    取证时会遇到数据库服务开启在docker容器内,其实原理都是一致的,重要的是熟悉docker的相关命令!镜像列出所有镜像dockerimages不同的镜像可以来自同一个仓库源,为了加以区分,我们添加了TAG这个字段例如我们需要用ubuntu14.04的镜像启动一个新的容器dockerrun-itubuntu:14.04......
  • 在服务器中安装有ubuntu图形界面的docker,并通过主机的VNC进行远程控制(web页面远程控制
    参考链接https://github.com/fcwu/docker-ubuntu-vnc-desktop.git1.拉取镜像dockerpulldorowu/ubuntu-desktop-lxde-vnc2.直接dockerrun启动,启动参数如下,在浏览器打开,这里设置的端口是6080,在服务器执行这个命令运行之后dockerrun--namevnc_test-p6080:80-v/dev/s......
  • docker设置国内镜像源
    一、国内加速地址1、阿里云镜像站:(需登录,免费)https://<your_code>.mirror.aliyuncs.com2、网易云镜像站:http://hub-mirror.c.163.com3、百度云镜像站:https://mirror.baidubce.com4、上海交大镜像站:https://docker.mirrors.sjtug.sjtu.edu.cn5、南京大学镜像站:https://doc......
  • docker 部署 asp.net8 项目
    1、需要编写dockerfile文件#基础镜像FROMmcr.microsoft.com/dotnet/aspnet:8.0ASbase#工作目录WORKDIR/app#开放访问端口EXPOSE8080#复制内容到镜像COPY./app#指定默认入口ENTRYPOINT["dotnet","Web.Admin.dll"]2、编写docker-compose.yaml文件version:'3's......
  • docker 启动jar包
    1、编写Dockerfile文件FROMopenjdk:8ENVTZ="Asia/Shanghai"ADDcim-gisportal.jarcim-gisportal.jarADDnohup.outnohup.outENTRYPOINT["nohup","java","-jar","/cim-gisportal.jar",">nohup.out&&quo......
  • Docker基本原理与常用命令
    1docker架构K8S:CRI(ContainerRuntimeInterface)Client:客户端;操作docker服务器的客户端(命令行或者界面)Docker_Host:Docker主机;安装Docker服务的主机Docker_Daemon:后台进程;运行在Docker服务器的后台进程Containers:容器;从镜像创建的运行实例.可以被启动,开始,停止,删除.每......
  • Docker网络与存储
    网络:bridge模式:当Docker进程启动后,会在主机上创建一个名为docker0的虚拟网桥,主机上启动的docker容器会连接到这个虚拟网桥上.从docker0子网中分配一个ip给容器使用,并设置docker0的IP地址为容器的默认网关.在主机上创建一堆虚拟网卡设备vethpair设备,Docker将vethpair设......