44、在Google Kubernetes Engine上搭建Kubernetes集群

在Google Kubernetes Engine上搭建Kubernetes集群

1. Google Cloud Platform与Google Kubernetes Engine简介

在“三大”公共云服务提供商中,Google Cloud Platform(GCP)是较新的一个。Google涉足公共云技术的方式与其他两家有所不同。2008年4月,Google推出了Google App Engine的公开预览版,这是其云服务的首个组件。截至2024年年中,App Engine服务仍然可用,该服务允许开发者在Google管理的运行时环境中部署应用程序,支持的语言包括PHP、Java、Ruby、Python、Node.js、C#以及Google于2009年开源的编程语言Go。

后续GCP旗下的服务陆续推出:2010年5月推出了Google Cloud Storage,随后是Google BigQuery和其预测API的预览版;2011年10月,Google Cloud SQL上线;2012年6月,Google Compute Engine预览版发布。到这时,经过四年时间,已经具备了构成公共云服务的核心服务。不过,当时大多数服务仍处于预览阶段,直到2013年,许多核心服务才正式普遍可用(GA),这意味着可以安全地大规模运行生产工作负载,并且有服务级别协议(SLA)保障,这对于中小企业和大型企业采用该服务至关重要,而这距离Google推出Kubernetes仅一年时间。2014年底,Google推出了Google Kubernetes Engine(GKE)的首个alpha版本。

由于Kubernetes是由Google开发的,并且Google通过Borg项目积累了大规模运行容器工作负载的丰富经验,因此Google成为首批在GKE中提供自己的Kubernetes服务的公共云提供商之一也就不足为奇了。2015年7月,Kubernetes v1版本发布并交由云原生计算基金会(CNCF)维护,仅一个月后,GKE服务就正式普遍可用。

GKE服务允许用户在GCP的原生计算、存储和网络服务支持下,启动和管理一个经过CNCF认证的Kubernetes集群,还能与平台的监控、身份和访问管理功能进行深度集成。

2. 准备本地环境
  • 注册GCP账户 :访问 https://cloud.google.com/ ,如果你已经使用Gmail、YouTube等Google服务或拥有安卓手机,就拥有了Google账户,可以使用该账户注册GCP。目前,Google提供300美元的免费信用额度,可在90天内使用,但需要提供有效的支付方式以确保不是自动机器人注册滥用信用额度。使用完或额度过期后,可选择将账户升级为付费账户。具体信息可查看 https://cloud.google.com/free/docs/free-cloud-features 。若想使用免费额度,可点击 https://cloud.google.com/free/docs/free-cloud-features#try-it-for-yourself 中的“Get started for free”,符合条件的话,按照屏幕提示操作,注意阅读条款和条件,注册成功后将进入GCP控制台。若已有GCP账户,可直接在 https://console.cloud.google.com/ 登录。
  • 创建项目 :GCP采用将资源部署到项目中的概念。新注册账户会自动创建一个“My First Project”项目。若使用现有账户,建议创建一个新项目来部署GKE集群。操作步骤如下:
    1. 点击页面左上角GCP logo右侧顶部栏中的“Select menu”。
    2. 点击“NEW PROJECT”。
    3. 为新项目命名,选择要关联的组织,选择项目存储位置(组织或文件夹)。
    4. 输入上述信息后,点击“CREATE”按钮。

  • 安装GCP命令行界面(CLI) :
    |操作系统|安装方式|
    | ---- | ---- |
    |macOS|若安装了Homebrew,可使用命令 $ brew install --cask google-cloud-sdk 安装GCP CLI,使用 $ gcloud version 测试安装是否成功。若有问题,可查看 $ brew info --cask google-cloud-sdk 获取安装信息。|
    |Windows| - 可通过PowerShell使用Chocolatey安装。若未安装Chocolatey,可在具有管理员权限的PowerShell会话中运行 $ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 进行安装,安装完成后运行 $ choco install --ignore-checksum gcloudsdk 。
    - 也可从 https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe 下载安装程序,双击运行并按屏幕提示操作。安装完成后,在新的PowerShell窗口中运行 $ gcloud version 测试。|
    |Linux|使用Google提供的全局安装脚本,运行 $ curl https://sdk.cloud.google.com | bash ,安装过程中脚本会询问一些问题,大多数情况下回答“Yes”即可。安装完成后,运行 $ exec -l $SHELL 重新加载会话以应用安装程序所做的更改,使用 $ gcloud version 查看安装的GCP CLI版本信息。|

