为了账号安全,请及时绑定邮箱和手机立即绑定

项目13:在Kubernetes集群上部署带有Slack集成的YouTube克隆网站

更口语化的表达可以是:
在Kubernetes集群上搭建带Slack通知的YouTube克隆站——项目实战

上述动画图是由Cloudairy Cloudchart设计的,这是一款强大的架构设计工具

它为你提供了创新功能来提升你的设计流程,比如:

  1. ✅生成式AI魔力引擎:借助我们的AI驱动的流程图生成器,将您的想法变为现实。
  2. ✅打造您的世界:从丰富的BPMN、数据流、企业、流程图和几何形状库中进行选择。
  3. ✅3D可视化:将您的云架构以3D形式展现出来,支持AWS、Azure、GCP和Kubernetes。
  4. ✅丰富您的设计:一键搜索并导入图片、图标和GIF动图到您的设计中。
  5. ✅超过200个模板:使用200多个内置的云架构模板加速您的设计。

Cloudairy Cloudchart链接 → https://cloudairy.com

今天我们将推出一个YouTube的克隆版本。这个项目还会集成Jenkins的Slack通知。这是一个对于简历非常有帮助的项目,每一步都详细说明了。大家跟着项目一起做吧。

完成步骤如下 →

第一步:在 AWS 上启动一个基本 EC2 实例

步骤 2:为 EC2 创建 IAM 角色

步骤三:配置 EC2(亚马逊弹性计算云)

第四步:配置 Jenkins 管道流程

步骤五:使用 CI/CD 管道构建并推送至 Docker Hub

步骤六:为流水线集成 Slack 消息提醒

第 7 步:用 terraform 创建 Kubernetes 集群

步骤 8:创建 EKS 集群部署

步骤九:把所有基础设施都毁掉

第一步 # 在 AWS 上设置基础 EC2

去 AWS 控制台创建实例

2. 在列表中选择Ubuntu并创建一个新的密钥对,并将其命名为 my key,同时开放 HTTP 和 HTTPS 端口

接着点击启动实例运行

步骤 2:为 EC2 创建 IAM 角色

为什么我们需要为EC2实例设置IAM角色→ 这个IAM角色让EC2实例能够创建EKS集群并管理S3桶,赋予它在AWS账户中进行相应修改的权限。

1. 创建IAM角色(或简称IAM)

在搜索框里输入“IAM”,然后回车。

2. 点击:左侧的“角色”选项

3. 点击“创建角色”按钮,在下拉菜单中选择EC2

4。点击下一步按钮

5. 在权限部分选择管理员权限

6. 点击下一步按钮,给角色起个名字

  1. 点击 创建角色,IAM 角色就会被创建了
2. 将 IAM 角色附加到您的 EC2
  1. 进入EC2部分的设置
  2. 点击操作 → 安全 → 修改IAM角色

3. 选一个角色从下拉菜单里,然后点击更新IAM角色设置

为什么我们需要 IAM 角色呢?

比如说,你有一个机器人(也就是EC2实例)在一家大厂房里为你执行任务。现在,这个机器人需要访问如S3、DynamoDB等AWS服务来完成任务。

这里就是IAM(身份和访问管理)的用武之地:

  1. 机器人需要钥匙才能进房间: IAM 角色就像是给你的机器人一把特殊的钥匙。这把钥匙让机器人能够进入特定的房间(访问某些 AWS 服务)。没有这把钥匙,机器人就进不去。
  2. 不同机器人有不同的钥匙: 每个机器人(EC2 实例)可以有自己的钥匙(IAM 角色),并具有特定的权限。所以,一个机器人可能有进入存储室(访问 S3)的钥匙,而另一个机器人则有进入数据库室(访问 DynamoDB)的钥匙。
  3. 无需把密码写死在机器人里面: 使用 IAM 角色意味着你无需将密码(访问凭证)硬编码到机器人中。这就像是不要把密码写在机器人自身一样。机器人只需要用到钥匙的时候用它。
  4. 可以轻松调整权限: 如果你想更改机器人可以执行的操作,只需更改其钥匙上的权限(IAM 角色)。不需要重新编程机器人或给它重设密码;只需更新其钥匙上的权限即可。
  5. 安全且受控的访问: IAM 角色有助于保持安全。你可以精确控制每个机器人被允许做的事情。这样,如果某台机器人出现问题或需要调整权限,你只需调整它的权限,不影响其他机器人。

