临时2
DevOps流程包含:计划(plan)、编码(code)、编译(build)、测试(test)、发布(release)、部署(deploy)、运营(operate)、监控(monitor),这是一个循环的过程。DevOps是依托容器、自动化、云计算等技术及精益化管理形成的一种项目过程,有效的促进了开发、测试、运营、运维、QA等团队间的协作,使得团队内、跨团队之间的协作得到极大的提升,可以帮助企业做到产品精益化、运营精益化、管理精益化。
从项目的全生命周期来看,DevOps实现了项目全生命周期的团队高效协作、自动化。DevOps的职责包括:开发和运维的紧密协作、测试和运维的自动化、产品持续交付、持续集成。例如DevOps打通了开发和运维之间的隔阂,加之紫定华运维的出现,大大提高了系统部署的稳定性和安全性。
gitops流水线: 开发人员写完代码之后,将代码提交到自建的gitlab仓库,这时可以通过gitlab ci对代码进行质量检查,比如java项目Maven打包构建,根据项目中的Dockerfile构建Docker镜像,修改helm charts中的镜像版本相关信息,并将Docker镜像推送到Docker私有仓库比如Docker harbor. Jenkins也类似. argocd当检测到git仓库发生变化,会自动同步信息到k8s,触发k8s更新,最终完成发版.
helm charts:
-
从chart仓库中获取chart;
-
使用者配置自己的values文件,根据自己的运行环境对values进行修改;
-
默认values文件和使用者values文件会进行一个merge,形成最终的values文件;
-
使用最终的values文件,渲染chart的template,形成可以被kubernetes执行的yaml;
-
调用kube apply提交yaml到kubernetes
-
- helm install ym-test .
- helm get manifest ym-test # 查看清单
- kubectl get cm ym-test -oyaml # 查看具体configmap
- helm uninstall ym-test
k8s内的pod如何访问外部的服务,总结起来,你可以通过以下步骤来让集群内的应用访问外部服务:
- 创建一个类型为 ExternalName 的 Kubernetes Service。
- 在应用程序中使用这个 Service 名称来访问外部服务。
- 使用 LoadBalancer 或者 NodePort 类型的 Service 将这个 ExternalName Service 暴露到集群外部。
集群外部访问集群内部服务的几种方式:
NodePort, LB, Ingress, ExternalName
pv的回收策略有哪几种
主要有3中回收策略:Retain 、Delete、Recycle。
- Retain:保留,该策略允许手动回收资源,当删除PVC时,PV仍然存在,PV被视为已释放,管理员可以手动回收卷。
- Delete:删除,如果Volume插件支持,删除PVC时会同时删除PV,动态卷默认为Delete,目前支持Delete的存储后端包括AWS EBS,GCE PD,Azure Disk,OpenStack Cinder等。
- Recycle:回收,如果Volume插件支持,Recycle策略会对卷执行
rm -rf
清理该PV,并使其可用于下一个新的PVC,但是本策略将来会被弃用,目前只有NFS和HostPath支持该策略。(这种策略已经被废弃,不用记)
在pv的生命周期中,一般有几种状态
创建pv后,pv的的状态有以下4种:
Available
,表示pv已经创建正常,处于可用状态;Bound
,表示pv已经被某个pvc绑定,注意,一个pv一旦被某个pvc绑定,那么该pvc就独占该pv,其他pvc不能再与该pv绑定;Released
,表示pvc被删除了,pv状态就会变成已释放;Failed
,表示pv的自动回收失败;
Linux性能优化工具及内核参数优化:https://blog.csdn.net/weixin_42313749/article/details/117822365
Linux中对每个用户限制最大文件打开数为1024,这显然在生产环境中远远不够,所以我们可以通过修改/etc/security/limits.conf
,进行修改,nofile
,noproc
如果要对整个系统的最大文件打开数进行限制,那么可以通过修改/proc/sys/fs/file-max
还有就是修改系统允许打开的端口范围,tcp keepalive的时间,tcp链接重用,开启syn cookie(当syn队列满的时候会启用缓存),
找出系统中占用网络最多的进程,可以使用nload命令或者netlogs工具进行。
mysql优化:max_connection修改最大连接数,innodb缓存池大小,查询缓存的大小query_buffer_size,定义慢查询的时间等等。
nginx优化:worker_processes根据CPU数量进行设置,worker_cpu_affinity,使用epoll事件处理模型,设置worker的连接数,设置worker的最大文件打开数,keepalive的会话保持时间,启用gzip压缩。
apache优化:xx.
Jenkins pipefile:
- pipeline: 定义整个Pipeline的开始和结束。
- stage: 定义一组相关的构建阶段。每个阶段可以包含多个步骤。
- steps: 定义阶段中的具体步骤。可以执行Shell脚本、调用其他工具或插件等操作。
- agent: 定义执行Pipeline的代理节点。
- environment: 定义构建过程中的环境变量。
- options: 定义Pipeline的全局选项,如超时时间、并行度等。
- when: 定义在特定条件下执行Pipeline。
- tools: 定义构建过程中需要使用的工具或插件。
- post: 定义在Pipeline执行结束后执行的操作,如邮件通知、测试结果汇总等。
- input: 定义人工干预点,允许用户手动控制Pipeline的执行。
k8s运维过程中遇到的问题:资源不足导致pod一直处于pending状态,后增加集群节点的已解决,pod一直处于terminating状态,pod占用的资源一直没有释放(后竟发现是节点磁盘的被写满,监控也掉了),还有就是有个node节点一直处于notready状态,登录node节点后经排查是kubelet服务异常导致的。