阶段十二:容器编排技术之K8s的项目实战和项目总结

部署准备工作

环境准备

项目准备

购物商城测试环境镜像准备

基础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

命令作用:

执行结果:

关键参数:

参数说明
-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: |-

注意事项:

#导入基础镜像


**注意事项:**




注意事项:


**注意事项:**



#后端服务部署

#前端部署

注意事项:


**注意事项:**



![](/assets/feishu-images/9d603493a8ac74b2101e103e.png)



项目部署的第一步不是搭环境,而是对项目进行全面技术与业务理解。运维工程师需要与产品、开发团队确认以下关键信息:


通过这些信息,明确项目的**业务重要级别、性能需求和稳定性目标**,为后续容量规划提供依据。



对每一层进行资源规划:








自动化自愈


服务分散部署和高可用


数据一致性



数据备份


异地灾备


恢复演练





根据架构设计结果搭建生产级运行环境

**主要工作包括:**


该阶段交付的不是服务器,而是一个**可以稳定运行业务的云原生平台**


在平台就绪后,将业务系统按照架构设计部署到集群中。

**核心原则**


**关键工作**


目标是让系统具备:  
**可扩容、可恢复、可发布、可回滚能力。**


功能联调


故障演练


验证系统是否可以自动恢复,数据是否安全。

扩容与发布验证


性能与稳定性验证


只有通过这些验证,系统才具备生产上线条件。