kubernetes之十二–部署普通的应用

1. 部署web组件
(1)创建名为web-deployment.yaml yaml文件。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec: 
  replicas: 1
  selector:
    mathLabels:
      app: pets
      service: web
  template:
    metadata:
      labels:
        app: pets
        service: web
    spec:
      containers:
      - image: fundamentalsoftdocker/ch08-web:1.0
        name: web
        ports:
        - containerPort: 3000
          protocol: TCP
(2)使用kubectl部署Deployment对象。
$ kubectl create -f web-deployment.yaml
(3)使用kubernetes命令查看第2步创建的部署

这里写图片描述

(4)定义服务的配置文件,名为web-service.yaml,内容如下。
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort
  ports:
  - port: 3000
    protocol: TCP
  selector:
    app: pets
    service: web
(5)使用kubectl创建服务的对象。
$ kubectl create -f web-service.yaml
(6)列出创建的服务

这里写图片描述

(7)对部署的服务进行测试
$ IP=$(minikube ip)
$ curl -4 $IP:30125/
Pets Demo Application
2. 部署数据库

有状态的组件和无状态的组件应该区分开来,作不同的对待,比如web组件和数据库组件。
kubernetes针对有状态的组件定义了一个指定类型的ReplicaSet. 该对象叫StatefulSet.

(1)定义文件名为db-stateful-set.yaml,内容如下。
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: db
spec:
  selector:
    matchLabels:
      app: pets
      service: db
  serviceName: db
  template:
    metadata:
      labels:
        app: pets
        service: db
    spec:
      containers:
      - image: fundamentalsofdocker/ch08-db:1.0
        name: db
        ports:
        - containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: pets-data
  volumeClaimTemplates:
  - metadata:
      name: pets-data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
(2) 使用kubectl创建刚才定义的对象
$ kubectl create -f db-stateful-set.yaml
(3)查看我们创建的对象

这里写图片描述

(4)创建服务的文件,名称为db-service.yaml,内容如下。
apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  type: ClusterIP
  ports:
  - port: 5432
    protocol: TCP
  selector:
    app: pets
    service: db
(5)使用下面的命令部署服务。
$ kubectl create -f db-service.yaml
(6)使用浏览器测试部署的服务

这里写图片描述

3. 移除上面部署的应用
kubectl delete svc/web
kubectl delete deploy/web
kubectl delete svc/db
kubectl delete statefulset/db
4. 简化部署

从上面部署两个应用我们创建了四个文件去部署到群集中,而且这只是一个简单的应用,包含web和数据库两个组件。想一下现实中的应用比这复杂的多,部署起来是相当的麻烦。有些方法可以简化应用,使用一个单一的文件部署应用。比如使用包管理器Helm.

假如我们的应用包含多个kubernetes对象,比如Deployment和服务的对象,那么可以把它放在一个文件内,并通过定义三个破折号对每个对象分别定义。 比如,针对web组件想要有一个部署和服务定义在一个文件中,看起来如下。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pets
      service: web
  template:
    metadata:
      labels:
        app: pets
        service: web
    spec:
      containers:
      - image: fundamentalsofdocker/ch08-web:1.0
        name: web
        ports:
        - containerPort: 3000
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort
  ports:
  - port: 3000
    protocol: TCP
  selector:
    app: pets
    service: web
5. 针对Pets应用把针对四个对象的定义全放在pets.yaml文件中,然后部署应用。

pets.yaml文件内容如下:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pets
      service: web
  template:
    metadata:
      labels:
        app: pets
        service: web
    spec:
      containers:
      - image: fundamentalsofdocker/ch08-web:1.0
        name: web
        ports:
        - containerPort: 3000
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort
  ports:
  - port: 3000
    protocol: TCP
  selector:
    app: pets
    service: web
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: db
spec:
  selector:
    matchLabels:
      app: pets
      service: db
  serviceName: db
  template:
    metadata:
      labels:
        app: pets
        service: db
    spec:
      containers:
      - image: fundamentalsofdocker/ch08-db:1.0
        name: db
        ports:
        - containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: pets-data
  volumeClaimTemplates:
  - metadata:
      name: pets-data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
---
apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  type: ClusterIP
  ports:
  - port: 5432
    protocol: TCP
  selector:
    app: pets
    service: db
![](https://blog.xiodi.cn/wp-content/uploads/2018/07/d8bbdcf89189fbc9f81cf72f1ee62a68.png)
6.同样,也可以使用一个脚本对创建的应用删除。

脚本内容如下:

kubectl delete deploy/web
kubectl delete svc/web
kubectl delete statefulset/db
kubectl delete svc/db
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱尚维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值