此外,还可以使用Google Cloud Shell,它内置于Google Cloud控制台中。点击顶部菜单右侧的“Shell”图标即可访问,配置后可在基于Web的终端中运行 $ gcloud version ,其输出与本地安装的版本相匹配。若使用Google Cloud Shell,可跳过初始化步骤。

  • 初始化 :如果你选择在本地安装客户端,需要运行 $ gcloud init 命令将其与GCP账户关联。该命令会立即进行快速网络诊断,确保客户端具备运行所需的连接性。诊断通过后,会提示你是否登录,回答“Y”将打开浏览器窗口,若未打开,可将提供的URL复制粘贴到浏览器中,选择要使用的账户后,会看到客户端请求的权限概述,若同意授予权限,点击“Allow”按钮。回到终端,会确认你登录的用户信息,然后要求选择要使用的云项目,列表中只显示项目的唯一ID,而非之前在Google Cloud控制台中看到或设置的友好名称。若有多个项目,请选择正确的项目。若需要更新客户端使用的项目,可运行 $ gcloud config set project PROJECT_ID ,将 PROJECT_ID 替换为要切换的项目的唯一ID。
3. 启动首个Google Kubernetes Engine集群

在启动集群之前,需要确保 container.googleapis.com 服务已启用,运行命令 $ gcloud services enable container.googleapis.com 。然后安装一个插件,以便使用 kubectl 对集群进行身份验证,运行 $ gcloud components install gke-gcloud-auth-plugin 。

启动一个名为 myfirstgkecluster 的两节点集群,该集群将托管在美国中部地区的单个区域,使用以下命令:

$ gcloud container clusters create myfirstgkecluster --num-nodes=2 --zone=us-central1-a

大约五分钟后,会看到集群启动的输出信息。集群启动成功后,可根据输出中的URL在Google Cloud Console中查看集群。

4. 部署工作负载并与集群交互

在运行 $ gcloud container clusters create myfirstgkecluster --num-nodes=2 --zone=us-central1-a 启动集群的反馈信息中,会看到 kubeconfig entry generated for myfirstgkecluster 这一行,这意味着已经下载并配置了将本地 kubectl 与新部署的GKE集群连接所需的所有信息。可以使用 $ kubectl get nodes 命令进行确认,输出应显示两个以 gke 为前缀的节点。

  • 配置本地客户端 :若需要配置或重新配置 kubectl 以连接到集群,可运行 $ gcloud container clusters get-credentials myfirstgkecluster --zone=us-central1-a 下载凭证并配置 kubectl 。若需要切换配置(即上下文),可使用以下命令:
  • $ kubectl config current-context :列出当前上下文。
  • $ kubectl config get-contexts -o name :列出所有已配置的上下文名称。
  • $ kubectl config use-context CONTEXT_NAME :切换到指定的上下文,将 CONTEXT_NAME 替换为要切换的上下文名称。

  • 启动示例工作负载 :我们将启动官方Kubernetes文档中使用的PHP/Redis Guestbook示例工作负载。
    1. 创建Redis Leader部署和服务 :

$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-leader-deployment.yaml
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-leader-service.yaml
  1. 创建Redis Follower部署和服务 :
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-follower-deployment.yaml
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-follower-service.yaml

总结

通过以上步骤,我们完成了在Google Kubernetes Engine上搭建Kubernetes集群、部署工作负载的操作。整个过程包括了解GCP和GKE的历史背景、准备本地环境、启动集群、配置客户端以及部署示例工作负载等环节。在操作过程中,要注意根据实际情况选择合适的命令和参数,同时注意资源的使用和费用问题,使用完资源后及时终止,以避免不必要的费用支出。

