云网牛站
所在位置:首页 > Linux云服务器 > 使用Kompose将Docker Compose应用程序迁移到Kubernetes

使用Kompose将Docker Compose应用程序迁移到Kubernetes

2020-06-06 10:17:30作者:谓自力稿源:云网牛站

kompose(源自Kubernetes和docker-compose的合并名称)是一种工具,可帮助熟悉docker-compose的用户迁移到Kubernetes。它需要一个Docker Compose文件并将其转换为Kubernetes资源。本文将演示如何使用Kompose将Docker Compose应用程序迁移到Kubernetes。在继续阅读文章之前,我们假设您有一个Kubernetes集群,并且已经配置了kubectl命令行工具来与您的集群通信,如果不满足这些要求,则可以使用minikube设置简单的单节点Kubernetes集群,参考使用KVM在CentOS 8/CentOS 7上安装Minikube Kubernetes一文。

 

一、在Linux、macOS上安装Kompose

下载Kompose的最新二进制版本,地址:https://github.com/kubernetes/kompose/releases。

针对Linux平台:

curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -

mv kompose-linux-amd64 kompose

针对macOS平台:

curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep darwin-amd64 | cut -d '"' -f 4 | wget -qi -

mv kompose-darwin-amd64 kompose

使该二进制文件可执行,并将其移动到/usr/local/bin目录:

chmod +x kompose

sudo mv ./kompose /usr/local/bin/kompose

安装后检查版本:

$ kompose version

1.21.0 (992df58d8)

 

二、从Dockerfile创建示例图像

我们将创建Nginx反向代理来代理对apache容器的请求。

创建一个名为Dockerfile的文件,然后添加以下内容:

cat > Dockerfile<<EOF

# Sample Dockerfile for Kompose

FROM nginx:alpine

COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 8081

EOF

这是我们要复制到映像中的配置文件(nginx.conf):

cat >nginx.conf<<EOF

upstream apache-container {

server 0.0.0.0:80;

}

server {

listen 8081;

location / {

proxy_pass         http://apache-container;

proxy_redirect     off;

proxy_set_header   Host $host;

proxy_set_header   X-Real-IP $remote_addr;

proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header   X-Forwarded-Host $server_name;

}

}

EOF

它是一个简单的反向代理,在8081端口侦听请求,然后将流量路由到在80端口侦听的上游服务器。

 

三、建立容器映像

在您的项目中打开一个终端,然后输入以下命令以使用podman构建我们的图像:

$ podman build -t reverseproxy:v1 .

STEP 1: FROM nginx:alpine

Getting image source signatures

Copying blob cbdbe7a5bc2a done  

Copying blob c554c602ff32 done  

Copying config 89ec9da682 done  

Writing manifest to image destination

Storing signatures

STEP 2: COPY nginx.conf /etc/nginx/conf.d/default.conf

--> d86b4e89749

STEP 3: EXPOSE 8081

STEP 4: COMMIT reverseproxy:v1

--> b00d80e0056

b00d80e00560c205e0580d4b751b1a67da7e77e7fc73803b006ff10389bb4732

-- With Docker ---

$ docker build -t reverseproxy:v1 .

生成映像后,我们应该可以看到以下内容:

$ podman images

使用Kompose将Docker Compose应用程序迁移到Kubernetes

 

四、将容器映像推送到映像注册表

您可以将映像推送到任何公共注册表,甚至可以推送到您已创建/私有的注册表。

本示例使用Docker Hub映像注册表:

$ podman tag <local-image> docker.io/<username>/reverseproxy:v1

比如:

$ podman tag localhost/reverseproxy:v1 docker.io/penchant/reverseproxy:v1

验证您的映像注册表,对我来说这是docker.io:

$ podman login docker.io

Username: <username>

Password: <password>

Login Succeeded!

登录后,推送图像,例如:

$ podman push docker.io/penchant/reverseproxy:v1

Getting image source signatures

Copying blob 113ce2720837 done

Copying blob 3810cc0c140f done

Copying blob 3e207b409db3 done

Copying config b00d80e005 done

Writing manifest to image destination

Storing signatures

您可以使用下面文章找到有关从DockerHub推送和拉取图像的更多信息:

使用Podman将Docker映像发布到Docker Hub的方法

 

五、建立docker-compose.yaml

这是Docker Compose用来创建服务并为示例项目运行多容器环境的文件,注意我们正在使用的映像是我们刚刚构建并推送到DockerHub的映像:

$ vim docker-compose.yaml

version: "3"

services:

reverseproxy:

image: docker.io/penchant/reverseproxy:v1

ports:

 - 8081:8081

restart: always

apache:

depends_on:

 - reverseproxy

image: httpd:alpine

restart: always

在我们的docker-compose.yaml文件被选中并扩展之后,在通过kompose运行项目时,我们可以利用两个选项。首先,我们可以将docker-compose.yaml文件转换为单独的yaml文件(例如部署、服务和persistentvolumeclaim),然后使用kubectl对其进行应用,或者我们可以简单地使用一个kompose up命令来完成操作。由于我希望检查单独的文件,因此我们将首先进行如下转换:

$ kompose convert

INFO Kubernetes file "reverseproxy-service.yaml" created

INFO Kubernetes file "apache-deployment.yaml" created

INFO Kubernetes file "reverseproxy-deployment.yaml" created

现在,我们创建了三个yaml文件,它们的名称说明了它们的作用,一个是服务,另一个是部署。

我们可以如下所示使用kubectl来应用这些文件:

$ kubectl apply -f reverseproxy-service.yaml,apache-deployment.yaml,reverseproxy-deployment.yaml

service/reverseproxy created

deployment.apps/apache created

deployment.apps/reverseproxy created

检查服务,Pod和部署:

$ kubectl get deployment,svc,pods

使用Kompose将Docker Compose应用程序迁移到Kubernetes

如您所见,即使在相应的yaml文件经过微调以适应特定配置之前,它们也能够启动kubernetes资源。

 

注意事项

您可以更改kompose根据您的特定需求对Docker-Compose文件进行操作后派生的yaml文件中的详细信息。好的是,kompose可以完成大部分繁重的工作,您只需添加需要添加的内容即可。

同时Kompose是一个出色的工具,可以让您从一无所有到可以使用的Kubernetes应用程序,在您的项目中进行尝试,以利用kompose进行开发。

 

相关主题

在Linux服务器中创建管理员用户以访问Kubernetes仪表板

精选文章
热门文章