o0w0o / ARTS

ARTS 鸽友打卡🐦
2 stars 0 forks source link

基于Kubernetes的DevOps平台实战 #113

Open hyponet opened 4 years ago

hyponet commented 4 years ago

同事写的一篇文章:https://mp.weixin.qq.com/s/9oEkduG13viH2CCH1Ad-LQ

hyponet commented 4 years ago

Q1:请问老师是通过 Jenkinsfile 来控制版本管理吗,是否使用了 jenkins library,多个环境的情况下,是部署一个Jenkins master,还是每个K8s集群都带有一个 jenkins master? A:jenkinsfile实现整个CICD流程,使用git对jenkinsfile代码进行版本管理;目前没有使用jenkins library,但是jenkins library的方式正在重写过程中,还没有完成;多环境的实现是只在一个集群部署一套jenkins master+jenkins agent,不同的环境通过不同agent实现

Q2:我想知道这个分享有什么用?文字直播? A:这个我来答一下,感觉没用可以不看,没有强制要求。

Q3:每个jenkins的job里写一个jenkinsfile的repo?这样是不是太浪费了。每个repo就一个jenkinsfile文件(多环境可能有多个分支)。我们是直接写成了jenkinsfile模板,然后jenkins 构建参数传入的。不知道老师是如何权衡的 A:不是的,所有job使用一个jenkinsfile。每个job就是传递一些基础参数,大多数配如编译命令,部署配置等,都是在devops平台先行配置好之后,触发job构建之后从devops拉取参数配置)

Q4:为什么拉取代码后就要进行Sonar代码扫描呢?研发的代码都没有集成编译验证,扫描代码有什么意义? A:不是拉取代码前进行的扫描,是拉取代码完成后进行的扫描。方便对接多语言。这个看取舍的,我们因为涉及语言种类比较多,不太容易顾全所有的语言,而且前期我们php语言的业务较多。

Q5:你们生产环境也关闭防火墙了吗?不用防火墙吗?还是你们用的其他的安全措施 A:我们生产环境防火墙是关闭的,因为我们使用的是公有云环境,策略都是通过公有云安全组实现的。

Q6:同ansible集成那部分怎么实现的?中间涉及到传参数,例如IP地址,端口号,服务名称,是通过什么控制的? A:基础环境信息,都在inventory里维护。其他的一些参数放在一个group_vars中

Q7:node节点使用的是动态token还是apiserver内置的静态的token进行bootstrap的? A:动态token

Q8:你们master节点和node节点都部署了多少台 A:master节点3台,16c64G的。node有600台,配置种类比较多

Q9:能否提供一下你们基于pipeline的jenkinsfile示例? A:这个因为涉及公司隐私,不方便提供。但是后期基于jenkins library的代码完成后,会进行开源,请后续关注。

Q10:knative和istio现在未来前景咋样,国内有用到生产上去的吗? A:我们暂时还没有使用到生产上去,只是调研阶段

Q11:600个node calico用的反射模式还是node mesh?有做pod带宽限制么,谢谢! A:node-mesh,目前没有对带宽做任何限制,calico也遇到了不少坑,暂时也没精力进一步的使用功能

Q12:感谢老师分享。想请问下您们的运维团队是怎么配置的,谢谢?! A:我们分业务运维、系统运维、dba

Q13:Jenkinsfile 使用文档较少,可以提供在此遇到的坑列举几个典型吗?谢谢! A:使用的话,可以去参考有一本groovy的书。遇到的坑的话,大多数是CICD逻辑的问题,比如说,我们会有一个容器运行用户的配置,实际业务场景中有使用root的,有使用普通用户的,还会针对不同的环境适配不同的用户配置,逻辑处理出错就会导致实际部署后,pod运行异常。

Q14:请问 主机系统初始化 这一块对系统的发行版和内核版本有什么要求和建议?看到一些docker的问题是因为系统内核版本太低 (3.10 内核 kmem account 泄漏 bugs 导致节点 NotReady),请问你们是如何选择的? A:目前仅支持Redhat、CentOS,内核版本是3.10,没有进行升级。以我们集群运行这么长时间看,虽然有NotReady现象,但是概率比较小,固没对考虑对内核升级

Q15: 请问下集群规模是怎么样的,node节点是怎么做资源保护的? A:目前600个node节点,我们目前是监控整体集群水位,在达到60%左右就会对集群进行扩容

Q16:如何实现灰度发布以及蓝绿部署 A:基于ingress实现的,部分是使用公有云的负载均衡,通过api实现切换

Q17: 目前我们使用的gitlab-ci-runner 部署于k8s之外实现ci/cd。发现gitlab-ci在实际使用中,经常会遇到卡死报错。请问下,相比jenkins 做ci/cd 是会有什么优势,之前并没有使用过jenkins.

A:gitlab-ci生产环境中,我们也没有使用,我们调研的结果是1、有侵入性 2、pipeline功能较弱,但是有一个好处是遇到错误好像还可以继续执行。jenkins遇到错误会中断流程。

Q18:基于kubeadm+calico,空闲时CPU占用达到30-40%是否正常? A:实际使用中没有使用过kubeadm部署,因为封装东西太多,不易于排查问题。空闲时cpu到30-40,需要具体情况分析。

Q19:600个node节点都遇到过什么问题, 有什么需要注意的? A:前期网络上遇到的问题比较多,还包含calico bug。后面多数是一些业务使用上导致的问题,还有业务增量之后引发的各种问题。

Q20:请问是怎么配置的多个不同功能的jenkins-slave pod的还有jenkins-slave镜像怎么做的,还有一个任务中有发布和回滚怎么做呢,老师的cicd人工干预的地方在哪里 A:jenkins-slave镜像实际就是把jenkins的agent.jar运行在容器中。发布就如同前面所讲。回滚最终是调用helm rollback。cicd人工干预的话都是通过配置项来控制的。

Q21 容器web应用,有没有做安全防护呢 有遇到用户恶意模拟XFF,频繁访问接口么 A:这个我们是在入口去做的,因为使用的公有云,直接就上了waf、各种安全产品。

Q22: --anonymous-auth=false 设置后,liveness 访问报401错误,我Kube-apiserver在不停重启,这个需要怎么配置?用insecure ip和port,有不符合安全要求 A:这个是没有通过验证,要确认证书或者相关配置,具体的配置可以参考我的文档https://github.com/k8sre/docs/blob/master/kubernetes/kubernetes高可用集群之二进制部署.md