mermaid流程图如下:

graph LR
    A[注册GCP账户] --> B[创建项目]
    B --> C[安装GCP CLI]
    C --> D{选择安装方式}
    D -->|macOS| E[使用Homebrew安装]
    D -->|Windows| F[使用Chocolatey或下载安装程序]
    D -->|Linux| G[使用全局安装脚本]
    E --> H[初始化客户端]
    F --> H
    G --> H
    H --> I[启用服务和安装插件]
    I --> J[启动集群]
    J --> K[部署工作负载]
    K --> L[配置客户端]
    L --> M[启动示例工作负载]

这个流程图展示了从注册GCP账户到启动示例工作负载的整个过程,清晰地呈现了各个步骤之间的先后顺序和依赖关系。

在Google Kubernetes Engine上搭建Kubernetes集群

5. 深入了解集群节点

在前面的步骤中,我们已经成功启动了GKE集群并部署了工作负载。接下来,让我们深入了解一下集群节点的相关信息。

集群节点是Kubernetes集群中运行工作负载的计算资源。在GKE中,节点是由GCP的计算引擎实例组成的。我们可以使用 kubectl 命令来查看节点的详细信息。

$ kubectl describe nodes

运行上述命令后,会输出每个节点的详细信息,包括节点的名称、状态、容量、分配的资源等。以下是一个简单的表格示例,展示了部分节点信息:
| 节点名称 | 状态 | CPU 容量 | 内存容量 |
| ---- | ---- | ---- | ---- |
| gke-myfirstgkecluster-xxxx | Ready | 2 vCPU | 7.5 GB |
| gke-myfirstgkecluster-yyyy | Ready | 2 vCPU | 7.5 GB |

除了查看节点信息,我们还可以对节点进行一些操作,例如:
- 添加节点 :如果需要增加集群的计算资源,可以通过增加节点数量来实现。可以使用以下命令来调整节点数量:

$ gcloud container clusters resize myfirstgkecluster --size=3 --zone=us-central1-a

上述命令将 myfirstgkecluster 集群的节点数量调整为3个。

  • 删除节点 :如果不再需要某些节点,可以将其从集群中删除。在删除节点之前,需要确保该节点上的工作负载已经被妥善处理。可以使用以下命令删除节点:
$ kubectl delete node gke-myfirstgkecluster-xxxx
6. 监控与管理集群

为了确保集群的稳定运行,我们需要对集群进行监控和管理。GKE提供了一些工具和功能来帮助我们完成这些任务。

  • 使用GCP控制台监控 :登录到 https://console.cloud.google.com/ ,在控制台中可以查看集群的各种指标,如CPU使用率、内存使用率、网络流量等。通过这些指标,我们可以及时发现集群中的问题并采取相应的措施。

  • 使用Prometheus和Grafana监控 :Prometheus是一个开源的监控系统,Grafana是一个可视化工具。我们可以在GKE集群中部署Prometheus和Grafana来实现更详细的监控。以下是一个简单的部署步骤:
    1. 创建一个名为 prometheus.yaml 的文件,内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
      - job_name: 'kubernetes-nodes'
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - action: labelmap
            regex: __meta_kubernetes_node_label_(.+)
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus
          args:
            - '--config.file=/etc/prometheus/prometheus.yml'
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus
      volumes:
        - name: prometheus-config-volume
          configMap:
            name: prometheus-config
  1. 应用配置文件:
$ kubectl apply -f prometheus.yaml
  1. 创建一个名为 grafana.yaml 的文件,内容如下:
apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-datasources
data:
  datasources.yaml: |
    apiVersion: 1
    datasources:
      - name: Prometheus
        type: prometheus
        url: http://prometheus:9090
        access: proxy
        isDefault: true
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
        - name: grafana
          image: grafana/grafana
          ports:
            - containerPort: 3000
          volumeMounts:
            - name: grafana-datasources-volume
              mountPath: /etc/grafana/provisioning/datasources
      volumes:
        - name: grafana-datasources-volume
          configMap:
            name: grafana-datasources
  1. 应用配置文件:
