k8s 生产环境 使用经验-2

1、为什么选用k8s

1)实际问题需要

  • 资源部署:之前使用jenkins发布,权限不好控制,并且每次发布、回滚需要打包,特别是回滚 非常慢。
  • 资源浪费:比如申请4C8G机器,部署1-2个项目,其实大部分都浪费掉了。
  • 扩容缩容:k8s利用deployment扩缩容 不要太便利

2)IT行业趋势

2、通用的发布方案

开发人员提交代码,系统自动打包 并push镜像到镜像仓库;这里不使用jenkins了!——需要建设“发布系统”用来作为k8s apiserver的前置!

3、生产遇到的问题

1)被minerd挖矿程序植入

在公网的机器部署k8s集群并且使用kube-proxy的方式,绑定在0.0.0.0网卡(代表所有ip)上的场景,极为容易被植入此类挖矿程序。

解决方案:

1、apiserver或者kube-proxy只开启在内网或者本机上。

2、关闭不必要端口

3、做ssh双向认证

2)deployment多副本日志存储问题

以前是将k8s集群日志输出到node机器,再用脚本进行统一收集。

利用deployment部署,当其中2个pod被调度到同一台node上的时候,会将日志写向同一个文件,这里会出现2个问题:

1、日志内容多,读写高,性能问题

2、多个pod日志在一起,无法分析

解决方案:日志写入的文件命名带环境变量${HOSTNAME},这样可以避免日志写到一起。

3)如何实现灰度发布

之前的方案:

k8s 生产环境 使用经验-2-LMLPHP

4)flannel网络规划

根据实际情况,指定适合自己节点的网络地址。

5)迁移k8s步骤

对于现网运行的项目迁移,如下:

1、部署新的服务,比如service的NodePort设为30038,并验证通过

2、调整nginx配置,将后端机器指向node1、node2的30038端口,保障业务正常使用(这里相对应灰度发布)

3、当调用放迁入k8s的时候,将域名改为k8s的服务名,这样抛弃haproxy

k8s 生产环境 使用经验-2-LMLPHP

6)自建发布系统

7)docker 镜像仓库需要账号密码怎么办?

一般自建的docker镜像仓库都有账号密码,没有账号密码,k8s无法拉取镜像 解决方案: default的namespace新建secret,里面存储docker镜像仓库的账号密码 之后再新建namespace的时候,通过发布系统来做,发布系统,创建namespace,自动创建secret 通过发布系统创建项目的时候,自动关联secret 即可解决

From

From:https://blog.csdn.net/wuzhuge1990/article/details/84565013

04-10 00:20