30、在GCP和Azure上使用Kubernetes的指南

在GCP和Azure上使用Kubernetes的指南

1. GCP上的Kubernetes
1.1 多区域集群

GKE支持多区域集群,允许在同一区域的多个区域中启动Kubernetes节点。之前的示例中,Kubernetes节点仅在 asia-northeast1-a 区域配置,现在重新配置一个包含 asia-northeast1-a asia-northeast1-b asia-northeast1-c 三个区域的集群。操作步骤如下:
1. 删除之前的集群:

$ gcloud container clusters delete my-k8s-cluster --zone asia-northeast1-a

按照提示输入 y 确认删除。
2. 创建新的多区域集群,每个区域有2个节点:

$ gcloud container clusters create my-k8s-cluster --machine-type f1-micro -num-nodes 2 --network my-custom-network --subnetwork subnet-c --tags private --zone asia-northeast1-a --node-locations asia-northeast1-a,asia-northeast1-b,asia-northeast1-c
  1. 查看新添加的节点:
$ kubectl get nodes

输出如下:
| NAME | STATUS | ROLES | AGE | VERSION |
| — | — | — | — | — |
| gke-my-k8s-cluster-default-pool-58e4e9a4-74hc | Ready | | 43s | v1.10.9-gke.5 |
| gke-my-k8s-cluster-default-pool-58e4e9a4-8jft | Ready | | 1m | v1.10.9-gke.5 |
| gke-my-k8s-cluster-default-pool-f7baf2e1-lk7j | Ready | | 1m | v1.10.9-gke.5 |
| gke-my-k8s-cluster-default-pool-f7baf2e1-zktg | Ready | | 1m | v1.10.9-gke.5 |
| gke-my-k8s-cluster-default-pool-fa5a04a5-bbj5 | Ready | | 1m | v1.10.9-gke.5 |
| gke-my-k8s-cluster-default-pool-fa5a04a5-d35z | Ready | | 1m | v1.10.9-gke.5 |

可以使用 failure-domain.beta.kubernetes.io/zone Kubernetes标签区分节点区域,以便指定所需的区域来部署Pod。

1.2 集群升级

Kubernetes项目更新频繁,大约每三个月发布一个新版本。GKE会及时添加对新版本的支持,可以通过 gcloud 命令升级主节点和工作节点。
1. 查看GKE支持的Kubernetes版本:

$ gcloud container get-server-config

部分输出示例:

defaultClusterVersion: 1.10.9-gke.5
defaultImageType: COS
validImageTypes:
- COS_CONTAINERD
- COS
- UBUNTU
validMasterVersions:
- 1.11.4-gke.8
- 1.11.3-gke.18
- 1.11.2-gke.20
...
validNodeVersions:
- 1.11.4-gke.8
- 1.11.3-gke.18
- 1.11.2-gke.20
...
  1. 升级主节点到 1.11.4-gke.8
$ gcloud container clusters upgrade my-k8s-cluster --zone asia-northeast1-a --cluster-version 1.11.4-gke.8 --master

按照提示输入 y 确认升级,升级大约需要10分钟。
3. 验证主节点版本:

$ gcloud container clusters list --zone asia-northeast1-a

输出示例:
| NAME | LOCATION | MASTER_VERSION | MASTER_IP | MACHINE_TYPE | NODE_VERSION | NUM_NODES | STATUS |
| — | — | — | — | — | — | — | — |
| my-k8s-cluster | asia-northeast1-a | 1.11.4-gke.8 | 35.243.78.166 | f1-micro | 1.10.9-gke.5 * | 6 | RUNNING |
4. 升级所有节点到 1.11.4-gke.8

$ gcloud container clusters upgrade my-k8s-cluster --zone asia-northeast1-a --cluster-version 1.11.4-gke.8

按照提示输入 y 确认升级。GKE会进行滚动升级,每个节点依次执行以下步骤:

graph LR
    A[从集群中注销目标节点] --> B[删除旧的VM实例]
    B --> C[配置新的VM实例]
    C --> D[使用1.11.4-gke.8版本设置节点]
    D --> E[注册到主节点]
1.3 Kubernetes云提供商

GKE集成了Kubernetes云提供商,与GCP基础设施深度集成,如VPC路由的覆盖网络、持久磁盘的StorageClass和L4负载均衡器的服务。

1.3.1 StorageClass

