云原生技术DevOps面试题集锦
1. 解释DevOps的核心原则是什么?
答案: DevOps的核心原则包括持续集成、持续交付、自动化、协作与沟通、以及快速反馈。这些原则旨在通过自动化软件交付过程和改善团队间的协作,来加快和优化软件开发和部署流程。
2. 什么是持续集成(CI)和持续部署(CD)?
答案: 持续集成是一种软件开发实践,开发人员频繁地将代码合并到共享仓库中。每次合并后,自动运行测试,以确保新代码的引入不会导致错误。持续部署是自动将应用从开发阶段移至生产阶段的过程,确保软件的快速、自动化部署。
3. 解释基础设施即代码(IaC)的概念。
答案: 基础设施即代码是一种使用代码自动管理和配置计算资源的方法,而不是手动设置物理硬件。这允许开发和运维团队快速创建和部署可复制、可管理的基础设施环境。
4. 你如何监控系统和应用性能?
答案: 通过使用工具如Prometheus、Grafana、ELK栈(Elasticsearch、Logstash、Kibana)等,可以收集和监控系统和应用的实时性能数据。这些工具可以帮助识别瓶颈、故障和性能下降的原因。
5. 描述一下你如何实现自动化部署。
答案: 自动化部署可以通过使用CI/CD工具如Jenkins、GitLab CI/CD或GitHub Actions实现。这些工具可以自动化编译、测试和部署流程,确保每次代码提交后的自动部署和验证。
6. 解释蓝绿部署和金丝雀部署。
答案: 蓝绿部署是将生产环境分为两个几乎相同的环境,只有一个处于活跃状态。部署新版本时,先在非活跃环境中部署并测试,然后通过切换流量将其变为活跃环境。金丝雀部署是逐步将新版本部署给一小部分用户,以确保新版本稳定后再全面推广。
7. 什么是容器化?Docker是如何工作的?
答案: 容器化是一种虚拟化技术,允许在隔离的环境中运行和部署应用,而不依赖于底层操作系统。Docker是一个流行的容器化平台,它使用容器来打包应用及其依赖项,使得应用能够在任何支持Docker的环境中运行。
8. 解释Kubernetes的工作原理和它的主要组件。
答案: Kubernetes是一个容器编排系统,用于自动部署、扩展和管理容器化应用。它的主要组件包括Pod(容器的集合)、Node(运行Pod的机器)、Service(定义访问Pod的方式)、Deployment(描述期望的应用状态)等。
9. 描述一下如何管理配置和机密。
答案: 配置管理可以通过配置中心如Consul、Etcd或Spring Cloud Config实现。对于敏感信息,应使用机密管理工具如Vault来存储和访问机密,确保安全。
10. DevOps实践中的安全性如何保证?
答案: 在DevOps实践中,通过集成安全工具和实践到CI/CD管道中来保证安全性。这包括使用静态和动态代码分析工具、依赖项扫描、容器安全扫描和自动化安全测试,以确保代码和部署环境的安全。
11. 什么是GitOps,它与传统DevOps有何不同?
答案: GitOps是一种实现DevOps实践的方法,它使用Git作为真理的唯一来源。在GitOps中,所有的基础设施和应用配置都存储在Git仓库中。与传统DevOps相比,GitOps强调使用声明性配置和自动化同步来管理生产环境。
12. 解释什么是无服务器架构。
答案: 无服务器架构是一种执行代码而不需要管理服务器的计算模型。它允许开发者专注于编写和部署代码,而底层的计算资源管理都是自动化的,常见的服务如AWS Lambda、Azure Functions等。
13. 如何实现高可用性和灾难恢复?
答案: 实现高可用性和灾难恢复通常涉及在多个数据中心或地理位置部署应用和数据的副本,使用负载均衡器分散流量,以及定期备份数据和自动故障转移机制。
14. 持续集成过程中遇到的常见问题有哪些?
答案: 常见问题包括合并冲突、构建失败、测试失败、环境不一致性等。通过实施代码审查、保持构建环境的一致性、使用自动化测试和监控来解决这些问题。
15. 解释微服务架构的优势和挑战。
答案: 微服务架构的优势包括灵活性高、可扩展性强、技术多样性以及团队自治。挑战包括服务间通信的复杂性、数据一致性、分布式系统的复杂性管理以及监控和日志聚合的困难。
16. 解释什么是负载均衡以及它如何工作。
答案: 负载均衡是一种提高应用可用性和响应能力的技术,通过分配请求到多个服务器来避免任何单一服务器的过载。它可以基于不同的算法,如轮询、最少连接数或响应时间来分配请求。
17. 你如何处理服务间的依赖和故障传播?
答案: 通过实现服务发现机制、使用断路器模式来防止故障传播、限流和退避策略来控制流量,以及通过熔断机制来避免级联失败。
18. 解释Chaos Engineering。
答案: Chaos Engineering是一种通过有意地在系统中引入故障来测试系统稳定性的实践。它的目的是识别和修复潜在的弱点,以提高系统的韧性。
19. DevOps中如何实现快速反馈机制?
答案: 通过自动化测试和监控、集成反馈工具(如Slack、JIRA)、定期进行代码审查和团队会议,以及使用实时监控和警报系统来实现快速反馈。
20. 描述一个你参与的成功的DevOps项目。
答案: (这个答案应基于个人经验详细描述,包括项目背景、面临的挑战、采取的解决方案、使用的技术和工具、以及最终的成果。)
21. 描述Linux启动过程。
答案:Linux启动过程通常分为以下几个阶段:
BIOS或UEFI启动,并进行自检。
引导加载程序(GRUB或LILO)加载内核。
内核初始化并启动init进程。
init进程根据配置(如SysVinit的/etc/inittab,systemd的systemd目标或Upstart的作业)启动服务。
最终用户登录系统。
22. 什么是系统调用?请给出几个例子。
答案:系统调用是应用程序与操作系统内核之间进行通信的接口,用于执行诸如文件操作、进程控制和网络通信等任务。例子包括open()、read()、write()、fork()、exec()、wait()、socket()等。
23. 如何查看Linux系统的性能瓶颈?
答案:可以使用各种工具和命令,如:
top或htop查看CPU和内存使用情况。
iostat查看磁盘I/O性能。
vmstat查看虚拟内存统计。
netstat或ss查看网络连接和统计。
sar进行系统活动报告。
24. 解释什么是inode以及它的作用。
答案:inode是UNIX和类UNIX系统中的一种数据结构,用于存储文件的元数据(不包括文件名和实际数据)。元数据包括文件的权限、所有者、大小、最后修改时间等。每个文件都有一个唯一的inode号。
25. 描述Linux中软链接和硬链接之间的区别。
答案:软链接(符号链接)类似于Windows的快捷方式,是一个指向文件或目录的指针。删除原始文件,链接将失效。硬链接是文件系统中另一个文件名指向相同的物理位置。删除原始文件,硬链接依然可以访问数据。
26. 如何设置内核参数?
答案:内核参数可以通过sysctl工具设置。可以临时设置,如sysctl -w parameter=value,也可以永久设置,通过将参数添加到/etc/sysctl.conf文件中,然后使用sysctl -p加载。
27. 解释什么是RAID,以及不同RAID级别。
答案:RAID(冗余阵列独立磁盘)是将多个磁盘驱动器组合成一个逻辑单元以提高性能和(或)提供数据冗余的一种技术。常见的RAID级别包括:
RAID 0(条带化):提高性能,但没有冗余。
RAID 1(镜像):提供数据冗余,通过复制数据到两个或更多硬盘。
RAID 5(带奇偶校验的条带化):提供数据冗余和性能提升,但至少需要三个磁盘。
RAID 10(镜像+条带化):结合了RAID 1和RAID 0的特点,提供冗余并提升性能。
28. 如何查找和终止僵尸进程?
答案:可以使用ps命令查找僵尸进程,如ps aux | grep 'Z'。终止僵尸进程通常需要终止其父进程。
29. 解释什么是SELinux以及其作用。
答案:SELinux(Security-Enhanced Linux)是一个Linux内核安全模块,提供了基于访问控制策略的安全防护。它可以限制进程和用户对文件、目录和端口的访问。
30. 如何在Linux中配置IP地址?
答案:可以使用ip或ifconfig命令手动配置IP地址,例如,使用ip addr add 192.168.1.2/24 dev eth0命令为eth0接口设置IP地址。也可以通过编辑网络配置文件或使用网络管理器进行配置。
31. 解释Linux中的LVM是什么及其好处。
答案:LVM(逻辑卷管理)是Linux中一种高级的磁盘管理技术,它允许管理员创建逻辑卷,这些逻辑卷可以跨一个或多个物理硬盘扩展。LVM的好处包括灵活的磁盘管理、容易的磁盘扩容以及支持快照。
32. 解释什么是NFS以及如何配置它。
答案:NFS(网络文件系统)允许在网络上共享文件和目录。配置NFS服务器涉及安装NFS软件包、编辑/etc/exports文件以添加共享目录和权限,然后启动NFS服务。客户端需要挂载远程NFS共享。
33. 如何使用SSH进行无密码登录?
答案:无密码登录通过SSH密钥实现。首先,在客户端生成一对密钥(公钥和私钥),然后将公钥添加到服务器的~/.ssh/authorized_keys文件中。确保正确设置权限。
34. 描述iptables和firewalld之间的区别。
答案:iptables是较早的Linux防火墙工具,直接操作内核的netfilter框架进行数据包过滤。firewalld是较新的管理工具,提供动态防火墙管理,支持防火墙区域和服务,而不需要重启防火墙服务。firewalld使用firewall-cmd工具进行管理,并可以向后兼容iptables。
35. 如何查找最消耗CPU的进程?
答案:可以使用top或htop命令查看CPU使用率最高的进程。也可以使用ps命令,如ps aux --sort=-%cpu | head。
36. 解释什么是Docker容器以及它与虚拟机的区别。
答案:Docker容器是一种轻量级的、可打包的、独立的软件包含环境,它允许软件在任何支持Docker的系统上以相同的方式运行。与虚拟机不同,容器直接在宿主操作系统的内核上运行,不需要单独的操作系统。这使得容器更加高效和快速。
37. 如何备份和恢复Linux系统?
答案:备份可以使用各种工具,如tar、rsync、dd,或专业的备份软件。恢复则涉及将备份数据复制回原始位置或新位置。可以选择全系统备份、增量备份或仅特定文件/目录的备份。
38. 如何设置定时任务(cron job)?
答案:定时任务可以通过编辑crontab文件设置。使用crontab -e编辑当前用户的crontab,或使用sudo crontab -e为root用户编辑。每条crontab行都表示一个任务,包含执行时间和要执行的命令。
39. 解释什么是虚拟内存以及如何配置它。
答案:虚拟内存是硬盘上的一部分空间,被用作扩展的RAM。当系统RAM不足时,可以使用虚拟内存。在Linux中,虚拟内存通常通过交换分区或交换文件配置。可以使用swapon和swapoff命令管理交换空间。
40. 解释Linux中的shell脚本是什么以及如何创建一个简单的脚本。
答案:Shell脚本是一种用于自动执行命令的脚本语言。创建脚本,首先在文本编辑器中编写命令,然后保存为文件。文件开头应包含#!/bin/bash(或其他shell的路径)。给文件执行权限(chmod +x filename),然后可以直接执行脚本。
41. 解释Python中的GIL(Global Interpreter Lock)
GIL是Python解释器中的一个机制,用于限制解释器在任何时候只能执行一个线程。这是因为CPython的内存管理并不是线程安全的。尽管它限制了多线程的并发,但它简化了CPython的实现,并使得单线程程序能够高效执行。
42. 在Python中如何管理内存?
Python依靠自动垃圾回收机制来管理内存,主要通过引用计数与垃圾回收器来实现。当一个对象的引用计数降到0时,它的内存会被释放。Python还有一个周期检测器,可以检测并清除循环引用中的对象。
43. 什么是Python装饰器,它是如何工作的?
装饰器是一种设计模式,用于在不修改原有函数定义的情况下,给函数添加额外的功能。它们通过在函数上方使用@decorator_name语法实现。装饰器本质上是一个接受函数作为参数并返回一个新函数的函数。
44. 解释Python中的元类(metaclass)。
元类是创建类的类。就像类定义了实例的行为,元类定义了类的行为。它们用于创建具有特定特性的类,例如注册子类或修改类属性。
45. Python中的深拷贝与浅拷贝区别是什么?
浅拷贝创建一个新对象,但不递归地复制对象中的内部引用对象。深拷贝不仅复制了对象,还递归地复制了对象中的所有引用的对象。
46. 什么是Python中的上下文管理器,它是如何工作的?
上下文管理器是支持with语句的对象,用于为代码块设置前置条件和后置条件。它定义了__enter__和__exit__方法,分别在代码块开始和结束时执行。
47. 解释Python的生成器和它们的用途。
生成器是一种特殊类型的迭代器,使用yield语句返回数据。它们允许延迟操作的执行,适用于处理大数据集或复杂计算,因为它们不需要一次性加载所有数据到内存中。
48. 如何在Python中实现多态?
Python支持鸭子类型,即“如果它走路像鸭子,叫声像鸭子,那么它就是鸭子。”因此,Python中的多态是通过简单地调用存在于对象中的方法实现的,而不强制要求对象继承自同一个类。
49. 解释Python中的闭包。
闭包是一个函数,它记住了其外部作用域中被引用的变量,即使在其外部作用域不再存在时仍然可以访问这些变量。
50. Python中的迭代器和可迭代对象有什么区别?
可迭代对象实现了__iter__方法,可以返回一个迭代器。迭代器实现了__next__方法,返回下一个元素,并在没有更多元素时抛出StopIteration异常。
51. 如何使用Python进行单元测试?
可以使用Python标准库中的unittest模块来创建单元测试。通过继承unittest.TestCase类并定义以test开头的方法来编写测试用例。
52. 解释Python中的List Comprehensions。
列表解析是创建列表的一种简洁方法,它通过对序列中的每个元素应用表达式来生成新的列表。
53. 什么是Python中的异常链?
在Python 3中,当在处理一个异常的过程中引发了另一个异常,可以通过raise new_exception from original_exception语法将原始异常附加到新异常上,构成异常链。
54. Python中的异步编程是什么?
异步编程是一种编程范式,允许程序在等待某些操作完成时继续执行其他任务。在Python中,asyncio库和async/await语法用于编写异步代码。
55. 如何在Python中使用装饰器给函数添加一个计时功能?
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result= func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} ran in: {end - start} sec")
return result
return wrapper
@timer
def some_function():
time.sleep(2)
56. 解释\*args和\****kwargs在Python中的用途。
*args允许函数接受任意数量的位置参数,**kwargs允许函数接受任意数量的关键字参数。
57. 解释Python中的类型注解。
类型注解是Python 3.5及以后版本中引入的特性,允许开发者为变量、函数参数和返回值指定类型。这有助于代码的可读性和静态类型检查,但不强制执行类型。
58. 什么是Python中的字典推导式?
字典推导式是一种创建字典的简洁方法,通过对序列中的每个元素应用表达式来生成键值对。
59. Python中的魔法方法是什么?
魔法方法(也称为特殊方法)是Python中的一类特殊的方法,它们由双下划线包围(例如__init__,__str__),用于实现和修改对象的内置行为。
60. 如何在Python中实现单例模式?
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
1
2
3
4
5
6
61. Shell脚本的第一行通常是什么?为什么重要?
答案: Shell脚本的第一行通常是#!/bin/bash或其它Shell的路径,这行被称为shebang。它告诉操作系统使用哪个解释器来执行脚本。这对于确保脚本按预期方式运行很重要,即使在不同环境中也能保持一致性。
62. 如何在Shell脚本中声明和使用变量?
答案: 在Shell脚本中,可以通过直接为变量赋值来声明变量,如variable_name=value。使用变量时,前面要加上$符号,例如echo $variable_name。
63. 解释位置参数($0, $1, $2, …, $#, $@, $*)。
答案:
$0 - 脚本名称。
$1到$9 - 脚本的第一到第九个参数。
$# - 传递给脚本的参数个数。
$@ - 所有位置参数的列表,被双引号""包围时,每个参数都是独立的。
$* - 所有位置参数的列表,被双引号""包围时,所有参数被视为单个实体。
64. 解释Shell脚本中的条件语句。
答案: Shell脚本支持if-else和case语句来进行条件判断。if-else语句格式如下:
if [ condition ]; then
# commands
elif [ condition ]; then
# commands
else
# commands
fi
case语句格式如下:
case $variable in
pattern1)
# commands
;;
pattern2)
# commands
;;
*)
# default commands
;;
esac
1
2
3
4
5
6
7
8
9
10
11
65. 如何在Shell脚本中进行循环迭代?
答案: Shell脚本支持for循环、while循环和until循环。
for循环示例:
for variable in list; do
# commands
done
1
2
3
while循环示例:
while [ condition ]; do
# commands
done
1
2
3
until循环示例:
until [ condition ]; do
# commands
done
1
2
3
66. 如何在Shell脚本中捕获和使用函数的返回值?
答案: 在Shell脚本中,函数的返回值通过return语句指定。可以通过$?特殊变量捕获上一个命令或函数的退出状态。
function_name() {
# commands
return value
}
function_name
echo $? # 输出function_name的返回值
1
2
3
4
5
6
7
67. 解释Shell脚本中的数组和如何使用它们。
答案: Shell脚本支持一维数组。可以使用括号()声明数组,使用空格分隔元素。访问数组元素时,使用${array_name[index]}语法。
array_name=(element1 element2 element3)
echo ${array_name[0]} # 访问第一个元素
echo ${array_name[@]} # 访问所有元素
1
2
3
68. 如何在Shell脚本中重定向输出和输入?
答案:
使用>将命令的输出重定向到文件中,如果文件已存在,则覆盖。
使用>>将命令的输出追加到文件中。
使用<将文件的内容作为命令的输入。
使用2>重定向错误输出。
69. 解释Shell脚本中的错误处理和调试技巧。
答案: 错误处理可以通过检查命令的退出状态来实现。Shell脚本中的set -e选项可使脚本在遇到错误时立即退出。调试Shell脚本时,可以使用set -x选项在执行时显示命令和它们的参数。
70. 如何优化Shell脚本的性能?
答案: 优化Shell脚本性能的方法包括:
避免在循环中使用管道和外部命令,因为每次调用外部命令都会产生新的进程。
使用内建的字符串处理功能而不是调用sed、awk等外部程序。
在可能的情况下,使用数组而不是频繁地调用外部程序处理数据。
缩小grep、sed和awk等命令处理的文件大小和范围。
71. 如何确保Shell脚本的可移植性?
答案: 确保Shell脚本可移植的方法包括:
使用POSIX标准的Shell(如/bin/sh)而不是特定Shell的扩展功能。
避免使用特定操作系统或发行版的特定命令和特性。
在脚本中检查并使用可用的命令和工具的版本。
使用条件语句处理不同环境中可能的差异。
72. 解释什么是子Shell以及如何在Shell脚本中创建它。
答案: 子Shell是当前Shell的一个独立副本,它继承了父Shell的环境(变量等),但任何在子Shell中做出的更改(如变量赋值)不会影响父Shell。在Shell脚本中,可以通过将命令置于括号中来创建子Shell:
( command1; command2; )
1
73. 解释Shell脚本中的信号捕获和处理。
答案: Shell脚本可以捕获并处理Unix信号(如SIGINT、SIGTERM等)。trap命令用于指定遇到特定信号时执行的命令。
trap 'echo "SIGINT received"; exit' SIGINT
1
74. 如何在Shell脚本中实现并发和并行执行?
答案: 在Shell脚本中,可以通过在命令后添加&符号来实现并发执行。这会使命令在后台执行。使用wait命令可以等待所有后台进程完成。
command1 &
command2 &
wait
1
2
3
75. 如何在Shell脚本中操作字符串?
答案: Shell脚本提供了多种字符串操作功能,包括:
获取字符串长度:${#string}
提取子字符串:${string:position:length}
查找和替换:${string/search/replace}
76. 解释如何在Shell脚本中处理文件和目录。
答案: Shell脚本提供了多种处理文件和目录的命令,如cp(复制)、mv(移动)、rm(删除)、mkdir(创建目录)等。还可以使用test命令或[ ]来检查文件和目录的状态(如是否存在)。
77. 如何在Shell脚本中使用正则表达式?
答案: 在Shell脚本中,可以使用grep、sed和awk等命令配合正则表达式进行文本处理和数据提取。
78. 解释Shell脚本中的I/O重定向和管道。
答案:
I/O重定向允许你改变命令的标准输入、输出和错误输出。
管道|允许将一个命令的输出直接作为另一个命令的输入。
79. 如何确保Shell脚本的安全性?
答案: 确保Shell脚本安全的措施包括:
避免解析未经过滤的用户输入。
使用set -u使未定义变量的引用成为错误。
使用绝对路径指定命令位置,避免命令注入。
小心处理特权提升,避免使用sudo或以root权限运行脚本。
80. 解释Shell脚本中的引用机制。
答案: Shell脚本中,单引号' '用于保留字符串中的所有字符的字面值,双引号" "允许引用变量,而反引号`````或$()用于执行命令并获取其输出。
81. 什么是OSI模型?它的七层分别是什么?
OSI(开放式系统互连)模型是一个参考模型,用于理解和设计计算机网络的工作流程。七层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
82. TCP和UDP的区别是什么?
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP(用户数据报协议)是一种无连接的、不可靠的、基于消息的协议。
83. 什么是CIDR表示法?
CIDR(无类别域间路由)表示法是一种用于表示IP地址和其关联的路由前缀的方法,例如192.168.1.0/24,其中“/24”表示网络前缀占据地址的前24位。
84. 解释NAT如何工作。
NAT(网络地址转换)允许局域网中的私有IP地址通过一个或多个公共IP地址与互联网通信。它通过重写进出数据包的源或目的地址来工作,从而实现地址转换和端口转换。
85. 描述IPv4与IPv6的主要区别。
IPv6地址长度为128位,比IPv4的32位要长,从而提供了几乎无限的地址空间。IPv6还引入了许多新特性,包括简化的头部格式、改进的安全性(IPsec的直接支持)和更好的支持移动性。
86. BGP协议是什么?它如何工作?
BGP(边界网关协议)是互联网上用于路由和达成自治系统(AS)之间路由信息的协议。它基于路径、策略和/或规则集来决定数据包的最佳路径。
87. 解释VLAN的概念及其用途。
VLAN(虚拟局域网)允许在一个或多个物理网络设备上创建分隔的逻辑网络。这样可以提高网络的安全性和效率,通过逻辑上分隔流量来实现。
88. 什么是MPLS?它和传统IP路由有何不同?
MPLS(多协议标签交换)是一种数据传送方法,它在数据包传输中使用短路径标签而非网络地址,从而提高转发效率。与传统IP路由基于目的地地址和路由表进行每跳决策不同,MPLS可以创建预定义路径,称为标签交换路径(LSP)。
89. 解释DDoS攻击以及如何防御。
DDoS(分布式拒绝服务)攻击是一种试图使网络服务不可用,通过超负荷服务的基础架构的方式进行的攻击。防御方法包括增加带宽、使用DDoS缓解服务和部署入侵检测系统。
90. 什么是SSL/TLS,它如何工作?
SSL(安全套接字层)和TLS(传输层安全)是用于在互联网上提供加密通信的协议。它们通过使用公钥和私钥加密技术来保证数据的安全传输。
91. 解释什么是IPSec。
IPSec(Internet Protocol Security)是一组协议,用于在IP网络传输中保证通信的安全。它主要用于VPN连接,支持数据加密、身份验证和数据完整性。
92. 什么是SDN?它如何改变网络管理?
SDN(软件定义网络)是一种网络架构,它将网络控制层从数据转发层中分离出来,允许网络管理员通过软件应用程序更灵活地控制整个网络。这使得网络配置和管理更加自动化和灵活。
93. 解释什么是网络拓扑,常见的网络拓扑类型有哪些?
网络拓扑是网络中元素(如节点、连接等)的物理或逻辑排列。常见的物理网络拓扑类型包括星形、环形、总线形、网状等。
94. 什么是VRRP?它是如何工作的?
VRRP(虚拟路由器冗余协议)是一种容错协议,用于实现网络中的路由器冗余,以确保如果主路由器失效,备份路由器可以立即接管,最小化网络中断时间。
95. 解释什么是QoS,以及为什么它重要?
QoS(服务质量)是一种网络机制,用来保证在网络通信中重要或高优先级的流量获得特定的带宽、延迟、抖动等要求。它对于保证语音、视频和其他实时服务的性能非常重要。
96. 如何配置和使用SNMP?
SNMP(简单网络管理协议)是用于管理网络上设备的一种协议。配置SNMP通常涉及设置SNMP代理(在网络设备上)和SNMP管理器(用于监控和管理的软件),以及相关的社区字符串(用作密码)。
97. 解释什么是网络分段以及其优点。
网络分段通过将网络划分为多个较小的、管理起来更简单的子网来提高安全性和性能。这有助于减少广播流量,提高安全性,并简化故障排除。
98. 描述一种常见的网络故障排除方法。
一种常见的网络故障排除方法是“分而治之”,即通过逐步排除故障可能的来源,如物理层、数据链路层、网络层等,来缩小故障范围,并最终定位问题。
99. VPN是如何工作的?
VPN(虚拟私人网络)通过在公共网络(如互联网)上创建一个安全的、加密的连接,使得远程用户和网站之间的通信就像是在一个私人网络内部进行一样。
100. 什么是云计算中的多租户?
多租户是云计算中的一个概念,指的是一种架构,允许多个客户(或“租户”)共享相同的应用程序或基础设施资源,同时保持各自数据的隔离性和安全性。
1. 简述:设计一个支持高并发、高可用的动态网站架构?
实验目标:七台服务器搭建lnmp,实现高并发,高可用的动态网站架构 Lb1: 1).搭建Keepalived,以vrrp为底层,实现多台主机高可用群集lb1为主 2).搭建nginx负载均衡,接收到客户的URL访问请求后分散转发到后台web群集节点 3).将nginx配置文件拷贝到lb2 Lb2: .同样搭建Keepalived,lb2为备份,若lb1 done掉后,lb2会立即收到消息并接管lb1的工作 .搭建nginx负载均衡,接收到客户的URL访问请求后分散转发到后台web群集节点 Web1: .搭建nginx web网站,先安装nginx 复制wordpress网页到根目录之下,并解压赋权 修改web配置文件添加动态php和静态,将网页根目录拷贝到php服务器上,以便php服务器读取网页内容 将默认配置文件及wordpress网页根目录同时拷贝到web2上实现均可访问 将网页根目录拷贝到nfs上,查看并挂载 Web2:同样搭建nginx web网站 .先安装nginx 接收到web1所拷贝的内容后,重启nginx服务 Php:动态解析器 先安装php服务 因php服务默认只能监听本机的Ip,所以需要修改配置文件,并重启服务 Mysql:数据库 .先安装数据库 并创建库和用户名及密码,重启服务 Nfs:文件共享 .默认以安装nfs 创建共享目录,并设置永久权限,重启服务 |
1.不能关机的情况下 , 如果挂载目录卸载不掉应该怎么办
umount卸载不掉是因为正在被程序读取或者有数据正在写入
使用 fuser 或者 lsof 查看正在占用的磁盘的进程PID
kill -9 PID强制结束进程
umount卸载
如果kill -9无法杀死进程,可以使用umount -f强制进行卸载,但是这种方法是最不推 荐的
2.如果你向文件系统中写入数据 , 发现无法写入 , 怎么处理
此时应该考虑两种情况:
磁盘空间被占满:此时可以删除一些垃圾数据;或者将一些历史数据导出,将磁盘中的 数据进行删除;如果在安装文件系统时,底层使用了LVM,可以进行在线扩容,增加硬 盘容量
inode号被用完:建议导出一些历史数据,然后将硬盘中的数据删除
3.客户反映服务器卡顿 , 你会怎么排查
3.1 查看服务器的内存和CPU,确定内存大小和CPU核
3.2 查看CPU负载,确认负载高是因为CPU的使用、内存的使用还是io的使用引起的
使用 top 命令进行查看
3. 3查看数据库
show full processlist; #查看数据库当前正在使用的线程
通过这个命令可以查看当前登录到数据库的用户、用户的状态和执行的sql语句,通过这些能够分析操作和sql语句是否有误
4.如果你在执行命令时 , 发现Linux系统命令执行速度很慢 , 你会怎么解决
lscpu:查看CPU的相关信息,看CPU的缓存是否过高
free -mh:查看系统磁盘文件缓存是否过大
主要就是,查看系统中的CPU、负载等情况;检查系统是否在执行定时计划任务等;也 可以选择杀死进程,但是杀死进程前需要根据占用过高的进程做进一步的分析
22.为什么在搭建web服务器时要做动静分离 , 什么是动静分离
· 动静分离:根据一定的规则将不变的资源和经常发生变化的资源进行分离,然后我们就 可以将静态资源进行缓存。简单概括,就是把动态文件和静态文件进行分离
· 有一些请求需要后台进行处理,但是有一些请求是不需要后台进行处理的。如果不做动 静分离,这些静态资源就会去向后台服务器发起请求,在并发较高时,会比较明显的导 致响应时间增加;实现动静分离,能够明显提高用户访问静态资源的速度。
解释 一 下数据库的主从复制的原理( 或者会问: 怎么做的数据库的数据同步)
· 从服务器会向主服务器提交主机偏移位
· 从服务器的io线程会主动连接主服务器的io线程
主服务器会通过io线程将bin-log日志推送给从服务器,然后进入休眠状态
· 从服务器的io线程会唤醒sql线程,将bin-log日志转化为存储日志,进行数据同步,然 后线程会进入休眠状态,等待下一次同步
29.数据库主从不同步的原因
网络延迟:数据库主从同步是基于binlog日志的异步复制,而binlog日志是通过网络进 行传输的,网络延迟大时,可能会造成主从不同步
· 主从数据库负载不一致:主从同步时,主数据库需要一个io线程,而从服务器需要一个 io线程和一个sql线程,当一台服务器负载过大时,会导致提供给线程的资源不足,主 从同步就无法完成
· MySQL异常宕机
· 主从数据库设置的 max_allowed_packet 不一致,当主库执行一个较大的sql语句,从库
无法成功执行,导致数据不同步
· 可能在数据同步过程中发生了bug
· MySQL主从数据库的版本不一致,如果主数据库的版本较高、从数据库版本较低,也会 导致同步不成功
30.解释 一 下数据库的读写分离
如果被这么问到 , 不仅要解释什么是读写分离 , 还要说出数据库主从复制的原理 , 切
忌只说读写分离 , 回答一 定要完整
· 读写分离就是,主服务器负责写入数据,后台的一台或多台从服务器提供读操作 · 当主数据库写入数据时,从服务器会将数据同步过去
· 解释主从同步的原理
31.如果数据库主库宕机了, 怎么切换到从库 ,如果有多个从库 ,其余的从库如何处理
· 登录所有的从库,执行show slave status\G;查看Pos信息,选择Pos值最大的从库作为 主库,执行stop slave命令
· 修改my.conf配置文件,开启bin-log日志,然后重启数据库,登录数据库执行restart master,修改对应服务器IP信息
· 登录其他从库,执行change master,查看状态
32.解释 一 下事务的四个特征 , 和什么是数据库的回滚
· 事务的四大特征:
持久性:对数据库的所有操作被保存后将不能进行回滚
原子性:对事务的操作要么全部被执行,要么全部都不执行
一致性:事务的开启前后,数据库的完整性没有被破坏
隔离性:同一时间内,同一个事务只允许一个请求;不同的事务不会受到干扰
· 数据库的回滚:对数据库进行操作后,如果操作过程中发生错误,那么事务将回到修改 之前的状态
33.MySQL数据库的备份方式
· 增量备份
· 异地备份
· 重要的数据库会在设计架构时,搭建一个一摸一样的数据库做完整备份 · 通过命令行备份: mysqldump -uroot -p 数据库名 > *.sql文件
· 通过Rsync+Inotify进行冷备
· 设计架构时,会搭建数据库的集群,进行热备
————————————————
解释 一 下数据库的锁机制
数据库的锁机制是一种对数据的保护机制,因为数据库支持并发,所以可能存在同一时间 内多个用户对同一个数据进行修改,这可能会破坏数据的一致性;当用户对数据进行修改 时,系统会先对这个数据进行加锁,这就保证了事务对这个数据的控制,当这个数据被修 改完成之前,其他的事务不能对这个数据进行修改,保证了数据的一致性。
38.说 一 下高可用负载均衡集群 , 原理是什么
如果被问到keepalived如何解决单节点故障 , 就回答原理
· 使用LVS做负载均衡集群,使用keepalived做高可用集群
· LVS负载均衡集群
LVS主要采用的是基于IP的负载均衡技术,它由两个核心组件构成: ipvs (钩子函 数)、 ipvsadm;其中, ipvs是LVS的核心组件,是一个框架,而ipvsadm是一个管 理命令,用来定义路由转发规则,工作在用户空间中
· keepalived高可用集
keepalived基于VRRP(虚拟路由冗余协议)来实现高可用功能, keepalived可以监 控集群中各个节点的功能是否正常,如果节点异常或者服务故障, keepalived会将 故障节点从集群中清除出去,在故障节点恢复正常后, keepalived会将节点重新拉 入集群中。
VRRP(虚拟路由冗余协议):是为了解决静态路由状态下出现的单节点路由故障问 题。 VRRP实际上是一个虚拟路由器集群,这个集群工作在实际的物理路由器之上, 这些路由器中有一个master路由器,其余的路由器都是backup级别;只有master路 由器不断的进行vrrp数据包的发送,而backup路由器只负责数据包的接收,同时负 责监控master的运行状态,因此不会发生抢占的现象。如果master路由器出现故障, backup路由器无法接收到来自master服务器的数据包,那么就会认定master服 务器故障,接着剩下的所有backup路由器会进行选举,优先级最高的backup会成为 master,这个过程非常短,能够保证服务的持续性。
————————————————
说 一 下常见的网络状态码
http状态码主要分为5类:
· 1** :服务器收到请求,需要请求者继续进行后续操作
· 2** :操作被成功接收
· 3** :重定向,需要进一步操作完成请求
· 4** :客户端错误,主要指语法错误或者无法完成请求
· 5** :服务器端错误,服务器在处理请求的过程中出现错误
常见的错误状态码:
· 400:服务器不理解请求的语法
· 401:未授权,请求进行身份验证,登录需要授权的网站可能返回此提示 · 403:服务器拒绝请求,可能是服务器或主机拒绝了访问
· 404:服务器找不到页面,访问服务器上不存在的页面会返回这个提示 · 405:客户端请求中的方法被禁用
· 500:服务器内部错误,无法完成请求
· 502:服务器充当网关或者代理,从上游服务器收到了无效响应
· 503:服务器超载或暂停出现的状态码,通常只是暂时的
· 504:服务器充当网关或代理,从上游服务器收到的响应超时
· 505:服务器不支持http协议的请求,无法完成处理
44.解释 一 下502是什么意思 , 说 一 下你的排错思路
· 502:服务器充当网关或者代理,从上游服务器收到了无效响应。简单的说就是网关错
误, web服务器通信失败
· 排错思路
因为是和web服务器通信失败,所以可以先检查网络,看网络是否畅通
也可能是因为web服务器未启动,检查web服务器进程是否在运行状态,端口是否 开放
web服务器处理的请求太多,无法响应这个请求,检查web服务器的日志来定位错 误原因
45.解释 一 下http协议 , 和https协议有什么区别
· http协议:超文本传输协议,基于的是TCP/IP协议,是一种无连接(限制每次连接只处 理一个请求,处理完成后立即断开)、无状态(服务器端对数据没有记忆能力)的协 议,只能由客户端向服务器端请求数据,服务器端不会主动发送数据
· 区别
http是明文传输,容易被攻击, https是http协议+ssl加密组成,确保数据传输过程是 加密进行的
http是无状态连接, https的连接过程是加密过的
46.SSH远程无法连接 , 说 一 下你的检查思路
主要从四个方面进行分析:网卡,端口, IP,防火墙
· 检查客户端网线连接是否正常,重新插一下网线,重新尝试远程连接
· 去机房检查网络连接、网卡是否正常,检查IP地址
· 检查防火墙是否开启,如果开启防火墙,查看防火墙规则中是否添加了远程连接的端口
· 查看IP安全策略中是否添加了需要远程连接的网段
————————————————
说一下防火墙的四表五链
·四表,承载链
raw:数据报文跟踪
filter:数据报文过滤
mangle:数据报文修改
nat:路由转发,实现dnat (目标地址)和snat (源地址)转换
·五链,承载规则
input:数据包入站应用此链中的规则
output:数据包出站应用此链中的规则
forward:处理数据包转发的报文请求
prerouting:数据包做路由前选择,配合DNAT使用
postrouting:数据包做路由后选择,配合SNAT使用
58.swap分区的作用
swap分区是一个交换分区,当物理内存不足时, swap分区会释放一部分内存给当前正在运 行的程序使用。这部分空间一般来自那些很长时间没有运行过的程序,系统将这部分空间 临时存放在swap空间中,给那些内存占有率比较高的程序使用。
59.怎么查看系统中的进程和线程
进程: top,ps -aux,ps -ef
线程: ps -aT
(查看系统中的所有线程)
ps -T -p <PID> :查看某个进程中的线程
top -H -p <PID> :查看进程中的线程
60.buffer和cache的区别
buffer:缓冲,是为了提高内存和硬盘(或者其他io设备)之间的数据交换速度而设计 的
cache:缓存
从CPU的角度来看,是为了提高内存和CPU之间的数据交换速度而设计的
从内存读取和磁盘读取的角度来看,可以理解为系统为了更高的数据读取速率,将 已经读取过的数据存放在内存中。
61.如何查看系统的资源限制
ulimit -a
62.说 一 下ulimit命令
ulimit 命令主要用来限制使用系统资源(内存、 CPU等)的范围,是Linux系统的一个 内置的bash命令
ulimit 设置项仅在当前shell才会生效,需要永久生效需要修改配置文件
将限制写入 ~/.profile或者~/.bashrc 只对当前的用户生效
写入 /etc/security/limits.conf 下可针对性配置,在系统层面永久生效
· 调整相关硬限制值 (Hard Limit) ,设置一次后,下一次设置的值只能比上一次的值要 小
· 如果不加S或者H修饰,默认同时修改硬限制和软限制
63.怎么查看当前的系统环境变量 , 怎么查看所有的系统环境变量
· 查看当前的系统变量: set
· 查看所有的系统环境变量: env
· set:显示当前shell定义的私有变量
· env:显示用户的环境变量
· export:显示当前导出成用户变量的shell变量,并显示变量属性
64.程序自动启动有哪几种方式
· 在CentOS7中,使用 systemctl enable 软件 ,设置开机自启
· 在CentOS6中,使用 service 软件 enable ,设置开机自启
· 或者将命令写入 /etc/rc.d/rc.local 下,会在开机自动运行
/etc/rc.local是/etc/rc.d/rc.local的软链接
65.用过抓包命令吗 , 说 一 下怎么指定网卡 , 怎么指定所有网卡 , -nn和 -vv什么含 义
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析,它支持针对网络层、协 议、主机、网络或端口的过滤
· 包分析工具: tcpdump
· 指定网卡: -i
· 指定所有网卡: -i any
· -nn:禁止IP和端口的名称解析
· -vv:显示详细信息, v 的个数越多,显示的信息越详细
66.接触过redis集群吗 , 说 一 下redis集群的三种实现方式 , 原理是什么
· 主从模式
slave端启动后,会主动向master端发送sync命令, master会拍摄快照保存到后台
(RDB持久化),同时会缓存保存这段时间的命令,然后将快照和命令发送到slave 端, slave端加载快照文件和缓存命令进行数据同步。
如果master节点宕掉,那么redis集群就无法对外提供写服务。
· 哨兵模式
以主从模式作为基础,在集群加入监控服务器,监控服务器可以是一台也可以是一 个集群。
监控服务器以每秒一次的频率向集群中的master节点、 slave节点和其他的监控节点发送 ping 命令。
如果一个节点距离最后一次有效回复 ping 命令的时间超过了配置文件中规定的时 间,那么这个节点就会被标记为主观下线。
如果一个master节点被标记为主观下线,那么监视master节点的所有监控服务器会 以每秒一次的频率确认master节点确实进入了主观下线状态。如果由足够多的监控 服务器将master节点标记为了主观下线状态,那么这个master节点会被标记为客观 下线状态。
使用哨兵模式时,客户端连接的是哨兵的IP和端口,由哨兵来提供Redis集群的相关 服务,如果master节点挂掉,那么哨兵就会从slave节点中重新选择一个作为master 节点
高可用集群:
高可用集群解决了当数据量过大时,单台服务器的存储容量不够的问题。高可用集 群可以对数据进行分片,将数据储存在多个服务器中。
在cluster集群中,每个节点都可以作为一个主从模式的集群(一主一从或者一主多 从),其中slave只作为备用,不提供服务。客户端可以直接连接master节点进行读 写。
多个节点之间通过网络进行数据共享
cluster集群通过哈希函数进行数据分区,因为Redis数据库是通过 key-value 的方式 进行数据存储,所以在构建cluster集群时,所有的键会根据哈希函数分配到 0-1638 3 的虚拟槽中。
如果master节点被标记为客观下线状态,那么会从他的slave节点中选择一个替换 它,保证集群的高可用。
67.服务器内存不够怎么处理
首先查看服务器的内存容量,然后查看服务器的运行程序和进程,分析是由于程序运行 过多和线程占用造成的内存不足,还是由于服务器本身的硬件资源不足导致的。
也有可能是因为服务器中毒引起的内存不足
68.CPU资源不足怎么处理
使用 top 命令查看一下哪个进程占用的CPU资源过高
找到进程中消耗资源最多的线程id,使用的命令是 top -H -p 进程id
将线程id转换为16进制, 使用命令 printf "%0x\n" 线程id 或者 echo 'obase=16,线程id' | bc查看线程的状态信息作进一步分析,使用命令
进制 jstack 进程id | grep -A 10 线程id的16
69.遇到磁盘空间不足的报错 , 你应该如何处理
可能一:
使用 df -h 命令查看磁盘空间的使用情况,确定哪个目录占用的磁盘空间过高
确定目录后,使用 du -h 命令进行逐级定位,确认到占用空间最大的大文件
查看文件内容,确认一下是否需要保留,如果需要保留就通过压缩导出,不需要保 留可以直接删除,或者对磁盘进行扩容
或者可以直接使用 find 命令查找目录下大于400MB的文件名称,然后进行删除 fi
nd 目录 -size +400M
可能二:
使用 df -h 命令并不能发现大文件,那么可能是文件被删除,但是进程仍然在调用 这个文件
此时可以通过 lsof | grep delete ,找到占用的进程,把这个进程kill掉然后重启 服务器即可
70.如何将新磁盘扩展到已有分区
首先将磁盘格式化, CentOS6使用 fdisk 命令, CentOS7使用 gdisk 命令
使用 pvcreate 将新分区创建为物理卷
使用 pvdispalay 列出原有的物理卷组
使用 vgextend 把卷加入到卷组中
使用 df -h 查出需要进行扩展的分区名称,使用 lvresize -L 要扩展的容量 分区名 进行 扩容
使用 xfs_growfs 挂载点 让文件系统进行识别
71.Linux如何开机自启
echo '启动命令 ' > /etc/rc.local
chmod +x /etc/rc.local
#服务有自己的启动脚本文件
mv 脚本启动配置文件 /usr/local/bin
mv 脚本启动配置文件 /usr/local/sbin
systemctl enable 服务名称
72.说 一 下文件描述符对系统有什么影响
Linux服务器的内核文件描述符的个数存在限制(对于不同的Linux服务器类型,数值也不 一样),默认限制在1024左右。这个数值对于不太繁忙的文件是足够的,但是对于web服 务器和加压测试的服务器来说,这个数值是不够用的。因为web服务器和加压测试的服务 器会打开大量的文件,导致文件描述符不够用,进而导致无法访问新的文件。
73.Linux怎么挂载新磁盘
使用 mount 命令对磁盘进行挂载
将挂载写入 /etc/fstab 配置文件,执行mount -a实现永久挂载
重启系统
74.找到修改30天以上的文件并删除
find 目录 -ctime +30
#c:表示属性被修改过
#a:表示文件被访问过
#m:表示内容被修改过
#time:按天查找
#min:按分钟查找
75.服务器系统日志放在哪里
/var/log/message :系统启动后的信息和错误日志
/var/log/security :与系统安全相关的日志
/var/log/maillog :与系统邮件相关的日志
/var/log/cron :与定时计划任务相关的日志
/var/log/boot.log & /var/log/dmesg :与系统启动相关的日志
76.如果你的 一块磁盘中 , 只有几个小文件 , 使用df命令查看 , 发现磁盘是满
的 , 什么原因有僵尸进程存在,大文件虽然删除了,但是僵尸进程仍然在调用这个文件,所以会显示磁 盘被占满怎么解决使用 lsof | grep deleted 找到删除的文件对应的进程号,使用 kill -9 关闭进程,重启系统
77.查看操作系统的版本信息
uname -a
cat /proc/cpuinfo cat /proc/version cat /etc/issue
#查看操作系统的版本信息
#查看CPU版本信息
#查看内核版本信息
#查看发行版本信息
78.解释一下什么是HAC的脑裂 , 能说一下解决方案吗
因为主机异常或宕机时,集群内的主机都认为是对方出现异常,而导致的抢占资源现象。
解决方案:
添加冗余的心跳线,比如同时使用串行电缆和以太网电缆
设置参考IP,当出现线路中断的情况时,让2个节点都去ping参考IP,不通就说明是 本节点故障, 放弃抢占,让正常的节点接管服务
出现脑裂现象时,直接强制关闭一个节点,备节点没有收到心跳隐患,就会通过单 独的线路关闭 主节点电源
————————————————
KVM和docker有什么区别
· Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次, Docker对系统资源的利用率很高, 一台主机上可以同时运行数千个 Docker 容器。
· 容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系 统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而
Docker 只需要启动 10 个隔离的应用即可。
· 虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操 作系统的containerization技术,所以docker甚至可以在虚拟机上运行。
· 虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻 量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis 、一个memcached。
· 传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成 本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很 低。
· 传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过
Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这 样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付 十分有利。
· 当然KVM对比于容器也有一个比较大的优势就是可以使用不同的操作系统或内核。所 以,举例说,你可以使用微软Azure,同时运行Windows Server2012的实例和SUSE
Linux企业级服务器的实例。至于Docker,所有容器都必须使用同样的操作系统和内 核。
92.为什么说docker是轻量级
· 不依赖于系统硬件
· 创建和销毁简单
· 扩容和缩容简单
· 秒级启动
· 基于linux内核技术
93.Docker常见的网络模式
brige:docker创建容器时,默认使用此网络模式,会创建一个docker0网桥,和宿主机 进行通信
· none:创建容器时,关闭容器的网络功能
· host:桥接。使用宿主机的IP和端口
94.Docker中Namespaces和Cgroups的隔离类型
· User:用户和用户组
· UTS:主机名和域名
· PID:进程编号
· Mount:挂载(文件系统)
· Network:网络栈,网络设备,端口
IPC:消息队列,共享内存,信号量
95.Docker如何缩容
使用kubernetes中deployment控制器对docker进行缩容
具体的操作方式是修改deployment的yaml文件,改变replication的实例数
96.kubernetes中组件和插件的功
组件
apiserver:本质是一个web服务器,通过resetful接口编写,是整个kubernetes集群 的入口
scheduler:调度器,将pod负载到node节点上
controllermanager:维稳集群状态
kubelet:apiserver和CRI之间的接口
etcd:键值对数据库,存储集群状态信息
kube-proxy:通过ipvs 、iptables实现网络分发、负载均衡
插件
coredns:kubernetes集群内部的DNS解析服务
flannel:基于CNI的扁平化网络
Ingress nginx:提供7层负载
97.介绍 一 下kubernetes集群中的控制器
批处理任务
job
cronjob
守护进程
有状态: statefulset。持久化存储,基于pv 、pvc实现;持久的网络标识,基于无头 服务实现;有序部署回收或启停
无状
RC
RS:集合式的标签选择器
Deployment:官方支持滚动更新和回滚,通过创建RS来引导Pod
DaemonSet:node节点上只能有一个运行结果
98.pod的分类
· 自主式pod
· 控制器管理的pod
pod是kubernetes集群中最小的单位。 kubernetes集群在创建pod时,首先, kubctl会向
kubeapi发送指令, etcd会存储kubeapi调度kubectl的过程,启动一个基础容器pause,如果 这个pod没有运行节点,那么scheduler会将这个pod调度到node节点上
99.python删除文件
· os.remove() 或os.unlink()删除文件
· os.removedirs(path),删除文件夹,但是文件夹必须为空。
100.ansible任务执行模式
· ad-hoc模式(点对点模式)
使用单个模块,支持批量执行单条命令。 ad-hoc 命令是一种可以快速输入的命令,而 且不需要保存起来的命令。 就相当于bash中的一句话shell。
· playbook模式(剧本模式)
是Ansible主要管理方式,也是Ansible功能强大的关键所在。 playbook通过多个task集 合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地 把playbook理解为通过组合多条ad-hoc操作的配置文件。
————————————————
- 点赞
- 收藏
- 关注作者
评论(0)