Kubernetes(下文简称 k8s) 代表了 Google 的第三代容器管理系统,仅次于 Borg 和 Omega ,现在已经成为主要的容器平台。GKE 提供了了全套的 k8s 托管服务,将 Autoscaler 和 k8s 集成后,实现了 k8s 节点的自动伸缩机制,能根据 pod 的需求自动扩缩节点,实现了无服务器理念。

Load Balancer 作为 k8s 三种外部访问方式之一,是暴露服务到 internet 的标准方式。在 GKE 上,Ingress 是使用 Cloud Load Balancing 实现的。当您在集群中创建 Ingress 时,GKE 会创建一个 HTTP(S) 负载平衡器,它将提供一个静态的公网 IP 地址,并将其配置为将流量路由到您的应用。

本次实操手册将主要讲述如何在 GKE 上部署 HTTP(S) Load Balancer 及容器应用程式。

这里我们建议使用 GCP console 预设的 Cloud Shell,因为预设的 cloud shell 已经装好 gcloud command、kubectl、docker、git。

本次实操是在 cloud shell 进行演示。如果您想要在本机端操作,则需要确保您的本机端已经安装以下工具,并设定预设的 project ID,步骤如下:

  • Google Cloud SDK

  • kubectl →使用 gcloud command 安装

gcloud components install kubectl
  • Docker CE

  • git source control

[PROJECT_ID] 填入您所要使用的 GCP 项目 ID,预设的 zone 为us-central1-b 或是改成您想要部署的 zone。

gcloud config set project [PROJECT_ID]gcloud config set compute/zone us-central1-b

步骤一:打包 Docker 映像档

GKE 支持的应用程式部署格式为 Docker,此步骤带您打包一个简易的网页应用程式 hello-app。首先,下载 hello-app 的原始代码。

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplescd kubernetes-engine-samples/hello-app

设定 PROJECT_ID 的环境参数,这个 PROJECT_ID 会被用来当作上传映像档的GCP project。

export PROJECT_ID= "$(gcloud config get-value project -q)"

下面的指令会在当前的路径下使用 Dockerfile 建置一个映像档并贴上标签。gcr.io 代表着 Google Container Registry,类似 Dock Hub 的映像档储存空间。但相较于 Docker Hub,Google Container Registry 是非公开的 registry。(确保您本机的 Docker 正在运行)

docker build -t gcr.io/${PROJECT_ID}/hello-app:v1 .

执行 docker images 指令来确认刚刚的 build 是否成功。

步骤二:在本地端执行容器

在本地端测试刚刚建立的映像档

docker run --rm -p 8080:8080 gcr.io/${PROJECT_ID}/hello-app:v1

使用本机端的终端机:打开新的浏览器窗口,

输入http://localhost:8080 测试刚刚运转起来的应用程式。

使用 Cloud Shell:

docker run --rm -p 8080:8080 gcr.io/${PROJECT_ID}/hello-app:v1

点击选择 Add Cloud Shell Session,新增一页 Cloud Shell 的分页。

curl http://localhost:8080

收到页面成功的回传讯息后,在执行 docker run 的终端机或是 Cloud Shell 按下 Ctrl+c 停止容器的运行。

步骤三:上传 Docker 映像档至 GCR

接着,我们要把刚刚建好的映像档上传至 GCR,GKE 才能够使用这个映像档来运行集群。在上传映像档前需要先验证 Docker command-line,这里已经验证过了所以才会出现 already registered correctly。

gcloud auth configure-docker

验证完之后就可以上传至 GCR。

步骤四:创建 GKE 集群

创建一个名为 loadbalancedcluster 的 GKE 集群,在预设的情况下 GKE 会自动帮您创建三个 node,在这边我们设定两个 node。

gcloud container clusters create loadbalancedcluster --num-nodes=2

创建 GKE 集群需要等待数分钟,创建完成后可以列出 GKE 集群内的所有 node,也就是 VM instances。

gcloud compute instances list | grep gke

步骤五:部署应用程式至GKE 丛集

部署应用程式需要使用到 kubectl 这个指令工具来与集群交互。Pods 是Kubernetes 管理系统里面所代表的应用程式也是可以部署的最小单位,一个 Pod 里面可以有一个或是多个容器。

kubectl create deployment web 这个指令会让 Kubernetes 创建一个名为 web 的 Deployment。Deployment 管理着应用程式的 replicas 也就是多个应用程式的复制品,并把这些 replicas 安排到各个 nodes 上面去执行。

kubectl create deployment web --image=gcr.io/${PROJECT_ID}/hello-app:v1 --port 8080

​​​​​​​

kubectl get pods

步骤六:创建Service 并开启NodePort

Service 可以让 web 这个应用程式对外开放,但是目前我们只对内开放,且 Service 类型为NodePort,也就是 GKE 会在所有有执行 web 应用程式的 node 上面开启一个随机的 port。让之后创建的 Load Balancer 可以透过 NodePort 来分流。

kubectl expose deployment web --target-port=8080 --type=NodePort

kubectl get service web

这边 Service web 所开启的 nodePort 为32178。且尚未开放 Service 的 external IP。

步骤七:创建 Ingress 资源

Ingress 是管理所有外部流量路由至内部设定的 k8s 资源。当使用者创建一个Ingress,GKE 会创建一个HTTP(S) Load Balancing 并导流至应用程式所在的端口。

创建一个名为 basic-ingress.yaml 的文件,并贴入以下的内容

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: basic-ingressspec: backend:   serviceName: web   servicePort: 8080

部署 Ingress 至GKE。

kubectl apply -f basic-ingress.yaml