现在回到你的EC2控制台,然后连接到你的EC2实例上。

第 3 步:设置 EC2

你必须安装 git、Docker、kubectl 等工具,例如 Jenkins,以便部署 Docker 容器和 Kubernetes 集群。

请运行下面的命令

    # 更新软件包列表
    apt update   
    # 使用vim编辑run.sh文件
    vim run.sh

2. 在你的.sh文件中输入以下命令。

    #!/bin/bash  
    sudo apt update -y  
    wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/apt/keyrings/adoptium.asc  
    echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list  
    sudo apt update -y  
    sudo apt install temurin-17-jdk -y  
    /usr/bin/java --version  # 查看Java版本

    # 安装 Jenkins  
    curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null  
    echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null  
    sudo apt update -y  
    sudo apt install jenkins -y  
    sudo systemctl start jenkins  
    sudo systemctl status jenkins  

    # 安装 Docker  
    sudo apt update  
    sudo apt install docker.io -y  
    sudo usermod -aG docker ubuntu  
    sudo usermod -aG docker jenkins  
    newgrp docker  # 切换到docker组  
    sudo chmod 777 /var/run/docker.sock  
    sudo systemctl restart jenkins  

    # 安装 Trivy  
    sudo apt install wget apt-transport-https gnupg lsb-release -y  
    wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null  
    echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list  
    sudo apt update  
    sudo apt install trivy -y  

    # 安装 Terraform  
    sudo apt install wget -y  
    wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg  
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list  
    sudo apt update && sudo apt install terraform  

    # 安装 kubectl  
    sudo apt update  
    sudo apt install curl -y  
    curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl  
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl  
    kubectl version --client  # 查看kubectl客户端版本

3. 运行 .sh 文件,可以使用命令 bash run.sh

步骤 4:设置 Jenkins pipeline

从上面的步骤可以看出,所有东西都已安装好,我们现在需要配置 Jenkins 的 CI/CD 流水线。

  1. 复制你的 EC2 实例的公共 IP 地址,然后将其粘贴到浏览器的地址栏中,输入→<public_ip>:8080

2. 前往你的 EC2 实例然后连接它一下

3. 下面的命令:

运行下面的命令:

    sudo su  
    cat /var/lib/jenkins/secrets/initialAdminPassword

复制你的密码然后将其粘贴到你的Jenkins

4. 安装推荐插件。

5. 配置你的 Jenkins 用户账户

欢迎来到Jenkins主界面

步骤 5:CI/CD 流水线用于构建并推送镜像到 Docker 镜像仓库
1. 安装以下列出的插件
  1. Terrform
  2. Slack 通知
  3. 全局 Slack 通知器
  4. Eclipse Temurin 安装器(无需重启)
  5. Node.js 插件(无需重启)
  6. 参数化触发器(在一条流水线完成后触发另一条流水线)
  7. 下载所有与 Docker 相关的插件

注意: 如果Jenkins没有在指定网站上运行,请进入您的EC2安全组,并确保8080端口已开启。

同时开放3000端口给Docker容器

配置 Docker 凭据
  1. 在您的Jenkins中选择“管理Jenkins”→“凭据”→“全局范围”→点击“添加凭据”
  2. 输入您的Docker Hub用户名和密码
  3. ID==docker

B. 为 Jenkins 配置工具

进入Jenkins管理→工具插件

步骤:添加 JDK
  1. 点击添加JDK并选择adoptium.net的安装程序
  2. 选择版本JDK 17.0.8.1+1,在名称栏输入jdk 17

添加 Node.js

步骤1:点击添加 Node.js 按钮
步骤2:在名称框中输入 node16
步骤3:选择版本 16.2.0

添加Docker:→
  1. 点击添加Docker(容器引擎)
  2. 名称为Docker
  3. 下载安装程序从docker.com

d. terraform
  1. 进入管理Jenkins → 工具 → 查找Terraform
  2. 添加Terraform
  3. 在名称字段中输入名称,取消自动安装选项,并设置路径为 /usr/bin/
  4. 由于Terraform已在此部分安装,它会从那里读取

5. 点击应用,然后保存

