如何将Docker迁移到Kubposhes的Kubernetes应用程序
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资源。