$ kubectl apply -f grafana.yaml

部署完成后,可以通过创建一个服务来暴露Grafana的端口,然后在浏览器中访问Grafana的界面,查看监控指标。

7. 安全与权限管理

在使用GKE集群时,安全和权限管理是非常重要的。GKE提供了多种安全机制来保护集群和工作负载。

  • 身份验证和授权 :GKE使用Google的身份验证和授权系统来管理用户对集群的访问权限。可以通过创建不同的角色和绑定来控制用户的操作权限。例如,创建一个只读角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: read-only-role
rules:
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-only-binding
subjects:
  - kind: User
    name: user@example.com
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: read-only-role
  apiGroup: rbac.authorization.k8s.io

将上述配置保存为 read-only-rbac.yaml 文件,然后使用 kubectl apply -f read-only-rbac.yaml 命令来应用配置。

  • 网络安全 :GKE提供了网络策略来控制集群内的网络流量。可以创建网络策略来限制哪些Pod可以相互通信。例如,创建一个允许某个命名空间内的Pod之间通信的网络策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-internal-communication
  namespace: my-namespace
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector: {}

将上述配置保存为 network-policy.yaml 文件,然后使用 kubectl apply -f network-policy.yaml 命令来应用配置。

8. 总结与最佳实践

通过以上步骤,我们全面了解了在Google Kubernetes Engine上搭建Kubernetes集群、部署工作负载、管理节点、监控集群以及安全管理等方面的内容。以下是一些最佳实践建议:
- 资源管理 :合理规划和分配集群资源,避免资源浪费和不足。定期监控资源使用情况,根据实际需求调整节点数量和资源配额。
- 安全防护 :使用GKE提供的安全机制,如身份验证、授权、网络策略等,确保集群和工作负载的安全。
- 备份与恢复 :定期备份集群的配置和数据,以便在出现问题时能够快速恢复。
- 自动化部署 :使用CI/CD工具实现自动化部署,提高部署效率和可靠性。

mermaid流程图如下:

graph LR
    A[查看节点信息] --> B{操作选择}
    B -->|添加节点| C[调整节点数量]
    B -->|删除节点| D[删除指定节点]
    E[监控与管理] --> F{监控方式}
    F -->|GCP控制台| G[查看指标]
    F -->|Prometheus和Grafana| H[部署监控工具]
    I[安全与权限管理] --> J{管理方面}
    J -->|身份验证和授权| K[创建角色和绑定]
    J -->|网络安全| L[创建网络策略]

这个流程图展示了深入了解集群节点后,在节点操作、监控管理和安全权限管理等方面的操作流程和选择关系。通过遵循这些步骤和最佳实践,我们可以更好地使用Google Kubernetes Engine来搭建和管理Kubernetes集群。

相关推荐

6、Docker与Kubernetes入门指南

本文介绍了Docker与Kubernetes的入门知识,涵盖Docker容器镜像的操作、容器内部探索、容器的停止与删除、镜像推送至Docker Hub等核心操作。同时详细讲解了如何通过Minikube搭建本地单节点Kubernetes集群,以及使用Google Kubernetes Engine(GKE)创建多节点托管集群的方法。结合命令示例、流程图和表格,帮助开发者快速掌握容器化技术的基础与实践,适用于开发测试及生产环境的初步部署。

mango的博客 83

44、谷歌云平台大数据解决方案集成与计算资源应用

本文深入探讨了谷歌云平台(GCP)在大数据处理与计算资源应用方面的核心服务与集成方案。涵盖Cloud Dataflow管道模板与作业管理、BigQuery的高性能查询能力及其与Dataflow的集成方式,并介绍了四种主要计算资源——Compute Engine、App Engine、Kubernetes Engine和Cloud Functions的特点、优势及部署方法。通过实际操作示例和架构对比,帮助开发者和企业根据应用场景选择合适的技术栈,实现高效的数据分析与应用部署。

ujm56789012的博客 86