需要等待数分钟让 Ingress controller 创建一个HTTP(S) load balancer。

步骤八:测试应用程式

取得 load balancer 的 external IP,想要了解如何设定固定的 external IP,可以访问https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#step_5_optional_configuring_a_static_ip_address

kubectl get ingress basic-ingress

呼叫 curl 指令测试应用程式。

curl http://[IP_ADDRESS]:80

步骤九:(Option) 部署多个应用程式至集群

可以运行多个服务在同一个 load balancer 的外部 IP地址,我们只需要设定好 Ingress 的路由规则。

首先,先建立另一个名为 web2 的应用程式。

kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0 --port=8080

对内开放 web2 Deployment。

kubectl expose deployment web2 --target-port=8080 --type=NodePort

创建一个名为 fanout-ingress.yaml 的档案,并贴入以下内容:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fanout-ingressspec:  rules:  - http:      paths:      - path: /*        backend:          serviceName: web          servicePort: 8080      - path: /v2/*        backend:          serviceName: web2          servicePort: 8080

可以看到这个 manifest 有设定http 的路径,/* 的会导至 web 这个应用程式、/v2/* 会导至 web2 这个应用程式。

部署这个设定档,并等待数分钟。

kubectl create -f fanout-ingress.yaml

透过 kubectl get ingress fanout-ingress 取得load balancer 的外部 IP。

过一段时间后,使用 curl 去测试各个应用程式:

以上就是本次实操手册的全部内容啦~

实操手册:如何在GKE上部署HTTP(S) Load Balancer及容器应用程式相关推荐

  1. tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...

    前言:近期推出的嵌入式AI系列直播公开课受到广大开发者的喜爱,并收到非常多的反馈信息,其中对如何在EAIDK上面部署Tengine开发AI应用感兴趣的开发者不在少数,我们将分2期以案例实操的形式详细介 ...

  2. 重磅发布:《AI产品经理的实操手册(2023版)》

    今天是咱们社群"AI产品经理大本营"六周年活动的最后一天,正式发布这份大家和我都非常期待的重磅干货--<AI产品经理的实操手册(2023版)> 上周发布的"A ...

  3. 如何把自己的网站部署在网上_Terminal:如何在IPFS上部署Wordpress网站

    2020年3月19日,胡安兴奋的向大家推送: 利用terminal.co在IPFS上部署了我的个人网站,耗时小于10分钟,这太棒了! 为@terminaldotco喝彩! Terminal简介 从本地 ...

  4. 怎么抓python程序的包_如何在AWS上部署python应用程序

    如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多! 作者:蕾学姐 亚马逊云计算服务(Amazon Web Services,缩写为AWS),由 ...

  5. 【报告分享】见实私域流量白皮书:私域流量案例实操手册.pdf

    大家好,我是文文(微信:sscbg2020),今天给大家分享见实科技于2020年10月份发布的报告<见实私域流量白皮书:私域流量案例实操手册.pdf>. 本报告共73页,包含如下鞋服.餐饮 ...

  6. docker部署在linux怎么代理,如何在linux 上部署docker

    如何在linux 上部署docker? Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将 ...

  7. PCDN服务接入实操手册

    摘要: 本文为阿里云P2P内容分发网络(PCDN)实操手册,可根据本文内容接入与操作.参考来源官网文档. 一. PCDN是定义? P2P 内容分发网络(英文名:P2P CDN,以下简称PCDN)是以P ...

  8. docker删除所有容器_如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 我的官方群点击此处 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个 ...

  9. 工欲善其事必先利其器,TI-ONE平台“实操手册”在这里!

    为帮助选手们更好地备战赛事,2021腾讯广告算法大赛官方于5月10日至5月12日每晚七点,开启了"视"界杯系列专题直播活动.在5月11日的直播中,腾讯云高级工程师谢博文.彭彪及腾讯 ...

最新文章

  1. 【 FPGA 】超声波测距小实验(一)
  2. pytorch 加载模型:
  3. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
  4. python刷题用leet_GitHub - Yolymaker/leetcode-python: 利用python分类刷leetcode题目
  5. 微信成为开发者_如何成为开发者
  6. 【百度地图API】如何给自定义覆盖物添加事件
  7. VS2005(C#)里读取及改变App.config里appSettings节的值
  8. 【C++快速入门】面向对象篇
  9. go 排序sort的使用
  10. 对 数组[i].index=i的理解
  11. 网络协议学习---LLDP协议学习
  12. Python与SEO,三大SEO网站查询工具关键词查询采集源码!
  13. 推荐收藏 | 掌握这些步骤,机器学习模型问题药到病除
  14. android官网自定义相机,android native.js camera自定义相机
  15. WinCC flexible Smart V3 SP2软件安装具体方法和步骤_常见问题处理
  16. Sentieon软件应用之浅层测序分析
  17. 解决QQ小游戏、微信小游戏 getLaunchOptionsSync()获取的数据为旧数据
  18. VMM验证方法学学习随笔
  19. 工程光学第一、二、六章学习总结
  20. Java Condition类使用及分析

热门文章

  1. 2022年第十四届“华中杯”大学生数学建模挑战赛
  2. 互联网大佬为什么爱唱歌
  3. time gmtime localtime strftime 时间函数
  4. 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!
  5. Sublime Text 2 使用入门
  6. 计算机主机无反应,电脑主机开了但是显示器没反应怎么办 电脑主机开了显示器没反应原因【图文】...
  7. 通过java实现合成海报
  8. 编写函数求解一元二次方程
  9. 软件测试培训有就业保障吗?
  10. 采油厂污水选用流量计的类型建议