GKE默认设置了StorageClass,使用持久磁盘:
1. 查看StorageClass:

$ kubectl get storageclass

输出:

NAME                 TYPE
standard (default)   kubernetes.io/gce-pd
  1. 描述默认的StorageClass:
$ kubectl describe storageclass standard

输出:

Name:                  standard
IsDefaultClass:        Yes
Annotations:           storageclass.beta.kubernetes.io/is-default-class=true
Provisioner:           kubernetes.io/gce-pd
Parameters:            type=pd-standard
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     Immediate
Events:                <none>
  1. 创建持久卷声明:
$ cat pvc-gke.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: pvc-gke-1
spec:
  storageClassName: "standard"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
$ kubectl create -f pvc-gke.yml
  1. 查看持久卷:
$ kubectl get pv

输出示例:

NAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM               STORAGECLASS   REASON    AGE
pvc-bc04e717-8c82-11e7-968d-42010a920fc3   10Gi       RWO           Delete          Bound     default/pvc-gke-1   standard                 2s
  1. 通过 gcloud 命令查看:
$ gcloud compute disks list

输出示例:

NAME                                                             ZONE             SIZE_GB  TYPE         STATUS
gke-my-k8s-cluster-d2e-pvc-bc04e717-8c82-11e7-968d-42010a920fc3  asia-northeast1-a  10       pd-standard  READY
1.3.2 L4负载均衡器

GKE支持为Kubernetes服务使用L4负载均衡器,只需将 Service.spec.type 指定为 LoadBalancer ,GKE会自动设置和配置L4负载均衡器。
1. 部署带有负载均衡器服务的Grafana:

$ cat grafana.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      project: devops-with-kubernetes
      app: grafana
  template:
    metadata:
      labels:
        project: devops-with-kubernetes
        app: grafana
    spec:
     containers:
       - image: grafana/grafana
         name: grafana
         ports:
          - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  ports:
    - port: 80
      targetPort: 3000
  type: LoadBalancer
  selector:
    project: devops-with-kubernetes
    app: grafana
$ kubectl create -f grafana.yml
  1. 查看L4负载均衡器的IP地址:
$ kubectl get svc grafana

输出示例:

NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
grafana   LoadBalancer   10.59.244.97   35.243.118.88   80:31213/TCP   1m
  1. 测试访问:
$ curl -I 35.243.118.88

输出示例:

HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: /login
Set-Cookie: grafana_sess=186d81bd66d150d5; Path=/; HttpOnly
Set-Cookie: redirect_to=%252F; Path=/; HttpOnly
Date: Sun, 09 Dec 2018 02:25:48 GMT
1.3.3 L7负载均衡器(Ingress)

GKE支持Kubernetes Ingress,可以根据URL将HTTP请求分发到目标服务。
1. 创建使用NodePort服务的Nginx和Tomcat示例:
目前无法直接从互联网访问Kubernetes服务,因为没有允许访问的防火墙规则。可以使用以下命令通过Kubernetes API服务器访问Pod:

$ kubectl port-forward tomcat-670632475-l6h8q 10080:8080

然后在浏览器中打开 http://localhost:10080/ 访问Tomcat Pod。
2. 创建Ingress规则:

$ cat nginx-tomcat-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-tomcat-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80
      - path: /examples
        backend:
          serviceName: tomcat
          servicePort: 8080
      - path: /examples/*
        backend:
          serviceName: tomcat
          servicePort: 8080
$ kubectl create -f nginx-tomcat-ingress.yaml
  1. 等待约10 - 15分钟完成GCP组件配置:
$ kubectl get ing

输出示例:

NAME                   HOSTS     ADDRESS           PORTS     AGE
nginx-tomcat-ingress   *         107.178.253.174   80        1m
  1. 使用静态IP地址:
$ gcloud compute addresses create my-nginx-tomcat --global
$ gcloud compute addresses list

输出示例:

NAME             REGION  ADDRESS         STATUS
my-nginx-tomcat          35.186.227.252  IN_USE

修改Ingress配置:

$ cat nginx-tomcat-static-ip-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-tomcat-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-nginx-tomcat
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80
      - path: /examples
        backend:
          serviceName: tomcat
          servicePort: 8080
      - path: /examples/*
        backend:
          serviceName: tomcat
          servicePort: 8080
$ kubectl apply -f nginx-tomcat-static-ip-ingress.yaml
$ kubectl get ing

输出示例:

NAME                   HOSTS     ADDRESS          PORTS     AGE
nginx-tomcat-ingress   *         35.186.227.252   80        48m

现在可以通过静态IP地址访问Ingress,如 http://35.186.227.252/ (Nginx)和 http://35.186.227.252/examples/ (Tomcat)。

2. Azure上的Kubernetes
2.1 Azure简介

Microsoft Azure提供平台即服务(PaaS),用户可以将应用程序部署到Azure应用服务,无需了解详细设置和VM管理。自2010年以来,Azure为许多用户提供Microsoft软件和第三方软件。每个Azure服务提供不同的定价层,也称为SKU。

Azure Kubernetes Service(AKS)于2017年推出,是对原Azure容器服务(ACS)的新支持。作为Kubernetes云提供商,AKS提供一些原生支持,如用于RBAC的Azure活动目录、用于存储类的Azure磁盘、用于服务的Azure负载均衡器和用于Ingress的HTTP应用程序路由。

2.2 资源组

Azure中的资源组是一组代表逻辑组的资源,可以一次性部署和删除组内的所有资源。Azure资源管理器可帮助管理资源组,Azure还提供资源管理器模板(JSON格式文件),定义所需资源的配置和依赖关系,用户可以将模板重复一致地部署到多个资源组。

操作步骤如下:
1. 注册Azure免费账户:访问 Azure门户 注册,可获得12个月的流行免费服务和30天的200美元信用额度。
2. 登录后,点击侧边栏的“Create a resource”,选择Web app,输入应用名称。
3. 创建资源时,指定资源组,可选择使用现有资源组或创建新的资源组。
4. 根据需要更改运行时堆栈。
5. 点击页面底部“Create”旁边的“Automation options”,可自动创建资源模板。点击“Deploy”会显示模板定义的自定义参数,这里直接点击“Create”。
6. 创建完成后,在“Recent resources”标签下找到新创建的资源组,如 devops-app
7. 点击资源组可进入应用服务控制台,这是Azure的PaaS服务。
8. 访问指定URL(如 https://devops-app.azurewebsites.net/ )可查看部署的示例Web应用。
9. 还可以上传自己的Web应用,或与版本控制软件(如GitHub或Bitbucket)集成,使用Azure构建整个管道。更多信息可访问 部署中心页面
10. 在“Resource groups”控制台可以轻松删除资源组。

综上所述,GCP和Azure都为Kubernetes提供了强大的支持,用户可以根据自己的需求和偏好选择合适的云平台。在GCP上,Kubernetes集群和节点管理易于安装和升级,云提供商与GCP深度集成;在Azure上,AKS让用户无需担心底层基础设施,方便管理、部署和扩展容器化应用。

2.3 设置AKS

在Azure上设置AKS集群,需要完成一系列步骤,下面将详细介绍:
1. 安装Azure CLI
首先,需要在本地环境中安装Azure CLI,以便通过命令行与Azure进行交互。可以根据不同的操作系统,按照官方文档的指引进行安装。
2. 登录Azure账户
安装完成后,打开终端,运行以下命令登录Azure账户:
bash az login
执行该命令后,会在浏览器中打开登录页面,按照提示完成登录操作。
3. 创建资源组
为AKS集群创建一个资源组,资源组是对Azure资源进行逻辑分组的容器。使用以下命令创建资源组,其中 myResourceGroup 是资源组的名称, eastus 是资源组所在的区域:
bash az group create --name myResourceGroup --location eastus
4. 创建AKS集群
使用以下命令创建AKS集群,其中 myAKSCluster 是集群的名称, --node-count 3 表示创建3个节点:
bash az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3 --generate-ssh-keys
该命令会自动生成SSH密钥,用于与节点进行通信。创建过程可能需要一些时间。
5. 配置kubectl
创建完成后,需要配置 kubectl 工具,使其能够与AKS集群进行交互。运行以下命令:
bash az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
执行该命令后, kubectl 会被配置为使用新创建的AKS集群。
6. 验证集群
最后,通过以下命令验证集群是否正常运行:
bash kubectl get nodes
如果一切正常,会显示集群中的节点信息。

以下是设置AKS的步骤总结表格:
| 步骤 | 操作 | 命令示例 |
| — | — | — |
| 1 | 安装Azure CLI | 参考官方文档安装 |
| 2 | 登录Azure账户 | az login |
| 3 | 创建资源组 | az group create --name myResourceGroup --location eastus |
| 4 | 创建AKS集群 | az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3 --generate-ssh-keys |
| 5 | 配置kubectl | az aks get-credentials --resource-group myResourceGroup --name myAKSCluster |
| 6 | 验证集群 | kubectl get nodes |

2.4 Azure云提供商

AKS作为Kubernetes云提供商,与Azure的基础设施紧密集成,提供了多种功能,以下是一些主要的集成功能介绍:
- Azure磁盘存储类
AKS支持使用Azure磁盘作为Kubernetes的存储类。可以通过创建存储类对象来定义磁盘的属性,例如磁盘类型、大小等。以下是一个创建存储类的示例:
yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azure-disk provisioner: kubernetes.io/azure-disk parameters: skuName: Standard_LRS location: eastus
将上述内容保存为 azure-disk-storageclass.yaml 文件,然后使用以下命令创建存储类:
bash kubectl create -f azure-disk-storageclass.yaml
- Azure负载均衡器
当在AKS中创建Kubernetes服务时,如果将服务类型设置为 LoadBalancer ,Azure会自动创建一个负载均衡器来对外暴露服务。例如,以下是一个创建带有负载均衡器的服务的示例:
yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer
将上述内容保存为 my-service.yaml 文件,然后使用以下命令创建服务:
bash kubectl create -f my-service.yaml
创建完成后,Azure会自动分配一个公共IP地址给负载均衡器,可以通过该IP地址访问服务。
- Azure活动目录用于RBAC
AKS支持与Azure活动目录(Azure AD)集成,用于实现基于角色的访问控制(RBAC)。可以通过配置Azure AD来管理用户和角色,从而精细地控制对Kubernetes集群的访问权限。具体的配置步骤较为复杂,需要参考Azure官方文档进行操作。

通过以上功能,AKS为用户提供了便捷的方式来管理Kubernetes集群,并与Azure的其他服务进行集成。

3. 总结

本文详细介绍了在GCP和Azure上使用Kubernetes的相关内容。在GCP方面,GKE提供了强大的功能,多区域集群允许在同一区域的多个区域部署节点,提高了集群的可用性和容错性。集群升级通过 gcloud 命令可以方便地完成主节点和工作节点的升级。Kubernetes云提供商与GCP基础设施深度集成,如StorageClass使用持久磁盘、L4和L7负载均衡器的配置等,简化了应用的部署和管理。

在Azure方面,Azure提供了平台即服务(PaaS),AKS作为Azure的Kubernetes服务,使用户无需担心底层基础设施,能够轻松管理、部署和扩展容器化应用。资源组的概念方便了资源的管理和部署,同时AKS与Azure的其他服务(如Azure磁盘、负载均衡器、Azure活动目录)紧密集成,提供了丰富的功能。

以下是GCP和Azure在Kubernetes使用方面的对比表格:
| 对比项 | GCP | Azure |
| — | — | — |
| 集群管理 | 集群和节点管理易于安装和升级 | 用户无需担心底层基础设施,方便管理、部署和扩展 |
| 云提供商集成 | 与GCP深度集成,如L7负载均衡器配置简单 | 与Azure基础设施紧密集成,提供多种功能 |
| 定价 | 有不同的定价策略 | 提供不同的定价层(SKU) |

总的来说,GCP和Azure都为Kubernetes提供了优秀的支持,用户可以根据自身的需求、预算和技术栈等因素,选择适合自己的云平台来运行Kubernetes应用。无论是对于小型项目还是大型企业级应用,这两个云平台都能提供可靠的解决方案。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([选择云平台]):::startend --> B{选择GCP还是Azure}:::decision
    B -->|GCP| C(创建多区域集群):::process
    B -->|Azure| D(创建AKS集群):::process
    C --> E(集群升级):::process
    C --> F(使用云提供商功能):::process
    D --> G(配置资源组):::process
    D --> H(使用Azure云提供商功能):::process
    E --> I([完成GCP上Kubernetes部署]):::startend
    F --> I
    G --> J([完成Azure上Kubernetes部署]):::startend
    H --> J

这个流程图展示了在选择云平台(GCP或Azure)后,分别进行Kubernetes集群创建、升级和使用云提供商功能的过程,最终完成Kubernetes的部署。

内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值