阶段十二:容器编排技术之K8s的项目实战和项目总结
部署准备工作
环境准备
- 集群准备:确保已搭建好 Kubernetes 集群(可通过 kubeadm、RKE、云厂商托管服务 EKS/ACK/GKE)。
- kubectl 工具:客户端命令行工具安装并配置好 访问集群凭证
~/.kube/config。
- Helm(可选):方便部署中间件(数据库、消息队列、Ingress 等)
项目准备
- 应用代码 → 构建成 Docker 镜像,推送到私有仓库(Harbor/阿里云/华为云/腾讯云 Registry)。
- 配置文件 → 数据库连接、环境变量、日志目录等需要提前规划。
- 持久化存储 → 确定需要 PVC(PersistentVolumeClaim)的部分,如数据库、上传文件目录
购物商城测试环境镜像准备
基础nginx+php镜像定义和构建
把资料里面CRMEB.tar.gz上传到docker服务器/data/crmeb-test目录进行基础环境镜像构建
#创建目录
[root@master01 ~]# mkdir -p /data/crmeb-test
#解压
[root@master01 crmeb-test]# tar -xv -f CRMEB.tar.gz
#代码需要修改的地方已经用红色标注,改成课件一致
[root@master01 config]# vim /data/crmeb/CRMEB/crmeb/config/database.php
return [
// 默认使用的数据库连接配置
'default' => Env::get('database.driver', 'mysql'),
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => Env::get('database.type', 'mysql'),
// 服务器地址
'hostname' => Env::get('database.hostname', 'mysql'),
// 数据库名
'database' => Env::get('database.database', 'crmeb'),
// 用户名
'username' => Env::get('database.username', 'root'),
// 密码
'password' => Env::get('database.password', '123'),
// 端口
'hostport' => Env::get('database.hostport', '3306'),
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => Env::get('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => Env::get('database.prefix', 'eb_'),
// 数据库调试模式
'debug' => Env::get('database.debug', true),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
#登录镜像仓库
[root@docker02 crmeb-test]# docker login harbor.lanqicheng.top -u admin -p123
[root@docker02 crmeb-test]# vim Dockerfile
FROM harbor.lanqicheng.top/crmeb/nginx-php:latest
RUN mkdir -p /data/CRMEB/crmeb
COPY ./CRMEB/crmeb /data/CRMEB/crmeb
RUN chown -R www:www /data/CRMEB/crmeb && chmod 755 -R /data/CRMEB/crmeb
CMD ["./start.sh"]
#构建镜像
[root@docker02 crmeb-test]# docker build -t harbor.lanqicheng.top/crmeb/nginx-php:test .
#推送基础镜像到仓库里面
[root@docker02 crmeb-test]# docker push harbor.lanqicheng.top/crmeb/nginx-php:test命令作用:
- 创建目录
/data/crmeb-test;-p会同时创建缺失的父目录,并且目录已存在时不报错。
- 按选项打包或解包归档文件;
-c表示创建归档,-x表示解包,-f后面指定归档文件名。
- 这条命令用于打开并编辑文件。进入编辑器后需要保存退出,修改才会写回文件。
- 使用
mysql客户端连接数据库并执行 SQL 或客户端命令。
- 登录 Docker 镜像仓库
harbor.lanqicheng.top,认证成功后才能按权限执行 pull 或 push。
- 修改目标文件或目录的权限位;权限写错会导致服务无法读取配置或普通用户获得不该有的访问权。
- 读取 Dockerfile 构建镜像,命令末尾的路径是构建上下文,里面的文件可以被 Dockerfile 使用。
- 把本机的
harbor.lanqicheng.top/crmeb/nginx-php:test镜像上传到镜像仓库,上传后其他主机可以通过docker pull下载它。
执行结果:
- 成功后目标目录会存在;可用
ls -ld 目录名查看目录权限和属主。
- 成功后会生成归档文件或把归档内容解压到目标目录;用
tar -tf 归档文件可查看归档内容。
- 编辑器会打开目标文件;保存并退出后文件内容才会改变。
- 成功后客户端会连接目标服务并执行指定操作;失败时检查地址、端口、用户、密码和数据库名称。
- 成功后应以该命令实际输出、生成的文件或目标服务状态为准;失败时先阅读终端报错,再核对命令参数和运行环境。
- 成功后目标文件的权限位会改变;可用
ls -l验证。
- 成功后会生成带有目标标签的新镜像,可用
docker images查看。
- 成功后镜像会出现在目标仓库,其他机器可以用对应的
docker pull获取。
关键参数:
| 参数 | 说明 | |
|---|---|---|
-p | 核心 | 递归创建目录;父目录不存在时一并创建,目录已经存在也不报错。 |
-f | 必看 | -f 的含义取决于当前命令,常见作用是指定文件或强制执行。 |
harbor.lanqicheng.top | 普通 | 镜像仓库地址 harbor.lanqicheng.top,Docker 将向这个仓库发起认证。 |
-u | 普通 | 指定登录用户名 admin。 |
-t | 普通 | 为构建结果设置镜像名称和标签,值为 harbor.lanqicheng.top/crmeb/nginx-php:test。 |
harbor.lanqicheng.top/crmeb/nginx-php:test | 普通 | harbor.lanqicheng.top/crmeb/nginx-php:test 是 Docker build 的目标或参数;它决定当前动作实际处理的镜像、容器、网络、数据卷或 Compose 服务。 |
. | 普通 | Docker 构建上下文,表示当前目录;Dockerfile 中需要的文件必须位于这个目录及其子目录内。 |
注意事项:
给项目单独划分一个命名空间crmeb-test,避免和其他服务冲突(master01进行操作)
**注意事项:**
#Master节点创建项目目录
#生成harbor登录Secret配置文件
#查看创建结果注意事项:
metadata: data: my.cnf: |- [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 log-error=/usr/local/mysql/data/mysql.err log-bin=/usr/local/mysql/data/binlog server-id=10 character_set_server=utf8mb4 gtid-mode=on log-slave-updates=1 sql_mode=NO_ENGINE_SUBSTITUTION innodb_buffer_pool_size=2G
#创建mysql配置文件configmap
#查看创建结果
**注意事项:**
metadata:
spec:
selector:
matchLabels:
template:
metadata:
labels:
spec:
containers:
ports:
env:
resources:
requests:
limits:
volumeMounts:
startupProbe:
exec:
command:
readinessProbe:
exec:
command:
livenessProbe:
exec:
command:
volumes:
configMap:
volumeClaimTemplates:
spec:
resources:
requests:
metadata:
spec:
selector:
ports:注意事项:
#学习资料上传crmeb.sql并进行数据库导入
#登录数据库
**关键参数:**
| 参数 | 说明 |
|---|---|
| `-n` | 【普通】 | 指定 Kubernetes 命名空间 `crmeb-test`,命令只在该命名空间内查找或修改资源。 |
| `s/www.lanqicheng.top/test.lanqicheng.top/g` | 【普通】 | 替换规则,格式大致是 `s\|旧内容\|新内容\|g`;`g` 表示一行里匹配到的内容都替换。 |
| `-it` | 【普通】 | 同时启用交互输入和伪终端,适合进入 Pod 内的 Shell;退出 Shell 不会删除 Pod。 |
| `--` | 【普通】 | 分隔 kubectl 参数和容器内命令;`--` 后面的 `sh` 或 `bash` 会在 Pod 容器内部执行。 |
| `/bin/bash` | 【普通】 | 容器内命令或参数 `/bin/bash`,它会在目标 Pod 中执行,而不是在宿主机执行。 |
| `-p` | 【核心】 | `-p` 的含义取决于当前命令,不能直接套用 Docker 端口映射解释。 |
**注意事项:**
redis配置文件
metadata:
data:
redis.conf: |注意事项:
metadata: spec: selector: matchLabels: template: metadata: labels: spec: containers: ports: volumeMounts: volumes: configMap: volumeClaimTemplates: spec: resources: requests:
**注意事项:**
metadata:
spec:
ports:
selector:注意事项:
metadata: data: nginx.conf: |- }
} }
} } }
#创建Nginx配置文件
**注意事项:**
metadata:
spec:
selector:
matchLabels:
template:
metadata:
labels:
spec:
imagePullSecrets:
containers:
ports:
resources:
requests:
limits:
volumeMounts:
volumes:
configMap:
metadata:
spec:
selector:
ports:注意事项:
上传证书到项目目录/data/crmeb-test
**注意事项:**
metadata:
annotations:
spec:
tls:
rules:
http:
paths:
backend:
service:
port:
#查看结果注意事项:
**注意事项:**
#替换自己的生产域名注意事项:
**注意事项:**
metadata:
data:
redis.conf: |注意事项:
metadata: spec: selector: matchLabels: template: metadata: labels: spec: containers: ports: volumeMounts: volumes: configMap: volumeClaimTemplates: spec: resources: requests:
**注意事项:**
metadata:
spec:
ports:
selector:注意事项:
**关键参数:**
| 参数 | 说明 |
|---|---|
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `--docker-server=harbor.lanqicheng.top` | 【普通】 | 长参数 `--docker-server` 的值是 `harbor.lanqicheng.top`,用于精确控制命令行为。 |
| `--docker-username=guest` | 【普通】 | 长参数 `--docker-username` 的值是 `guest`,用于精确控制命令行为。 |
| `--docker-password=Gz12345678` | 【普通】 | 长参数 `--docker-password` 的值是 `Gz12345678`,用于精确控制命令行为。 |
| `-n` | 【普通】 | 指定 Kubernetes 命名空间 `crmeb-pro`,命令只在该命名空间内查找或修改资源。 |
**注意事项:**
metadata:
data:
nginx.conf: |-
}
}
}
}
}
}
#创建Nginx配置文件注意事项:
metadata: spec: selector: matchLabels: template: metadata: labels: spec: imagePullSecrets: containers:
ports: resources: requests: limits: volumeMounts: volumes: configMap:
metadata: spec: selector: ports:
**注意事项:**metadata: annotations: spec: tls: rules: http: paths: backend: service: port:
**注意事项:**
注意事项:
#登录仓库harbor-secret.yaml
**注意事项:**
注意事项:
**注意事项:**
metadata:
data:
redis.conf: |-注意事项:
#导入基础镜像
**注意事项:**
注意事项:
**注意事项:**
#后端服务部署
#前端部署注意事项:
**注意事项:**

项目部署的第一步不是搭环境,而是对项目进行全面技术与业务理解。运维工程师需要与产品、开发团队确认以下关键信息:
通过这些信息,明确项目的**业务重要级别、性能需求和稳定性目标**,为后续容量规划提供依据。
对每一层进行资源规划:
自动化自愈
服务分散部署和高可用
数据一致性
数据备份
异地灾备
恢复演练
根据架构设计结果搭建生产级运行环境
**主要工作包括:**
该阶段交付的不是服务器,而是一个**可以稳定运行业务的云原生平台**
在平台就绪后,将业务系统按照架构设计部署到集群中。
**核心原则**
**关键工作**
目标是让系统具备:
**可扩容、可恢复、可发布、可回滚能力。**
功能联调
故障演练
验证系统是否可以自动恢复,数据是否安全。
扩容与发布验证
性能与稳定性验证
只有通过这些验证,系统才具备生产上线条件。