Google Cloud 应用程序的部署

概要

使用GKE 去部署服务

技术细节

  1. 先创建一个project
    在这里插入图片描述

点击创建即有了自己的project, 之后虚拟机和K8S engine的操作都是在project 沙箱里进行的
在这里插入图片描述

  1. 创建虚拟机, 英文即Compute Engine

选择机器类型,资源大小和节点位置就可以创建一个虚机
在这里插入图片描述

  1. 检查VPC- IP 地址,保证续集对应的ip是静态的
    在这里插入图片描述

检查虚拟机的外部 IP 地址是否为静态。如果是临时,请进行更改
在这里插入图片描述

  1. 配置虚机ssh访问, 以 centos为例
//更新软件包
sudo yum update(sudo -i ;yum update)
//安装ssh
sudo yum install openssh-server
//centos配置ssh时 /etc/ssh/sshd_config需要修改哪些
vi /etc/ssh/sshd_config
//搜索关键字
:/Port (回车)
//重启ssh   
sudo systemctl start sshd(sudo service ssh restart )
//重启
reboot
//设置密码

★補足説明:centos配置ssh时 /etc/ssh/sshd_config需要修改哪些

Port: 默认情况下,SSH服务器使用端口22。您可以通过修改Port选项来更改SSH服务器的监听端口。请确保选择一个安全的、未被其他服务使用的端口。
PermitRootLogin: 默认情况下,允许root用户通过SSH登录。您可以通过将PermitRootLogin选项设置为no来禁用root用户的SSH登录。这可以增加系统的安全性。
PasswordAuthentication: 默认情况下,SSH服务器允许使用密码进行身份验证。如果您希望仅允许使用SSH密钥进行身份验证,可以将PasswordAuthentication选项设置为no。
PermitEmptyPasswords: 默认情况下,空密码是不允许的。确保PermitEmptyPasswords选项设置为no,以防止用户使用空密码进行身份验证。
PubkeyAuthentication: 默认情况下,SSH服务器启用了公钥身份验证。确保PubkeyAuthentication选项设置为yes,以允许用户使用SSH密钥进行身份验证。
  1. 重启机器就可以使用ssh连接
    在这里插入图片描述

插入在Compute Engine机器上构造镜像的步骤

  1. 准备一个vue的前端项目,使用npm run build去构建最终发布的dist 文件
    按照下面目录结构放文件, 其中nginx可以放在任意位置
    nginx.conf 文件内容,这是一个标准的nginx配置文件,表示监听80端口流量请求
    对浏览器url请求返回到location 配置的/usr/share/nginx/html/index.html 文件,
    文件路径/usr/share/nginx/html 就是dist下文件需要复制到的目的地
server {
        listen 80;
        server_name example.com;
        location / {
                root /usr/share/nginx/html;
                try_files $uri /index.html;
            }

          # kill cache
         proxy_no_cache 1;
         proxy_cache_bypass 1;

}

Dockerfile 脚本的内容

# 使用 Nginx 基础镜像
FROM nginx:latest

# 移除默认的 Nginx 配置文件
RUN rm /etc/nginx/conf.d/default.conf

# 复制自定义的 Nginx 配置文件到容器中
COPY nginx.conf /etc/nginx/conf.d/

# 复制构建好的前端项目文件到 Nginx 的默认静态文件目录
COPY html/dist/ /usr/share/nginx/html

# 设置 Nginx 的运行时命令
CMD ["nginx", "-g", "daemon off;"]
  1. 在Compute Engine机器上构建docker镜像
    安装Docker:在Compute Engine实例上安装Docker引擎。以下是在CentOS上安装Docker的命令:
//执行错了  清除的场合
sudo rm /etc/yum.repos.d/docker-ce.repo

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
systemctl restart docker

搜索artifact找到Artifact Repository 谷歌官方的仓库,
因为在之前的探索中发现自己搭建的仓库在GKE部署时候,无法正确拉取镜像所以按照

在这里插入图片描述

如果镜像仓库没有实例,点击‘创建代码库’ -> 后文因为上传的都是docker镜像,所以称呼为镜像仓库
在这里插入图片描述

点击此处可以复制镜像仓库的路径,比如我这里用的是
asia-east2-docker.pkg.dev/my-blog-400405/docker-image-harbor
这里先留意这个路径,后文中为了给这个仓库路径上传镜像会用到这个路径
[图片]