ETL第八章无人售货机零售项目实践

ETL实战项目——无人售货机

m0_52058217的博客 4418

无人机基本组成部件

无人机基本组成部件

qq_37410522的博客 1万+

#Linux内存管理# 用一个案例详细介绍ARMv7-A架构 缺页中断处理的原理

跳转到异常向量:根据 异常向量表基地址(通常配置在 VBAR 寄存器中,例如 0xFFFF0000) + 数据中止异常的偏移量 0x10,跳转到数据中止异常的处理程序入口点 0xFFFF0010(实践中,这个入口通常是一条跳转到更复杂处理函数的指令)。malloc 通常不会立即分配物理内存页,它只是在内核为该进程维护的虚拟地址空间中找到一段足够大的空闲虚拟地址区域(比如 0x00008000 - 0x00008FFF),标记为已用,并返回起始地址(例如 0x00008000)给程序。

sinat_37817094的博客 993

Unity线性空间下PSD透明贴图黑边问题:原理分析与三种解决方案

在计算机图形学中,颜色空间转换与Alpha混合是渲染管线的基础环节。伽马空间与线性空间的差异源于显示设备与人眼感知的特性,现代渲染引擎采用线性工作流以实现更真实的光照计算。然而,当图像处理软件(如Photoshop)导出的纹理数据与游戏引擎(如Unity)的预期格式不匹配时,就会引发技术问题,影响视觉保真度与开发效率。具体表现为,在线性空间下进行Alpha Blend混合时,带透明通道的纹理边缘常出现异常黑边或颜色失真,其核心根源在于纹理数据是否经过“预乘”处理与sRGB标记的解读冲突。这一问题的解决对于提

weixin_34198762的博客 382

CentOS7下用FreeRADIUS+AD实现802.1X认证完整指南(附华为交换机配置)

本文提供了在CentOS 7系统上部署FreeRADIUS并与Windows Active Directory集成,以实现企业级802.1X网络认证的完整实战指南。内容涵盖从架构原理、服务器配置(包括Kerberos、Samba Winbind集成)、FreeRADIUS核心设置与AD联动,到华为交换机的详细配置步骤。重点解决了生产环境中常见的高可用、动态VLAN下发及深度排错问题,为企业构建集中、安全的网络准入控制体系提供了经过验证的解决方案。

weixin_29273849的博客 407

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 530

【我的Android进阶之旅】Android自定义View实现一个游戏摇杆,来实现监听遥动的方向或者监听摇动的角度的功能

一、需求描述 去年有个需求,需要使用自定义View实现一个游戏摇杆,来识别上下左右摇动的方向。 有点类似下面这样的王者荣耀游戏摇杆的效果 二、业界已有的参考资料 在下面这篇博客介绍了如何自定义游戏摇杆 2.1 博客介绍 Android自定义摇杆 2.1.1 功能 支持自适应大小 支持2个方向、4个方向、8个方向的摇动监听 支持摇动角度获取 可选回调模式 支持可摇动区域自定义 支持摇杆自定义 支持设置图片、色值、Shape图形 2.1.2 效果图 2.1.3 设置回调方式 setCallBac

字节卷动 1412

Arduino IDE 开发ESP32-S3编译报错 Sketch too big?一步步解决!

解决方法很简单,只需要一步步来修改 Arduino IDE 的配置即可。确保你已经打开 Arduino IDE 并加载了你的 ESP32 代码。如果你也遇到了这个问题,按这个方法试试,应该就能顺利搞定!,如果你需要 OTA,就不能选这个方案,需要换成。,但我回头一想,我这块 ESP32-S3 可是。,按理说存储空间应该足够啊,那这到底是咋回事?,默认方案就装不下了,这时就需要选择更大的。按钮,这次应该不会报错了!,然后在下拉菜单中找到。,可以支持更大的固件。如果你的固件体积超过。,就能正常编译上传。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2140

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 43、数学中的不可能性证明与计算复杂性
下一篇: 27、利用贝叶斯神经网络模型预测尼日利亚恐怖袭击的性质
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值