Kubernetes 实践 第二篇: 部署应用到集群上

284 阅读2分钟

此系列文章为团队内部的实践总结和培训资料, 去除敏感信息保留公共部分与大家共享. 首先需要大家对Docker和Kubernetes有一定的基础了解, 文章不再对容器集群是什么的问题进行论述. 着重于怎么做为什么. 目标是让有容器相关基础概念的读者参考此系列文章, 能够将手上的程序在Kubernetes中以符合云原生的方式运行起来.

目录:

  1. Kubernetes 实践 第一篇: 程序容器化
  2. Kubernetes 实践 第二篇: 部署应用到集群上
  3. Kubernetes 实践 第三篇: 基于Gitlab的CI/CD
  4. Kubernetes 实践 第四篇: 存储
  5. Kubernetes 实践 第五篇: 配置管理
  6. Kubernetes 实践 第六篇: 日志管理
  7. Kubernetes 实践 第七篇: 微服务链路追踪
  8. Kubernetes 实践 第八篇: Golang 程序完整实现和 Demo
  9. Kubernetes 实践 第九篇: PHP 程序的完整实现和 Demo

准备工作

  1. 学习 kubernetes 基础知识, 掌握 kubectl 的操作.
  2. 登录集群服务后台获取集群用户相关配置信息, 保证以用户身份的配置能够正常操作集群, 了解当前集群的状态.
  3. 基于 Gitlab 托管代码, 执行CI/CD流水线, 你可以根据实际情况调整此项.
  4. 样例项目为Go编写, 其它语言亦可,只要完成容器化即可.

创建应用

如果是此应用之前没有部署到 kubernetes 集群上, 首先需要创建应用, 以下步骤都可以在图形界面上完成. 注意以下几点:

  • 测试服务使用 gitlab 的 registry
  • 测试服务一律不设置资源 request
  • 正式服务使用阿里云的 registry
  • 正式服务根据实际情况设置 limit request HPA
  1. 创建名为 api-conf 的 configmap, data 中 app.conf

    apiVersion: v1
    kind: ConfigMap
    data:
      app.conf: >
        appname = api
        httpport = 80
        runmode = prod
        ...
    
  2. 创建名为 api 的 deployment, 注意设置 registry 地址和 imagePullSecrets, 并且引用之前创建的ConfigMap, 映射到程序的配置文件上.

    apiVersion: apps/v1beta2
    kind: Deployment
    labels:
        app: api
    name: api
    namespace: prod
    selector:
        matchLabels:
        app: api
        spec:
        containers:
            - image: >-
                registry.gitlab.dreamdev.cn/sample/api:latest
            name: api
        imagePullSecrets:
            - name: sample-cr
    
  3. 创建名为 api 的 service

    apiVersion: v1
    kind: Service
    metadata:
    name: api
    namespace: sample-prod
    spec:
    ports:
    - name: "80"
        port: 80
        protocol: TCP
        targetPort: 80
    selector:
        app: api
    sessionAffinity: None
    type: ClusterIP
    
  4. 在 ingress 中加入本服务的路由

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: ingress-nginx-dteacher
spec:
  rules:
    - host: api.example.com
      http:
        paths:
          - backend:
              serviceName: api
              servicePort: 80
            path: /

这样就完成了最简单的一个程序部署到集群上并通过ingress提供访问接口.

招聘

读书郎教育科技是教育电子行业的头部企业, 当前我们正在做教育信息化的平台和在线直播教育两个巨大前景的事业. 办公地点在珠海. 现在前端 后端 Android开放招聘, 欢迎志同道合的朋友来和我聊聊.

招聘主页地址: www.zhipin.com/gongsir/ad0…