这个脚本告诉docker

  1. 我需要一个nginx的镜像从dockerhub去寻找,版号是latest
  2. RUN 执行删除原始nginx配置文件default.conf
  3. RUN 把我们准备好的新的nginx配置文件复制到nginx镜像里的指定位置->/etc/nginx/conf.d/
  4. 把html/dist/ 下的文件复制到nginx镜像里的指定位置/usr/share/nginx/html
  5. 最后执行CMD ,这个命令在镜像构建后执行,nginx -g daemon off;启动nginx

为了方便镜像构建, 我们准备一个构建镜像的脚本 dist_build.sh(nginx目录下)

#!/bin/bash

# 设置变量
# Dockerfile 文件的路径
DOCKERFILE_PATH="/deng/nginx/Dockerfile" 
# 镜像名称 
PROJECT_NAME="test-vue-login"          
IMAGE_VERSION="latest"

IMAGE_NAME="$PROJECT_NAME:$IMAGE_VERSION"
# 构建镜像
docker build -t "$IMAGE_NAME"  -f "$DOCKERFILE_PATH" .

# 给镜像打tag
docker tag $IMAGE_NAME \
    asia-east2-docker.pkg.dev/deng-project-400901/deng-sosu/$IMAGE_NAME
docker push \
    asia-east2-docker.pkg.dev/deng-project-400901/deng-sosu/$IMAGE_NAME

★为了把本地镜像push到仓库去gcloud auth login
在这里插入图片描述

为了能在Compute Engine机器上push镜像到Google Artifact Repository
[图片]

在这里插入图片描述

需要用gcloud auth login命令登录验

同样我们可以使用密钥key和使用docker login命令登录到artifacts
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

docker login -u _json_key -p "$(cat /root/deng/nginx/deng-project-400901-692947a0422c.json)" asia-east2-docker.pkg.dev/deng-project-400901

在这里插入图片描述

k8s
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果重新部署
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Springboot 的目录

- /backend
    - /demo
        - xx.jar
        - xx.properties
    - Dockerfile
    - app_build.sh

springboot 项目的dockerfile怎么写

# 设置基础镜像
FROM openjdk:11-jdk-slim

# 设置工作目录
WORKDIR /app

# 复制构建生成的 JAR 文件到镜像中
COPY demo/demo-0.0.1-SNAPSHOT.jar /app/my-app.jar
COPY demo/application.properties /app/custom.properties 

# 暴露应用端口
EXPOSE 8000

# 设置容器启动命令
CMD ["java", "-jar", "/app/my-app.jar", "--spring.config.location=/app/custom.properties"]

为了方便镜像构建, 我们准备一个构建镜像的脚本 app_build.sh

#!/bin/bash

# 设置变量
# Dockerfile 文件的路径
DOCKERFILE_PATH="/root/deng/backend/Dockerfile" 
# 镜像名称 
PROJECT_NAME="test-springboot-login"          
IMAGE_VERSION="latest"

IMAGE_NAME="$PROJECT_NAME:$IMAGE_VERSION"
# 构建镜像
docker build -t "$IMAGE_NAME"  -f "$DOCKERFILE_PATH" .

# 给镜像打tag
docker tag $IMAGE_NAME \
    asia-east2-docker.pkg.dev/deng-project-400901/deng-sosu/$IMAGE_NAME
docker push \
    asia-east2-docker.pkg.dev/deng-project-400901/deng-sosu/$IMAGE_NAME
  1. 工作负载(Deployment, 后面使用英文原本词)
  2. 创建Service和Ingress
  3. 开启Google Cloud SQL, 创建mysql实例

在这里插入图片描述

  1. 点击连接。

  2. 在连接页面上,点击网络标签页

  3. 点击添加网络。
    在这里插入图片描述

  4. 输入您希望使用的名称,然后在网络框中输入虚拟机的静态 IP 地址。

  5. 点击完成,然后点击保存。

将0.0.0.0/0 添加上网路,这样任意客户端都可以访问

  1. 在虚拟机上安装mysql客户端
sudo yum install mysql-server mysql
测试mysql的连接 ,因为在mysql实例的网络上只添加了虚机的访问,下面测试命令发自虚拟机

在这里插入图片描述

小结

为什么要创建集群,集群可以提高服务的高可用性,它通过控制Pod 进行动态扩容,如果有Pod异常它会自动重建pod, 停掉有问题的Pod

  1. 创建Kubernetes 集群
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

直接点确定创建k8s集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHEN_RUI_2200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值