1:
- IaC它涉及使用代码来管理和配置基础设施,而不是手动配置服务器和资源。是DevOps中的一个基本实践,提供了许多优势,如自动化、一致性、可扩展性和成本效益,最终帮助团队更快、更可靠地交付高质量的软件。
2:
- grep,awk和sed命令的目的是强大的文本处理工具,可以用他们在文件中搜索固定关键字信息。
查找error.log文件"error"关键字前后20行内容:
#grep -C 20 'error' 20 error.log
- 查找error.log中带"error"关键字的一行:
# awk '/verb/ {print }' error.log ;
awk还可常用于统计nginx-log中固定时间的pv等。- sed是流编辑器,更常用的是批量更新文件:
# sed -i 's/xx/mm/g' text.txt
3:
- rsync命令主要用于远程同步文件和文件夹,可以是相同的主机也可以是不同的主机通过ssh同步。
- 同步本地目录:
# rsync -avz /root/data /data
- 同步本地目录到远程主机并在删除时级联删除:
#rsync -av --delete 远程主机用户@远程主机:/data /data
4:
- iptables是过滤和记录网络数据包,主要用来做防火墙,透明代理。
- 防火墙过滤掉tun0网卡下目标地址为10.8.0.0的访问:
# iptables -I FORWARD -i tun0 -s 10.8.0.0/16 -d 172.18.0.0/16 -j DROP
5:
- K8s 是一款容器编排工具,方便管理调度容器。其他的有Swarm,dockercompose等。
- 主要核心组件有:
api:处理客户端和和组件调度,结果存储到etcd中。 controllermanager: 运行控制器进程,逻辑上是一个单独的进程;
scheduler: 监听新建未指定运行节点的Pods,并为Pod选择运行节点
etcd: 键值数据库,作为保存K8S数据的后台库
node: 工作节点,应用pod就分布在此节点上。- 主要资源对像有:
namespace,隔离不同生产环境pod;
pod: k8s的最小任务调度单元。一般一个pod运行一个容器。
volume: 据据卷,用于容器的挂载
deployment:pod控制器,扩容缩容,监控pod删除自动重启。
6:
- k8s 中pod是运行应用服务的,但是pod不能直接被访问,为了解决这个问题,于是就有了k8s service的应用场景
- 主要类型有:
ClusterIP(集群IP):只能集群内使用
NodePort:手动设置的静态端口,业务繁多不建议。
LoadBalancer:常用的服务类型。是一个负载均衡器服务,
在每个 pod 上运行并建立与外部世界的连接。
7:
- Ingress是Kubernetes中的一种资源对象,它充当着应用程序的入口点,负责将外部流量路由到集群中的服务。只需一个或者少量的公网IP和LB,即可同时将多个HTTP服务暴露到外网,七层反向代理。ingress需要通过Ingress Controller来实现具体功能。将以Pod的形式运行,监控API Server的/ingress接口后端的backend services,如果Service发生变化,则Ingress Controller应自动更新其转发规则。
8:
- Kubernetes Autoscaling 是根据应用程序的资源使用情况自动调整副本数,以保证应用程序的高可用性和性能的功能。它通过监控指标(例如 CPU 使用率或内存使用率)来评估应用程序的负载情况,并根据预定义的规则进行自动伸缩操作。在 Kubernetes 中,有两种类型的 Autoscaling:水平和垂直。水平Autoscaling是增加或减少正在运行的副本数量,而垂直Autoscaling则是增加或减少每个副本的资源量。
9:
- Jenkins Pipeline是一套运行于Jenkins上的工作流框架,能将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
- Jenkins Pipeline的优点主要有以下几点:
可持续性:即使Jenkins重启或者中断后,Pipeline的工作流程也不会受到影响。
提供了可视化界面:方便管理人员进行项目进度的监控。
提高效率:可以自动化管理项目的构建、测试和发布流程,可以大幅提高工作效率,减少人工干预和错误。
增强可扩展性:Jenkins Pipeline支持使用各种插件进行功能扩展,可以根据项目的实际需求定制和扩展相应的功能。
10:
- Jenkinsfile是Jenkins Pipeline的核心组成部分,它以代码的形式保存了持续集成中的流水线构成,并能结合源代码管理系统(如Git)进行保存。Jenkinsfile定义了一系列任务(或步骤),这些任务在Jenkins服务器上按照特定的顺序执行,以实现持续集成和持续交付。
Jenkinsfile的用途是驱动整个CI/CD流程。在Jenkins中,用户可以编写自己的Jenkinsfile来定制化流水线,包括从代码检查、构建、测试、发布到部署的整个过程。
11:
- Jenkins环境变量在构建过程中扮演着重要的角色,它们可以被视为Jenkins和pipeline交互的媒介。这些环境变量可以暴露Jenkins内置环境变量,也可以使用自定义变量,它们为构建任务提供了便利和效率。
Jenkins环境变量是一种强大的工具,它可以提高构建过程的效率和透明度,同时也可以简化配置和优化工作效率。
12:
- 生产环境部署失败后处理:
1:查看发布时间,标记错误日志记录。
2:回滚,保证正常对外服务。
3:查看监控记录,初步判断失败原因。
4:如果是代码问题下载相关应用错误日志并交与开发,如果是硬件问题,则根据运维经验去判断。
13:
- 以下是Kubernetes YAML、Helm Chart和Kustomize在不同方面的比较描述:
- 模板化:
- Kubernetes YAML: 使用原生Kubernetes对象定义。使用Kustomize等工具的模板能力有限。
- Helm Chart: 提供强大的Go模板语言,允许动态生成Kubernetes清单。
- Kustomize: 提供内置的强大模板功能,支持自定义Kubernetes清单,包括叠加和补丁。
- 可重用性:
- Kubernetes YAML: 清单可以被重用,但常常存在重复和手动管理的问题。
- Helm Chart: 通过包(charts)促进模块化和可重用性,更容易共享和管理应用程序。
- Kustomize: 通过基本配置和叠加,实现清单的重用,减少重复,提高可维护性。
- 依赖管理:
- Kubernetes YAML: 没有内置的依赖管理。依赖关系需要手动处理。
- Helm Chart: 支持依赖管理,允许图表依赖其他图表,简化复杂应用程序的设置。
- Kustomize: 没有原生的依赖管理,但如果需要可以与Helm结合处理依赖关系。
- 配置:
- Kubernetes YAML: 配置通常硬编码在YAML文件中,难以管理动态或特定于环境的设置。
- Helm Chart: 提供值文件和模板,灵活配置。在部署期间可以覆盖值,便于管理配置。
- Kustomize: 允许通过补丁自定义配置,适用于管理不同环境和场景。
- 更新/回滚:
- Kubernetes YAML: 更新通常需要手动修改YAML文件。回滚可能需要手动还原先前的状态。
- Helm Chart: 支持更新和回滚,可以轻松地管理应用程序的版本和状态。
- Kustomize: 具有灵活的更新和回滚功能,可以通过不同的补丁版本管理应用程序的状态。