简介: 本文我们将为大家介绍如何在Kubernetes 集群上创建一个远程镜像,并通过命令行的方式使用镜像部署服务。


如何在 Kubernetes 集群上部署应用_应用实例

如何在 Kubernetes 集群上部署应用_docker_02

镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

前言

本文中,我们将一起学习如何在集群中部署一个简单的应用。

我们可以通过设置k8s的部署配置,来控制k8s如何创建和更新你的应用实例,一但部署设置创建好,集群主节点就会根据你的配置来调度应用实例,部署在集群的各个节点上。

部署完成后,k8s会继续监控应用实例在各个节点的运行状态,一但出现宕机、被删除等情况,k8s会在集群其他节点上创建新的应用实例,来满足你的部署配置设置。这也是不同于以往部署方式的地方,利用k8s部署应用,可以帮你提高系统的高可用性。

准备镜像

首先我们需要准备一个应用镜像,因为k8s上部署的应用需要是容器化的。

可以直接使用我构建好的​​registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0​​镜像,跳过本段落,直接看 创建Deployment 。

也可以参考下面的方式 构建自己的镜像。

下面我们就用docker创建一个简单的NodeJS服务镜像。(如果还没安装docker的朋友可以使用阿里云镜像源​​下载安装​​)。

代码准备

可以直接使用​​hello-node​​代码仓库的内容

server.js


var http = require('http');

var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);

如何在 Kubernetes 集群上部署应用_命令行_03

Dockerfile


FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD [ "node", "server.js" ]

如何在 Kubernetes 集群上部署应用_应用实例_04

构建镜像

我使用的是阿里云的镜像仓库:​​立即访问​

创建镜像仓库


如何在 Kubernetes 集群上部署应用_docker_05

如何在 Kubernetes 集群上部署应用_应用实例_06

关联源代码


如何在 Kubernetes 集群上部署应用_命令行_07

如何在 Kubernetes 集群上部署应用_命令行_08

立即构建


如何在 Kubernetes 集群上部署应用_应用实例_09

如何在 Kubernetes 集群上部署应用_命令行_10

构建成功


如何在 Kubernetes 集群上部署应用_应用实例_11

如何在 Kubernetes 集群上部署应用_docker_12

本地拉取


docker pull registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0
docker run --name node-test -p 8080:8080 -d registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0

如何在 Kubernetes 集群上部署应用_命令行_13

本地访问:http://localhost:8080/,可以看到Hello World!输出。说明镜像构建OK。


Deployment

Deployment是用来部署无状态应用的,即描述无状态应用集群状态,比如设置部署5个副本,当其中某个副本宕机时,会自动扩容至5个副本。


kubectl create deployment hello-node --image=registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0

如何在 Kubernetes 集群上部署应用_命令行_14

查看deployment


kubectl get deployments

如何在 Kubernetes 集群上部署应用_命令行_15

查看pod


kubectl get pods

如何在 Kubernetes 集群上部署应用_命令行_16


如何在 Kubernetes 集群上部署应用_命令行_17

如何在 Kubernetes 集群上部署应用_命令行_18

Service

默认Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问, 为了能在Kubernetes 虚拟网络的外部访问,需要将 Pod 暴露为 Kubernetes Service。


kubectl expose deployment hello-node --type=LoadBalancer --port=8080

如何在 Kubernetes 集群上部署应用_应用实例_19

通过LoadBalancer类型的方式将集群服务的8080端口暴露出去。

查看Services


kubectl get services

如何在 Kubernetes 集群上部署应用_命令行_20


如何在 Kubernetes 集群上部署应用_命令行_21

如何在 Kubernetes 集群上部署应用_docker_22

访问Service


minikube service hello-node

如何在 Kubernetes 集群上部署应用_docker_23


如何在 Kubernetes 集群上部署应用_应用实例_24

如何在 Kubernetes 集群上部署应用_命令行_25

浏览器会自动打开http://127.0.0.1:51284,显示Hello World!


清理

可通过如下命令清理集群中创建的资源。


kubectl delete service hello-node
kubectl delete deployment hello-node

如何在 Kubernetes 集群上部署应用_docker_26

总结

本文我们介绍了如何创建一个远程镜像,并通过命令行的方式使用镜像部署服务。

本文转自:​​如何在 Kubernetes 集群上部署应用-阿里云开发者社区​