如何将Docker迁移到Kubposhes的Kubernetes应用程序

时间:2020-02-23 14:31:47  来源:igfitidea点击:

Kompose(源自Kubernetes和Docker-Compose名称的逻辑)是帮助熟悉Docker-Compose移动到Kubernetes的用户的工具。
它需要一个Docker撰写文件并将其转换为Kubernetes资源(部署,服务等)。
本教程将演示如何将Docker迁移到Kubposees对Kubernetes的应用程序。

kompose的超酷特征

使用Docker撰写简化开发过程,然后将容器部署到生产集群变频器 docker-compose.yaml使用一个简单的命令,kompose转换为群集 kompose up带回它 kompose down

在我们开始之前需要什么

在我们继续教程之前,我们假设我们有一个Kubernetes群集,并且已经配置为与群集通信的Kubectl命令行工具。
如果未满足这些要求,则可以在下面的教程下面使用minikube设置简单的单节点Kubernetes群集。
如果我们已准备好继续,请继续安装Kompose。

使用KVM安装Centos 8/CentOS 7上的Minikube Kubernetes

第1步:在Linux,MacOS上安装了Kompose

下载Kompose的最新二进制版本。
我们可以检查kompose github页面以获取发布版本。

--- 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)

第2步:从dockerfile创建示例图像

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

创建名为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的上游服务器。

第3步:构建容器图像

在项目中打开终端,然后执行以下命令以使用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
REPOSITORY                        TAG          IMAGE ID       CREATED             SIZE
localhost/reverseproxy                            v1        b00d80e00560   19 seconds ago   21.2 MB

第3步:将容器图像推到图像注册表

我们可以将图像推到任何公共注册表,甚至可以将图像甚至浏览到我们创建/私有的一个。

此示例使用Docker集线器图像注册表。

$podman tag <local-image> docker.io/<username>/reverseproxy:v1
Example:
$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中推出更多信息,从DockerHub中找到:

将容器图像发布到Docker集线器/与Podman的图像注册表

第4步:创建一个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文件是Spick和Span之后,我们可以通过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

检查服务,Pods和部署

$kubectl get deployment,svc,pods
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/apache         1/1     1            1           113m
deployment.apps/reverseproxy   1/1     1            1           105m
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 
service/kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP    122m
service/reverseproxy   ClusterIP   10.97.210.141   <none>        8081/TCP   113m
NAME                                READY   STATUS    RESTARTS   AGE
pod/apache-7945cd6844-5hpf8         1/1     Running   0          113m
pod/reverseproxy-8646fb7c4f-j6742   1/1     Running   0          105m

如我们所见,即使在各自的YAML文件进行微调以BEFIT特定配置之前,它们也能够启动Kubernetes资源。