# GeekTime **Repository Path**: yvanlong/geek-time ## Basic Information - **Project Name**: GeekTime - **Description**: 极客时间运维进阶训练营作业 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-10-18 - **Last Updated**: 2024-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 容器和单机容器编排入门与实战 第一周作业:/week-01/* - 梳理各 Namespace 的作用: 01-namespace.md - 使用 apt/yum/ 二进制安装指定版本的 Docker: 02-install_docker.md - 熟练使用 Docker 数据卷: 03-docker_volume.md - 熟练使用 Docker 的 bridge 和 container 模式网络: 04-docker_net.md ## 容器和单机容器编排入门与实战-docker网络、镜像编写、容器资源限制、部署harbor仓库 第二周作业:/week-02/* - 基于dockerfile,实现分层构建的nginx业务镜像: 01-nginx-image - 基于docker实现对容器的CPU和内存的资源限制: 02-limit.md - 部署http协议的harbor镜像仓库: 03-harbor.md - 扩展作业: - 掌握containerd的安装 - 基于nerdctl拉取镜像和创建容器 ## GitLab和Jenkins 第三周作业:/weeK-03/* - 基于docker-compose实现对nginx+tomcat web服务的单机编排: 01-docker-compose.md - 安装gitlab,创建group、user和project并授权: 02/03/04-gitlab.md - 熟练git命令的基本使用,通过git命令实现源代码的clone、push等基本操作: 02/03/04-gitlab.md - 熟练掌握对gitlab服务的数据备份与恢复: 02/03/04-gitlab.md - 部署jenkins服务器并安装gitlab插件、实现代码免秘钥clone: 05/06-jenkins.md - 编写脚本,实现代码clone、代码打包、镜像构建及镜像更新的完整流水线功能: 05/06-jenkins.md ## 分布书Jenkins及pipline、Sonar介绍 第四周作业:/weeK-04/* - 部署jenkins master及多slave环境 - 基于jenkins视图对jenkins job进行分类 - 总结jenkins pipline基本语法 - 部署代码质量检测服务sonarqube并结合jenkins实现代码指令检测 - 基于命令、shell 脚本和 pipline 实现代码质量检测 ## pipline部署流水线、分布式搜索服务与日志中心 第五周作业:/week-05/* - 完全基于pipline实现完整的代码部署流水线 - 熟悉ELK各组件的功能、elasticsearch的节点角色类型 - 熟悉索引、doc、分片与副本的概念 - 掌握不同环境的ELK部署规划,基于deb或二进制部署elasticsearch集群 - 了解elasticsearch API的简单使用,安装head插件管理ES的数据 - 安装logstash收集不同类型的系统日志并写入到ES 的不同index - 安装kibana、查看ES集群的数据 - 扩展: - 了解heartbeat和metricbeat的使用 ## ELK /week-06/* - 基于 logstash filter 功能将 nginx 默认的访问日志及 error log 转换为 json 格式并写入 elasticsearch - 基于 logstash 收集 json 格式的 nginx 访问日志 - 基于 logstash 收集 java 日志并实现多行合并 - 基于 logstash 收集 syslog 类型日志 (以 haproxy 替代网络设备) - logstash 收集日志并写入 Redis、再通过其它 logstash 消费至 elasticsearch 并保持 json 格式日志的解析 - 基于 docker-compose 部署单机版本 ELK - 扩展 - 大型的日志收集案例: filebeat–>logstash–>Redis<–logstash–>elasticsearch - 日志写入数据库 - 地图显示客户端 IP 城市 - logstash 收集 TCP 日志 ## Prometheus 上 /week-07/* - 了解prometheus各组件的功能,熟悉prometheus的数据采集流程 - 基于docker或二进制部署prometheus server - 基于docker或二进制部署node-exporter,并通过prometheus收集node-exporter指标数据 - 安装grafana并添加prometheus数据源,导入模板可以图形显示指标数据 - 掌握prometheus的promQL语句的简单使用 - 部署prometheus联邦集群并实现指标数据收集 - 扩展 - 基于pushgateway实现指标数据收集 ## Skywalking /week-08/* - 基于 docker-compose 或二进制部署 SkyWalking - 实现单体服务 Halo 博客和 Jenkins 的请求链路跟踪 - 实现 Dubbo 微服务实现链路跟踪案例 - 实现 skywalking 的钉钉告警 - 扩展 - 实现 Python Django 项目的请求链路跟踪 - 实现 OpenResty 及后端 Java 服务的全链路请求链路跟踪 ## Ceph /week-09/* - 梳理 ceph 的各组件及功能 - 基于 ceph-deploy 部署 ceph 集群 - 梳理块存储、文件存储及对象存储的使用场景 - 基于 ceph 块存储实现块设备挂载及使用 - 基于 cephFS 实现多主机数据共享 ## Ceph /week-10/* - 熟练管理存储池(创建存储池、删除存储池)、掌握 pg 与 pgp 的基本分配方法 - 熟练 ceph 的用户管理及授权 - 使用普通客户挂载块存储 - 使用普通用户挂载 cephfs(可以通过 secret 或者 secretfile 的形式多主机同时挂载) - 实现 MDS 服务的多主一备高可用架构 ## Ceph /week-11/* - 掌握对象存储的特点及使用场景 - 在两台主机部署 radowsgw 存储网关以实现高可用环境 - 基于 s3cmd 实现 bucket 的管理及数据的上传和下载 - 基于 Nginx+RGW 的动静分离及短视频案例 - 启用 ceph dashboard 并基于 prometheus 监控 ceph 集群运行状态 - 扩展 - 自定义 ceph crush 运行图实现基于 HDD 和 SSD 磁盘实现数据冷热数据分类存储 ## Kubernetes /week-12/* - 使用 kubeadm 部署一个分布式的 Kubernetes 集群。 - 在集群上编排运行 demoapp,并使用 Service 完成 Pod 发现和服务发布。 - 要求以配置文件的方式,在集群上编排运行 nginx,并使用 Service 完成 Pod 发现和服务发布。 - 扩展 - 使用 kubeasz 部署一个分布式的 Kubernetes 集群 - 要求以配置文件的方式,在集群上编排运行 wordpress 和 mysql,并使用 Service 完成 Pod 发现和服务发布。 ## Kubernetes-02 /week-13/* - 在集群上使用资源配置文件编排运行demoapp,并使用Service完成Pod发现和服务发布 - 要求以配置文件的方式,在集群上编排运行nginx、wordpress和mysql,并使用Service完成Pod发现和服务发布 > 提示:使用Secret的方式的为wordpress指定要使用mysql服务器地址、数据库名称、用户名称和用户密码; > nginx Service:定义为NodePort类型 > nginx的配置文件:要通过ConfigMap提供 > wordpress和mysql的数据要保存于PVC上 - 扩展 - pvc依赖的pv要动态置备 - 定义一个NodePort类型的Service - 在集群外部手动配置一个LoadBalancer,为该Service接入外部客户端访问该Service流量,并转发给各各节点上的该Service注册使用的 ## Kubernetes-03 /week-14/* - wordpress 示例中: - 使用 statefulset 编排运行 mysql,实例数为 1; - 换成使用 Operator 编排运行 mysql,实例数为 1+; - 将 mysql 以传统模型的主从复制的形式运行于 Kubernetes 外部,让运行在 Kubernetes 集群上的 wordpress 去访问外部的 MySQL 服务。 - wordpress 实例扩展至多个,测试应用是否工作正常; - Nginx 实例扩展至多个,测试应用是否工作正常;额外为 nginx 添加 https 虚拟主机。 ## Kubernetes-04 /week-15/* - 添加两个以上静态令牌认证的用户,例如tom和jerry,并认证到Kubernetes上;添加两个以上的X509证书认证到Kubernetes的用户,比如mason和magedu; 把认证凭据添加到kubeconfig配置文件进行加载; - 使用资源配置文件创建ServiceAccount,并附加一个imagePullSecrets; - 为tom用户授予管理blog名称空间的权限;为jerry授予管理整个集群的权限;为mason用户授予读取集群资源的权限; - 部署Jenkins、Prometheus-Server、Node-Exporter至Kubernetes集群;而后使用Ingress开放至集群外部,Jenkins要使用https协议开放; - 使用helm部署主从复制的MySQL集群,部署wordpress,并使用ingress暴露到集群外部; - 使用helm部署harbor,成功验证推送Image至Harbor上; - 使用helm部署一个redis cluster至Kubernetes上; ## 构建企业级生产可用的Kubernetes集群 /week-16/* - 总结 Underlay 和 Overlay 网络的的区别及优缺点 - 在 kubernetes 集群实现 underlay 网络 - 总结网络组件 flannel vxlan 模式的网络通信流程 - 总结网络组件 calico IPIP 模式的网络通信流程 - 扩展: - -基于二进制实现高可用的 K8S 集群环境 ## 构建企业级生产可用的Kubernetes集群 /week-17/* - 基于 NetworkPolicy 限制 magedu namespace 中的所有 pod 不能跨 namespace 访问 (只能访问当前 namespace 中的所有 pod)。 - 在 kubernetes 环境部署 zookeeper 集群并基于 NFS 或 StorageClass 等方式实现创建持久化。 - 在 Kubernetes 环境部署基于 StatefulSet 运行 MySQL 一主多从并基于 NFS 或 StorageClass 等方式实现数据持久化。 - 在 Kubernetes 环境运行 java 单体服务 Jenkins(自己构建镜像或使用官方镜像)、以及实现单 Pod 中以多容器模式运行基于 LNMP 的 WordPress(自己构建镜像或使用官方镜像),数据库使用上一步骤运行在 K8S 中的 MySQL。 - 基于 LimitRange 限制 magedu namespace 中单个 container 最大 1C1G,单个 pod 最大 2C2G,并默认为 CPU limit 为 0.5 核、默认内存 limit 为 512M。 - 基于 ResourceQuota 限制 magedu namespace 中最多可分配 CPU 192C,内存 512G。 - 基于 Operator 在 Kubernetes 环境部署 prometheus 监控环境 (prometheus-server、cAdvisor、grafana、node-exporter 等) - 扩展: - 手动在 kubernetes 中部署 prometheus 监控环境 (prometheus-server、cAdvisor、grafana、node-exporter 等)