运维--Linux 系统管理-CSDN博客如果说之前的 Linux 基础操作是“手动挡”那自动化与容器技术就是“自动挡”甚至“自动驾驶”。介绍当服务器只有三五台时手动敲命令还能应付但当规模达到成百上千台或者应用需要频繁更新、动态扩容时手动操作不仅效率极低还极易出错。为了解决这些问题现代运维演化出了两大核心支柱容器技术Docker K8s和自动化配置工具Ansible。 1. Docker解决“在我电脑上明明能跑”的问题在没有 Docker 之前开发人员在本地写好代码测试没问题一交给运维上线往往因为操作系统版本、依赖库不同等各种环境问题报错。Docker 的出现彻底解决了这个痛点。它是一个开源的应用容器引擎核心思想是打包和隔离。镜像 (Image)你可以把它理解为一个“只读的安装包”或者“快照”。它把应用程序的代码、运行环境、依赖库、配置文件等所有东西全部打包在一起。容器 (Container)镜像运行起来后的实例就是容器。它就像一个轻量级的“沙箱”每个容器之间互相隔离互不影响。它和传统虚拟机的区别在哪传统的虚拟机比如 VMware是“虚拟化硬件”每个虚拟机里都要装一个完整的操作系统非常笨重启动慢几分钟占用资源大几个GB。而 Docker 是“操作系统层虚拟化”它直接共享宿主机的操作系统内核。所以 Docker 容器非常轻量启动只需几秒钟占用内存可能只有几十兆。一句话总结Docker 实现了“一次构建处处运行”。开发把代码打包成 Docker 镜像运维拿到这个镜像在任何机器上都能跑出完全一样的效果。☸️ 2. Kubernetes (K8s)容器舰队的“总舵手”当你只有几个 Docker 容器时手动管理没问题。但如果是微服务架构一个应用有几百上千个容器分布在几十台服务器上怎么保证它们不崩溃怎么在流量高峰期自动增加容器数量这时候就需要Kubernetes (简称 K8s)出场了。它是一个开源的容器编排平台专门用来自动化管理大规模的容器集群。K8s 的核心能力包括自动调度与部署你只需要告诉 K8s “我需要运行 5 个 Nginx 容器”它会自动帮你找到合适的服务器把它们跑起来。弹性伸缩当双十一流量暴增时K8s 可以根据 CPU 或内存的使用率自动把容器数量从 5 个扩展到 50 个流量过去后再自动缩回来。自我修复如果某个容器突然崩溃了K8s 会立刻发现并自动在健康的服务器上重新启动一个新的容器保证服务不中断。滚动更新与回滚发布新版本时K8s 可以一个接一个地替换旧容器实现零停机更新。如果新版本有 Bug还能一键回滚到上一个稳定版本。一句话总结如果说 Docker 是集装箱那么 K8s 就是管理整个集装箱货轮的“智能调度系统”它让大规模容器化应用的管理变得简单高效。 3. Ansible批量管理服务器的“瑞士军刀”有了 Docker 和 K8s应用层面的问题解决了但底层那成百上千台物理机或虚拟机也就是 K8s 的节点本身也需要安装系统、配置网络、更新安全补丁。这时候就该Ansible登场了。Ansible 是一款极其流行的自动化配置管理工具它的特点是无代理架构 (Agentless)这是它最大的优势。你不需要在被管理的服务器上安装任何客户端软件只要目标机器能通 SSHAnsible 就能管理它。语法简单它使用人类可读的 YAML 格式来编写任务剧本Playbook。哪怕你不是专业的程序员也能看懂并写出自动化脚本。幂等性这是一个非常关键的特性。意思是同一个任务你执行一遍和执行一百遍产生的结果是一样的。比如你的剧本是“确保 Nginx 已安装”Ansible 会先检查如果已经装了就不做任何事没装才会去安装避免了重复操作带来的副作用。Ansible 能干什么基础设施初始化新买来 100 台服务器用 Ansible 一键完成系统优化、创建用户、配置防火墙等基础工作。软件批量部署一键在所有服务器上安装或更新特定版本的软件。配置管理确保所有服务器的配置文件如 Nginx 配置保持一致修改一处全网生效。一句话总结Ansible 让你告别重复的体力劳动通过写代码Playbook的方式来管理基础设施实现“基础设施即代码 (IaC)”。 它们是如何协同工作的在现代企业的实际生产环境中这三者通常是完美结合的开发阶段开发人员使用Docker将 Python/Java 等应用打包成标准的镜像。准备阶段运维人员使用Ansible自动化地准备底层服务器环境安装 Docker 引擎甚至搭建好 K8s 集群。部署阶段通过 CI/CD 流水线Ansible 可以调用 K8s 的接口将 Docker 镜像自动部署到 K8s 集群中。运行阶段K8s接管应用负责日常的负载均衡、故障自愈和弹性扩缩容。实战咱们直接上代码用两个最简单的实战例子让你直观感受一下 Docker 和 Ansible 到底是怎么工作的。 场景一用 Docker 打包一个网页告别“在我电脑上明明能跑”假设你写了一个非常简单的网页index.html你想把它打包成一个 Docker 镜像这样不管在哪台机器上只要运行这个镜像网页就能完美展示。1. 准备工作先新建一个文件夹在里面创建一个简单的网页文件mkdir my-website cd my-website echo h1Hello! 这是我用 Docker 跑起来的第一个网页/h1 index.html2. 编写 Dockerfile这是打包的“说明书”在这个目录下新建一个名为Dockerfile的文件注意没有后缀名nano Dockerfile把下面这几行代码复制进去# 1. 告诉 Docker我们要基于一个已经装好 Nginx 的官方基础镜像来干活 FROM nginx:latest # 2. 把当前目录下的 index.html 文件复制到镜像里 Nginx 默认的网页目录下 COPY index.html /usr/share/nginx/html/index.html # 3. 告诉外界这个容器运行时会使用 80 端口 EXPOSE 80(解释就这么简单的 3 行代码就把你的网页和 Nginx 运行环境死死地绑定在了一起。)3. 构建并运行# 把当前目录打包成一个名叫 my-web 的镜像 docker build -t my-web . # 在后台运行这个镜像并把容器的 80 端口映射到你本机的 8080 端口 docker run -d -p 8080:80 my-web现在打开浏览器访问http://localhost:8080你就能看到那句欢迎语了哪怕你把这台机器上的 Nginx 卸载了这个网页依然能正常运行因为环境全在镜像里。 场景二用 Ansible 批量安装 Nginx告别“一台一台敲命令”刚才我们用 Docker 跑了一个网页但前提是服务器上得有 Docker。现在假设你有 3 台全新的 Linux 服务器你想一键给它们全部装上 Nginx并启动服务。1. 准备“目标清单”Inventory新建一个文件叫hosts把你那几台服务器的 IP 写进去nano hosts内容如下假设你的服务器 IP 是 192.168.1.10 和 192.168.1.11[webservers] 192.168.1.10 192.168.1.112. 编写 Playbook这是自动化任务的“剧本”新建一个文件叫install_nginx.ymlnano install_nginx.yml把下面这段 YAML 语法写进去--- - name: 批量安装并启动 Nginx hosts: webservers # 指定要对上面 hosts 文件里的 webservers 组执行 become: yes # 相当于自动加 sudo获取最高权限 tasks: - name: 确保 Nginx 是最新版本 apt: # 如果是 CentOS 系统这里换成 yum name: nginx state: latest - name: 确保 Nginx 服务正在运行且开机自启 service: name: nginx state: started enabled: yes(解释你看这个剧本就像大白话一样。第一步装软件第二步开服务逻辑极其清晰。)3. 执行剧本ansible-playbook -i hosts install_nginx.yml --ask-pass执行后Ansible 会自动连接到这两台服务器检查它们有没有装 Nginx。没装就自动装没启动就自动启动。哪怕你把这个命令执行 100 遍结果也是一样的这就是前面提到的幂等性。 总结一下这两个工具的“手感”Docker给你一种“打包带走”的安全感应用和它依赖的环境变成了一个整体走到哪跑到哪。Ansible给你一种“运筹帷幄”的掌控感你坐在电脑前敲一行命令成百上千台服务器就能整齐划一地执行任务。这两个工具是现代运维的基石理解它们的核心思想再去深入学习具体的参数就会轻松很多。