zoukankan      html  css  js  c++  java
  • k8s 开船记-首航:博客站点从 docker swarm 切换到 k8s 团队

    昨天晚上,我们将博客站点的生产环境从 docker swarm 集群切换到了 k8s 集群,开船到目前,航行非常平稳,可以说首航成功!

    k8s 集群是我们用10台阿里云服务器自己搭建的,1台 master 配置是2核4G,9台 nodes 配置都是4核8G,kubernetes 版本是 1.16.3 。

    博客站点请求入口没有走 ingress ,直接通过 service 监听 30080 端口,阿里云负载均衡转发请求到该端口。

    apiVersion: v1
    kind: Service
    metadata:
      name: blog-web
      namespace: production
    spec:
      type: NodePort
      selector:
        app: blog-web
      ports:
      - nodePort: 30080
        port: 80
        targetPort: 80

    博客站点(blog-web)是通过 DaemonSet 方式部署的,每个 node 都会运行 blog-web pod ,这样的好处是可以将负载均分到各个 node 进行处理,而且在新服务器添加到集群后可以立即分担负载。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: blog-web
      namespace: production
      labels:
        name: blog
    ...

    在将部署环境从 docker swarm 切换到 k8s 的过程中,主要遇到2个问题。

    一个问题是服务名称包含下划线的问题。docker swarm 服务名称中默认就包含下划线,k8s 坚决不允许服务名称中包含下划线,而我们的博客应用调用的一些 web api 用的是包含下划线的主机名,为了减少代码修改工作,我们采用了变通的解决方法,借助 coredns 在 dns 解析时重写主机名。

    rewrite stop {
      name regex ([a-zA-Z0-9-]+)_([a-zA-Z0-9-]+).$ {1}-{2}.production.svc.cluster.local
      answer name ([a-zA-Z0-9-]+)-([a-zA-Z0-9-]+).production.svc.cluster.local.$ {1}_{2}
    }

    另一个问题是 k8s 的 yaml 配置文件不支持直接读取环境变量,docker swarm 是直接支持的,通过 envsubst 搞定。

    envsubst < daemonset-production-blog-web.yaml | kubectl apply -f -

    匆忙之间写了这篇开船首航记,不到之处,望谅解。

    最后推荐一篇对于了解 k8s 非常有帮助的英文博文 —— An introduction to Kubernetes

  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/cmt/p/12033446.html
Copyright © 2011-2022 走看看