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集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值