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)如何实现灰度发布
之前的方案:
4)flannel网络规划
根据实际情况,指定适合自己节点的网络地址。
5)迁移k8s步骤
对于现网运行的项目迁移,如下:
1、部署新的服务,比如service的NodePort设为30038,并验证通过
2、调整nginx配置,将后端机器指向node1、node2的30038端口,保障业务正常使用(这里相对应灰度发布)
3、当调用放迁入k8s的时候,将域名改为k8s的服务名,这样抛弃haproxy
6)自建发布系统
7)docker 镜像仓库需要账号密码怎么办?
一般自建的docker镜像仓库都有账号密码,没有账号密码,k8s无法拉取镜像 解决方案: default的namespace新建secret,里面存储docker镜像仓库的账号密码 之后再新建namespace的时候,通过发布系统来做,发布系统,创建namespace,自动创建secret 通过发布系统创建项目的时候,自动关联secret 即可解决
From
From:https://blog.csdn.net/wuzhuge1990/article/details/84565013