C: 管道 脚本
  1. 新建项 → 选择管道选项 → 在名称栏输入 'Youtube Pipeline 1'

  1. 向下滚动到页面底部,找到脚本部分,复制并粘贴以下代码
pipeline {
    agent any
    tools {
        jdk 'jdk17'
        nodejs 'node16'
    }
    stages {
        stage('清理工作区') {
            steps {
                cleanWs()
            }
        }
        stage('从Git拉取代码') {
            steps {
                git branch: 'main', url: 'https://github.com/Aakibgithuber/deployment-of-youtube.git'
            }
        }
        stage('安装软件包依赖') {
            steps {
                sh "npm install"
            }
        }
        stage('Docker构建并推送') {
            steps {
                script {
                    withDockerRegistry(credentialsId: 'docker', toolName: 'docker') {
                        sh "docker build -t youtube-clone ."
                        sh "docker tag youtube-clone aakibkhan1212/youtube-clone:latest"
                        sh "docker push aakibkhan1212/youtube-clone:latest"
                        sh "docker"
                    }
                }
            }
        }
        stage('部署到容器实例') {
            steps {
                sh 'docker run -d --name youtube-clone -p 3000:3000 aakibkhan1212/youtube-clone:latest'
            }
        }
    }
}

如果你想添加owasp和sonarqube,你可以参考之前项目的博客进行相应的修改

点击建造按钮

你的应用已成功部署,请查看Docker Hub上的页面,然后在浏览器中输入网址访问你的应用。

http://您的公共IP地址:3000

这是你的申请,

图片:Jenkins管道推送至dockerhub的镜像

步骤 6:为管道集成 Slack 通知

  1. 访问 slack.com 并注册账号

2.选择任意选项都可以

3. 创建一个工作空间

4. 点击“下一步”

Slack 的欢迎窗口

5. 新建一个频道

6. 现在你得查找Slack的应用商店,找找jenkins

