构建生产就绪的Kubernetes集群指南
立即解锁
发布时间: 2025-08-25 02:12:32 阅读量: 3 订阅数: 6 

# 构建生产就绪的 Kubernetes 集群
## 1. AWS 集群相关要点
### 1.1 区域和可用区限制
AWS 集群不能跨多个区域,主节点和工作节点定义的所有可用区应在同一区域内。部署多主集群时,应创建奇数个主实例,因为 Kubernetes 依赖 etcd 分布式键值存储,etcd 法定人数要求任何时候超过 51%的节点可用。例如,三个主节点的控制平面只能承受单个主节点或可用区故障,若需处理更多故障,需增加主实例数量。
### 1.2 实用工具和操作
#### 1.2.1 使用 AWS Shell
aws - shell 是与 AWS CLI 配合使用的集成 shell,使用 AWS CLI 配置,通过自动完成功能提高生产力。安装并运行命令如下:
```bash
$ sudo apt - get install aws - shell && aws - shell
```
运行后,可使用 AWS 命令,按 F10 键退出 shell。
#### 1.2.2 使用基于八卦协议的集群
kops 从 1.6.2 版本开始,DNS 配置可选,可创建基于八卦协议的集群。若选择基于八卦协议的集群,可跳过托管区域创建,使用以 k8s.local 结尾的集群名,设置环境参数示例如下:
```bash
$ export KOPS_CLUSTER_NAME = devopscookbook.k8s.local
$ export KOPS_STATE_STORE = s3://devops - cookbook - state - store
```
#### 1.2.3 使用不同区域的 S3 桶
kops 存储集群配置需要专用 S3 桶,以 eu - west - 1 区域为例创建桶的命令如下:
```bash
$ aws s3api create - bucket --bucket s3.k8s.containerized.me \
--region eu - west - 1 --create - bucket - configuration \
LocationConstraint = eu - west - 1
```
为简单起见,建议使用 us - east - 1 区域,否则需指定适当的 LocationConstraint。
#### 1.2.4 编辑集群配置
`kops create cluster` 命令创建集群配置文件但不创建集群和启动 EC2 实例,配置文件存储在 S3 桶中。可使用 `kops edit cluster` 命令修改配置,分别编辑节点实例组的命令如下:
```bash
$ kops edit ig nodes
$ kops edit ig master - us - east - 1a
```
若想使用不同编辑器,可设置 `$KUBE_EDITOR=nano`。
#### 1.2.5 删除集群
使用以下命令删除集群:
```bash
$ kops delete cluster --name ${KOPS_CLUSTER_NAME} --yes
```
#### 1.2.6 使用 Amazon EKS 管理控制台配置 EKS 集群
步骤如下:
1. 打开浏览器,访问 https://console.aws.amazon.com/eks/home#/clusters。
2. 输入集群名称,点击“Next Step”按钮。
3. 在“Create Cluster”页面,选择 Kubernetes 版本、角色名称、至少两个可用区和安全组。
4. 点击“Create”。
5. EKS 集群创建约需 20 分钟,15 - 20 分钟后刷新页面检查状态。
6. 使用以下命令更新 kubectl 配置:
```bash
$ aws eks --region us - east - 1 update - kubeconfig \
--name K8s - DevOps - Cookbook
```
7. 使用 kubectl 管理集群:
```bash
$ kubectl get nodes
```
#### 1.2.7 部署 Kubernetes Dashboard
步骤如下:
1. 建议安装 Kubernetes Dashboard v.2.0.0 版本,部署前若有旧版本需删除,使用以下命令:
```bash
$ kubectl delete ns kubernetes - dashboard
# 使用最新版本链接
$ kubectl apply - f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0 - beta5/aio/deploy/recommended.yaml
```
若有兼容性问题,可部署旧稳定版本:
```bash
$ kubectl apply - f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes - dashboard.yaml
```
2. 默认 kubernetes - dashboard 服务使用 ClusterIP 类型,若要从外部访问,使用以下命令将其改为 LoadBalancer 类型,否则使用端口转发:
```bash
$ kubectl edit svc kubernetes - dashboard - n kubernetes - dashboard
```
3. 获取 dashboard 的外部 IP:
```bash
$ kubectl get svc kubernetes - dashboard - n kubernetes - dashboard
```
4. 在浏览器中打开外部 IP 链接。
5. 使用以下命令查找令牌:
```bash
$ kubectl get secrets - A | grep dashboard - token
```
6. 获取令牌详细信息:
```bash
$ kubectl describe secrets kubernetes - dashboard - token - bc2w5 - nkubernetes - dashboard
```
7. 复制令牌并粘贴到 Kubernetes Dashboard 登录。
## 2. Google Cloud Platform 上配置 Kubernetes 集群
### 2.1 准备工作
所有操作需要启用计费的 GCP 账户,若没有,可访问 https://console.cloud.google.com 创建。在 GCP 运行 Kubernetes 有两个主要选项,若想完全管理部署并对实例有特定要求,可使用 Google Compute Engine (GCE),否则建议使用托管的 Google Kubernetes Engine (GKE)。
### 2.2 操作步骤
#### 2.2.1 安装命令行工具
1. 下载 gcloud CLI:
```bash
$ curl https://sdk.cloud.google.com | bash
```
2. 初始化 SDK 并按提示操作:
```bash
$ gcloud init
```
3. 选择现有项目或创建新项目。
4. 为项目启用 Compute Engine API:
```bash
$ gcloud services enable compute.googleapis.com
```
5. 设置默认区域:
```bash
$ gcloud config set compute/zone us - central1 - a
```
6. 从命令行启动 GCE 实例:
```bash
$ gcloud compute instances create "devops - cookbook" \
--zone "us - central1 - a" --machine - type "f1 - micro"
```
7. 删除测试虚拟机:
```bash
$ gcloud compute instances delete "devops - cookbook"
```
#### 2.2.2 配置托管的 Kubernetes 集群
创建集群命令如下:
```bash
$ gcloud container clusters create k8s - devops - cookbook - 1 \
--cluster - version latest --machine - type n1 - standard - 2 \
--image - type UBUNTU --disk - type pd - standard --disk - size 100 \
--no - enable - basic - auth --metadata disable - legacy - endpoints=true \
--scopes compute - rw,storage - ro,service - management,service - control,logging - write,monitoring \
--num - nodes "3" --enable - stackdriver - kubernetes \
--no - enable - ip - alias --enable - autoscaling --min - nodes 1 \
--max - nodes 5 --enable - network - policy \
--addons HorizontalPodAutoscaling,HttpLoadBalancing \
--enable - autoupgrade --enable - autorepair --maintenance - window "10:00"
```
集群创建需 5 分钟以上。
#### 2.2.3 连接到 GKE 集群
1. 配置 kubectl 访问集群:
```bash
$ gcloud container clusters get - credentials k8s - devops - cookbook - 1
```
2. 验证 Kubernetes 集群:
```bash
$ kubectl get nodes
```
### 2.3 其他操作
#### 2.3.1 使用 Google Cloud Shell
可访问 https://cloud.google.com/shell/ 获取 Google Cloud Shell 管理云实例。
#### 2.3.2 使用自定义网络配置部署
步骤如下:
1. 创建 VPC 网络:
```bash
$ gcloud compute networks create k8s - devops - cookbook \
--subnet - mode custom
```
2. 在 VPC 网络中创建子网:
```bash
$ gcloud compute networks subnets create kubernetes \
--network k8s - devops - cookbook --range 10.240.0.0/16
```
3. 创建允许内部流量的防火墙规则:
```bash
$ gcloud compute firewall - rules create k8s - devops - cookbook - allow - int \
--allow tcp,udp,icmp --network k8s - devops - cookbook \
--source - ranges 10.240.0.0/16,10.200.0.0/16
```
4. 创建允许外部 SSH、ICMP 和 HTTPS 流量的防火墙规则:
```bash
$ gcloud compute firewall - rules create k8s - devops - cookbook - allow - ext \
--allow tcp:22,tcp:6443,icmp --network k8s - devops - cookbook \
--source - ranges 0.0.0.0/0
```
5. 验证规则:
```bash
$ gcloud compute firewall - rules list
```
6. 在容器集群创建命令中添加网络和子网参数并运行。
#### 2.3.3 删除集群
使用以下命令删除集群:
```bash
$ gcloud container clusters delete k8s - devops - cookbook - 1
```
#### 2.3.4 查看工作负载仪表板
步骤如下:
1. 从 GCP 仪表板选择 GKE 集群,点击“Workloads”。
2. 点击“Show system workloads”查看 kube - system 命名空间中已部署的组件和容器。
## 3. Microsoft Azure 上配置 Kubernetes 集群
### 3.1 准备工作
所有操作需要 Microsoft Azure 订阅,若没有,可访问 https://portal.azure.com 创建免费账户。
### 3.2 操作步骤
#### 3.2.1 安装命令行工具
1. 安装必要依赖:
```bash
$ sudo apt - get update && sudo apt - get install - y libssl - dev \
libffi - dev python - dev build - essential
```
2. 下载并安装 az CLI 工具:
```bash
$ curl - L https://aka.ms/InstallAzureCli | bash
```
3. 验证 az 版本:
```bash
$ az --version
```
4. 安装 kubectl:
```bash
$ az aks install - cli
```
#### 3.2.2 配置托管的 Kubernetes 集群
1. 登录账户:
```bash
$ az login
```
2. 创建资源组:
```bash
$ az group create --name k8sdevopscookbook --location eastus
```
3. 创建服务主体并记录 appId 和 password:
```bash
$ az ad sp create - for - rbac --skip - assignment
```
4. 创建集群,替换 appId 和 password:
```bash
$ az aks create --resource - group k8sdevopscookbook \
--name AKSCluster \
--kubernetes - version 1.15.4 \
--node - vm - size Standard_DS2_v2 \
--node - count 3 \
--service - principal <appId> \
--client - secret <password> \
--generate - ssh - keys
```
集群创建约需 5 分钟,成功完成后会显示“provisioningState: Succeeded”。
#### 3.2.3 连接到 AKS 集群
收集凭证并配置 kubectl:
```bash
$ az aks get - credentials --resource - group k8sdevopscookbook \
--name AKSCluster
```
### 总结
本文详细介绍了在 AWS、Google Cloud Platform 和 Microsoft Azure 上构建生产就绪的 Kubernetes 集群的步骤,包括区域限制、实用工具使用、集群创建、配置和连接等操作,为不同云平台上的 Kubernetes 集群搭建提供了全面的指导。
以下是在不同云平台配置 Kubernetes 集群的步骤总结表格:
| 云平台 | 安装命令行工具 | 配置集群 | 连接集群 |
| --- | --- | --- | --- |
| AWS | 安装 aws - shell <br> `sudo apt - get install aws - shell && aws - shell` | 使用 EKS 控制台或 kops 创建集群 | 使用 `aws eks update - kubeconfig` 和 `kubectl get nodes` 管理 |
| Google Cloud Platform | 下载并初始化 gcloud <br> `curl https://sdk.cloud.google.com | bash` <br> `gcloud init` | 使用 `gcloud container clusters create` 创建集群 | 使用 `gcloud container clusters get - credentials` 和 `kubectl get nodes` 验证 |
| Microsoft Azure | 安装 az 和 kubectl <br> `curl - L https://aka.ms/InstallAzureCli | bash` <br> `az aks install - cli` | 使用 `az aks create` 创建集群 | 使用 `az aks get - credentials` 配置 kubectl |
以下是在不同云平台配置 Kubernetes 集群的流程图:
```mermaid
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke - width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke - width:2px
A([开始]):::startend --> B{选择云平台}:::process
B --> C[AWS]:::process
B --> D[Google Cloud Platform]:::process
B --> E[Microsoft Azure]:::process
C --> C1(安装 aws - shell):::process
C1 --> C2(创建 S3 桶等操作):::process
C2 --> C3(使用 EKS 控制台或 kops 创建集群):::process
C3 --> C4(连接并管理集群):::process
D --> D1(下载并初始化 gcloud):::process
D1 --> D2(启用 API 等操作):::process
D2 --> D3(使用 gcloud 创建 GKE 集群):::process
D3 --> D4(连接并验证集群):::process
E --> E1(安装 az 和 kubectl):::process
E1 --> E2(创建资源组等操作):::process
E2 --> E3(使用 az 创建 AKS 集群):::process
E3 --> E4(连接并配置 kubectl):::process
C4 --> F([结束]):::startend
D4 --> F
E4 --> F
```
## 4. 不同云平台配置 Kubernetes 集群的对比分析
### 4.1 资源管理方面
在 AWS 上,使用 S3 桶来存储集群配置,它就像一个可靠的“数据仓库”,为集群配置提供了稳定的存储。例如,在 eu - west - 1 区域创建 S3 桶的命令:
```bash
$ aws s3api create - bucket --bucket s3.k8s.containerized.me \
--region eu - west - 1 --create - bucket - configuration \
LocationConstraint = eu - west - 1
```
而 Google Cloud Platform 主要依赖 gcloud CLI 来管理各种资源,通过它可以轻松地创建 VPC 网络、子网和防火墙规则等。如创建 VPC 网络的命令:
```bash
$ gcloud compute networks create k8s - devops - cookbook \
--subnet - mode custom
```
Microsoft Azure 则使用 az CLI 进行资源管理,通过它可以创建资源组、服务主体等。例如创建资源组的命令:
```bash
$ az group create --name k8sdevopscookbook --location eastus
```
### 4.2 集群创建速度
AWS 的 EKS 集群创建大约需要 20 分钟,在这期间需要耐心等待并在 15 - 20 分钟后刷新页面查看状态。Google Cloud Platform 的 GKE 集群创建需要 5 分钟以上,相对较快。Microsoft Azure 的 AKS 集群创建约需 5 分钟,速度也比较可观。具体对比见下表:
| 云平台 | 集群创建时间 |
| --- | --- |
| AWS | 约 20 分钟 |
| Google Cloud Platform | 5 分钟以上 |
| Microsoft Azure | 约 5 分钟 |
### 4.3 操作复杂度
AWS 的操作涉及到多个方面,如使用 aws - shell、配置 S3 桶、使用 EKS 控制台等,操作步骤相对较多。Google Cloud Platform 的操作主要围绕 gcloud CLI 展开,步骤相对清晰,但也需要对 GCP 的服务有一定了解。Microsoft Azure 的操作相对简洁,主要使用 az CLI 完成资源创建和集群配置。
## 5. 常见问题及解决方法
### 5.1 AWS 相关问题
#### 5.1.1 S3 桶创建失败
可能是由于区域设置不正确或权限不足。解决方法是检查区域设置是否正确,确保使用了正确的 LocationConstraint 参数,同时检查账户权限是否足够。
#### 5.1.2 EKS 集群创建超时
可能是网络问题或资源不足。可以检查网络连接是否稳定,同时查看 AWS 控制台的资源使用情况,必要时增加资源配额。
### 5.2 Google Cloud Platform 相关问题
#### 5.2.1 gcloud 初始化失败
可能是网络问题或 SDK 下载不完整。可以检查网络连接,重新下载并初始化 gcloud SDK。
#### 5.2.2 GKE 集群创建失败
可能是参数设置不正确或权限不足。检查创建集群的命令参数是否正确,同时确保账户有足够的权限创建集群。
### 5.3 Microsoft Azure 相关问题
#### 5.3.1 az CLI 安装失败
可能是依赖安装不完整或网络问题。检查依赖是否安装完整,重新下载并安装 az CLI。
#### 5.3.2 AKS 集群创建失败
可能是服务主体配置不正确或资源不足。检查服务主体的 appId 和 password 是否正确,同时查看 Azure 控制台的资源使用情况。
## 6. 总结与建议
### 6.1 总结
本文全面介绍了在 AWS、Google Cloud Platform 和 Microsoft Azure 上构建生产就绪的 Kubernetes 集群的详细步骤,包括各个云平台的准备工作、命令行工具安装、集群创建、连接以及常见问题解决方法等。通过对比分析,我们了解了不同云平台在资源管理、集群创建速度和操作复杂度等方面的差异。
### 6.2 建议
如果对集群创建速度有较高要求,且操作希望相对简洁,可以选择 Microsoft Azure。如果需要强大的存储功能和丰富的 AWS 服务集成,AWS 是一个不错的选择。如果对 GCP 的服务比较熟悉,且希望使用托管的 Kubernetes 服务,Google Cloud Platform 是一个很好的平台。
以下是常见问题及解决方法的总结表格:
| 云平台 | 常见问题 | 解决方法 |
| --- | --- | --- |
| AWS | S3 桶创建失败 | 检查区域设置和账户权限 |
| AWS | EKS 集群创建超时 | 检查网络连接和资源使用情况 |
| Google Cloud Platform | gcloud 初始化失败 | 检查网络连接,重新下载并初始化 |
| Google Cloud Platform | GKE 集群创建失败 | 检查参数设置和账户权限 |
| Microsoft Azure | az CLI 安装失败 | 检查依赖安装和网络连接 |
| Microsoft Azure | AKS 集群创建失败 | 检查服务主体配置和资源使用情况 |
以下是解决常见问题的流程图:
```mermaid
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke - width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke - width:2px
A([遇到问题]):::startend --> B{问题类型}:::process
B --> C[AWS 问题]:::process
B --> D[Google Cloud Platform 问题]:::process
B --> E[Microsoft Azure 问题]:::process
C --> C1(检查区域和权限):::process
C1 --> C2(检查网络和资源):::process
C2 --> C3(解决问题):::process
D --> D1(检查网络连接):::process
D1 --> D2(检查参数和权限):::process
D2 --> D3(解决问题):::process
E --> E1(检查依赖和网络):::process
E1 --> E2(检查服务主体和资源):::process
E2 --> E3(解决问题):::process
C3 --> F([问题解决]):::startend
D3 --> F
E3 --> F
```
0
0
复制全文
相关推荐









