如何将web app发布到kubernetes上

搭好了k8s cluster之后,上手搭建自己的第一个web application. 这个web application是用docker打包好并且发布到了hub.docker.com. k8s将这个web app的image拉到本地,并且用deployment将他跑起来。默认的情况下,pod是不能被外部访问的,所以需要通过service暴露出来一个PORT,使得外部能够访问到。

前期准备

  1. 已经按照之前的步骤搭建了k8s cluster
  2. 在hub.docker.com上挑选了一个public的image作为例子.

使用deployment进行发布

k8s的deployment的特点是可以用来管理Pod和ReplicaSets. 如果运行的Pod发生意外导致crash,deployment可以负责将Pod重启。还有一个特点是可以在发布新版本之后如果发现问题,可以回滚到上一个版本。最多支持10个版本的回溯。

下面是deployment的yaml定义。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-dotnet-webapp-deployment
labels:
app: k8s-dotnet-webapp
spec:
replicas: 1
selector:
matchLabels:
app: k8s-dotnet-webapp
template:
metadata:
labels:
app: k8s-dotnet-webapp
spec:
containers:
- name: k8s-dotnet-webapp
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
ports:
- containerPort: 80

deployment是用来管理Pod的,所以这里面定义container image的部分是:

1
2
3
4
5
6
7
8
9
10
template:
metadata:
labels:
app: k8s-dotnet-webapp
spec:
containers:
- name: k8s-dotnet-webapp
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
ports:
- containerPort: 80

这里定义的image的位置为image: mcr.microsoft.com/dotnet/core/samples:aspnetapp. name这里可以随便定义.
这里需要注意的是labels.deployment和service是通过selector来匹配他们要管理的资源的,这里是通过lable来进行匹配。所以Pod需要申明lable为’app: k8s-dotnet-webapp’. 然后再deployment的selector中指定这个键值对。

1
2