7. 点击“添加到 Slack”,然后选择一个频道(如 #general)

点击添加Jenkins持续集成

它会为Jenkins生成一个token.

9. 现在你需要去Jenkins → 管理Jenkins → 全局,然后找到Slack通知部分

  1. 在密文下拉菜单中添加令牌。

  1. 点击测试连接,你会看到“成功”一闪而过。

12. 现在再次打开你的 YouTube 项目管线,点击“配置”,然后在脚本中添加以下代码

pipeline {  
    agent any  
    tools {  
        jdk 'jdk17'  
        nodejs 'node16'  
    }  
    stages {  
        stage('清理工作目录') {  
            steps {  
                cleanWs()  
            }  
        }  
        stage('从Git仓库检出代码') {  
            steps {  
                git branch: 'main', url: 'https://github.com/Aakibgithuber/deployment-of-youtube.git'  
            }  
        }  
        stage('安装依赖') {  
            steps {  
                sh "npm install"  
            }  
        }  
        stage('构建并推送Docker镜像') {  
            steps {  
                script {  
                    withDockerRegistry(credentialsId: 'docker', toolName: 'docker') {  
                        sh "docker build -t youtube-clone ."  
                        sh "docker tag youtube-clone aakibkhan1212/youtube-clone:latest"  
                        sh "docker push aakibkhan1212/youtube-clone:latest"  
                    }  
                }  
            }  
        }  
        stage('将应用部署到容器') {  
            steps {  
                sh 'docker run -d --name youtube-clone -p 3000:3000 aakibkhan1212/youtube-clone:latest'  
            }  
        }  
    }  
    post {  
        success {  
            slackSend(channel: '#all-the-cloud-hub', color: 'good', message: "任务 '${env.JOB_NAME} [构建编号:${env.BUILD_NUMBER}]' (${env.BUILD_URL}) 已成功完成.")  
        }  
        failure {  
            slackSend(channel: '#all-the-cloud-hub', color: 'danger', message: "任务 '${env.JOB_NAME} [构建编号:${env.BUILD_NUMBER}]' (${env.BUILD_URL}) 已失败.")  
        }  
        always {  
            echo '构建已完成,请查看Slack的通知.'  
        }  
    }  
}

13. 再次构建管道,并检查 Slack 的通知,现在。

14. 它在 Slack 上显示了我们在 Jenkins 上创建的管道成功了

第 7 步:使用 Terraform 搭建 Kubernetes 集群
  1. 克隆 GitHub 仓库的方法是

a. mkdir 超级马里奥

b. cd 超级马里奥

c.: git clone https://github.com/Aakibgithuber/deployment-of-youtube.git //克隆GitHub上的youtube部署项目

d. cd youtube-deploy/

e. cd EKS-TF

f. 用 vim backend.tf 编辑 backend.tf 文件

注意→请确保在此文件中提供您的桶名(Bucket 名)和区域名(Region 名),否则,无法使用。此外,您的EC2实例也与IAM角色相关联,这有助于EC2实例使用其他服务,例如S3桶。

现在就开始→

  1. 初始化 terraform 命令.

当你运行 terraform init 命令时,它会初始化你的工作区,自动下载所需插件,并确保一切就绪,这样你就可以开始用 Terraform 创建、更新或管理你的基础架构。这就像在动手之前准备好所有工具和材料,以便用你的电脑创造一些了不起的东西一样。

2. terraform 检查.

Terraform 验证检查我们的代码以捕获任何语法错误或其他错误,并在文件中没有任何错误时输出 成功 状态

3. terraform 规划

Terraform规划用于查看将对您的基础设施做出哪些变更。通过使用此命令,我们可以审查并确认一切良好,再最终批准构建或修改我们的应用基础设施。这就像建筑工程项目的蓝图一样,在使用Terraform进行任何创建或修改之前先进行查看。

4. terraform 应用命令:

运行以下命令以自动应用 Terraform 配置而不进行手动确认: terraform apply --auto-approve

运行 terraform apply --auto-approve 就像是对电脑说,“按照计划直接构建所有东西,不需要每次确认。”这样做可以自动部署基础设施,无需每次确认。简单来说,当我们执行这个命令时,Terraform 会读取我们的代码,判断需要创建或更改的内容,然后直接开始构建,跳过了通常需要确认的步骤。

你只需花5到10分钟搞定

5. 下面的命令用于更新 EKS 配置

    aws eks update-kubeconfig --name EKS_CLOUD --region us-east-1

使用aws eks update-kubeconfig命令更新kubeconfig文件,指定集群名为EKS_CLOUD,区域为us-east-1。

运行这个命令 aws eks update-kubeconfig --name EKS_CLOUD --region us-east-1 就像是告诉电脑,我打算使用位于 us-east-1 区域的 Amazon EKS(即 EKS_CLOUD,弹性 Kubernetes 服务)并与之连接。

步骤 8: 创建 EKS 集群的部署
  1. 更改存放部署和服务文件的目录,使用命令 → cd ..
  2. 创建部署文件
kubectl apply -f deployment.yaml # 应用部署文件

deployment.yaml 文件就像是给计算机系统的一套指令,告诉它如何运行和管理这个特定的应用程序。它提供了部署和管理特定软件应用所需的信息,包括应用程序的定义、需要运行的副本数量,以及其他让应用程序稳定运行的设置。

3. 服务文件已包含在打包文件里

服务.yaml 文件就像是帮助计算机在软件应用中找到彼此并进行交流的一套规则。它就像是一个目录,告诉你如何连接应用的不同部分。它指出了应用中不同部分如何通信,以及如何让其他服务或用户与其连接。

4. 运行 → kubectl get all

复制负载均衡器的 ingress 配置,然后粘贴到浏览器地址栏,你的应用就能在那里运行了。

别忘了销毁所有与AWS账单相关的备份,还包括你的AWS账户本身。

负载均衡入口 →

这是一个机制,用于将传入的互联网流量分散到多个服务器和/或服务,确保高效和可靠的传递。

这就像在繁忙的办公楼入口有一位接待员,引导访客到不同的楼层或部门,防止任何地方过于拥挤。在数字世界中,负载均衡器入口(Load Balancer Ingress)帮助保持顺畅的用户体验,提升应用性能,并确保不会因为流量过大而过载。

步骤九→ 破坏全部基础建设

以下命令会删除或毁掉集群。

cd EKS-TF  # 切换到EKS-TF目录
terraform destroy --auto-approve  # 自动执行Terraform的销毁操作

3到5分钟后所有东西都被毁掉

3. 现在去你的EC2控制台,终止你的实例

我们在这里又完成了一个项目,别忘了用cloudairy cloudchart为这个项目创建一个好的动画图表。

Cloudairy 云图表网站链接:https://cloudairy.com

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消