在 AKS 部署您的 K8S Cluster

随着应用程序开发向基于容器的方法发展,安排和管理资源的需求变得很重要。 Kubernetes 是提供可靠的容错应用程序工作负荷计划能力的领先平台。 Azure Kubernetes 服务 (AKS) 是一种托管 Kubernetes 产品/服务,可进一步简化基于容器的应用程序部署和管理。本文介绍了 Kubernetes 核心基础结构组件,以及如何快速的建立 K8S Cluster on AKS。

[toc]

本文关键章节

在 AKS 部署您的 K8S Cluster

  1. 什么是 Kubernetes?
  2. Kubernetes 关键概览
  • Kubernetes 群集体系结构
  • 控制面板
  • 节点和节点池
  1. 在 AKS 部署您的 K8S Cluster
  2. 对 AKS上的K8S Cluster 进行管理

1. 什么是 Kubernetes?

Kubernetes 是一个快速发展的平台,用于管理基于容器的应用程序及其相关网络和存储组件。 重点关注应用程序工作负荷,而不是底层基础结构组件。 Kubernetes 提供了一种声明性的部署方法,由一组针对管理操作的强大 API 提供支持。
你可以生成和运行可移植的、基于微服务的现代应用程序,这些应用程序可通过 Kubernetes 安排和管理这些应用程序组件的可用性而受益。 由于团队通过采用基于微服务的应用程序而取得进展,因此 Kubernetes 支持无状态和有状态应用程序。
作为开放平台,Kubernetes 可使用首选的编程语言、OS、库或消息总线生成应用程序。 现有的持续集成和持续交付 (CI/CD) 工具可以与 Kubernetes 集成,以计划和部署版本。
Azure Kubernetes 服务 (AKS) 提供托管 Kubernetes 服务,可简化部署和核心管理任务,包括协调升级。 AKS 控制平面由 Azure 平台托管,你只需为运行应用程序的 AKS 节点付费。 AKS 建立在开放源代码 Azure Kubernetes 服务引擎 (aks-engine) 的基础之上。

2.Kubernetes 关键概览

2.1Kubernetes 群集体系结构

Kubernetes 群集分为两个组件:
控制平面节点提供 Kubernetes 核心服务和应用程序工作负载的业务流程。
节点运行应用程序工作负荷。

2.2 控制面板

创建 AKS 群集时,系统会自动创建和配置控制平面。 并将此控制平面作为提取自用户的 Azure 托管资源提供。 控制平面不产生费用,仅属于 AKS 群集的节点产生费用。 控制平面及其资源仅驻留在创建群集的区域。
控制平面包括以下 Kubernetes 核心组件:
kube-apiserver - API 服务器,用于公开基础 Kubernetes API。 此组件为管理工具(如 kubectl 或 Kubernetes 仪表板)提供交互。
etcd - 可维护 Kubernetes 群集和配置的状态,高可用性 etcd 是 Kubernetes 中的键值存储。
kube-scheduler - 创建或缩放应用程序时,计划程序可确定哪些节点可以运行工作负荷并启动这些节点。
kube-controller-manager - 控制器管理器可监视许多较小的控制器,这些控制器执行 Pod 复制和节点处理等操作。
AKS 提供单租户控制平面、专用 API 服务器、计划程序等。你定义节点的数量和大小,Azure 平台配置控制平面和节点之间的安全通信。 通过 Kubernetes API(例如 kubectl 或 Kubernetes 仪表板)与控制平面进行交互。
这种托管控制平面意味着无需配置高可用性 etcd 存储等组件,但也意味着无法直接访问控制平面。 通过 Azure CLI 或 Azure 门户安排 Kubernetes 升级,先升级控制平面,再升级节点。 要解决可能出现的问题,可以通过 Azure Monitor 日志查看控制平面日志。
如果需要以特定方式配置控制平面或直接访问它,可以使用 aks-engine 部署自己的 Kubernetes 群集。
如需相关的最佳做法,请参阅 AKS 中群集安全性和升级的最佳做法。

2.3 节点和节点池

要运行应用程序和支持服务,需要 Kubernetes 节点。 一个 AKS 群集有一个或多个节点,这是运行 Kubernetes 节点组件和容器运行时的 Azure 虚拟机 (VM):
kubelet 是 Kubernetes 代理,用于处理来自控制平面的业务流程请求并计划运行请求的容器。
虚拟网络由每个节点上的 kube-proxy 处理。 代理路由流量并管理服务和 Pod 的 IP 地址。
容器运行时是允许容器化应用程序运行并与其他资源(如虚拟网络和存储)进行交互的组件。 在 AKS 中,Moby 用作容器运行时。

节点的 Azure VM 大小定义了 CPU 数量、内存大小以及可用存储的大小和类型(如高性能 SSD 或常规 HDD)。 如果预计需要大量 CPU 和内存或高性能存储的应用程序,则相应地规划节点大小。 还可以根据需要横向扩展 AKS 群集中的节点数。
在 AKS 中,群集中节点的 VM 映像当前基于 Ubuntu Linux 或 Windows Server 2019。 创建 AKS 群集或横向扩展节点数时,Azure 平台会创建所请求数量的 VM 并对其进行配置。 无需执行手动配置。 代理节点按标准虚拟机计费,因此,你所使用的 VM 大小的任何折扣 (包括 Azure 预订) 会自动应用。
如果需要使用不同的主机 OS、容器运行时或包含自定义包,可以使用 aks-engine 部署自己的 Kubernetes 群集。 上游 aks-engine 正式在 AKS 群集中受支持之前会发布功能并提供配置选项。 例如,如果要使用 Moby 以外的容器运行时,可以使用 aks-engine 来配置和部署满足当前需求的 Kubernetes 群集。

3.在 AKS 部署您的 K8S Cluster

  1. 首先访问您的 Azure 门户, 选择 Kubernetes Service

  1. 选择 Add -> Add Kubernates Cluster

0oYTOg.png

为K8S Cluster 建立 Resource Pool,给出 k8s 资源组名称和集群名称。

0OqQVs.png

  1. 为K8S Cluster 建立 Resource Pool
  2. 配置 Node pool
    0OLhXF.png
  3. 配置认证,新建服务主体
    0OLo79.png
  4. 配置网络
    0OqexS.png
  5. 配置集成选项

0ObRNq.png

  1. 配置 Tag

0Ob3cD.png

  1. reviewe and cretae,将参数列表如下以供参考
'## Basics
Subscription
Pay-As-You-Go
Resource group
(new) akedemo
Region
Southeast Asia
Kubernetes cluster name
akedemocls
Kubernetes version
1.17.11

'## Node pools ##
Node pools
1
Enable virtual nodes
Enabled
Enable virtual machine scale sets
Enabled

'## Authentication ##
Authentication method
Service principal
Role-based access control (RBAC)
Enabled
AKS-managed Azure Active Directory
Disabled
Encryption type
(Default) Encryption at-rest with a platform-managed key

'## Networking ##
Network configuration
Azure CNI
Virtual network
(New) akedemo-vnet
Cluster subnet
(new) default
Virtual nodes subnet
(new) virtual-node-aci
Kubernetes service address range
10.0.0.0/16
Kubernetes DNS service IP address
10.0.0.10
Docker Bridge address
172.17.0.1/16
DNS name prefix
akedemocls-dns
Load balancer
Standard
Private cluster
Disabled
Authorized IP ranges
Disabled
Network policy
None
HTTP application routing
Yes

'## Integrations ##
Container registry
None
Container monitoring
Enabled
Log Analytics workspace
(new) DefaultWorkspace-9a355758-8597-4d5a-b420-578d8cd50e23-SEA
Azure Policy
Disabled

'## Tags ##
ake
akedemo
cluster
akedemocls

4. 对 AKS上的K8S Cluster 进行管理

  1. 我人需要一个 storage Account 来存储我们的 Azure Cloud Shell 的持久化内容

0Obm7R.png

  1. 出现如下的提示命令行就进入成功了
Requesting a Cloud Shell.Succeeded.
Connecting terminal...

Welcome to Azure Cloud Shell

Type "az" to use Azure CLI
Type "help" to learn about Cloud Shell

3.查看K8S群集收集,确认 Helm版本 及 Repo库

  • 查看及使用 subscription 信息
  • 查看 K8s Nodes与Deployments的状态
  • 查看 K8s Nodes与Deployments的状态
  • 查看 HELM 版本
'# 查看 subscription 信息
zhang@Azure:~$ az account list |grep id
    "id": "9a35XXXX-85XX-4dXX-b4XX-578d8cdXXXX"
zhang@Azure:~$ az account set --subscription 9a35XXXX-85XX-4dXX-b4XX-578d8cdXXXX
zhang@Azure:~$ az aks get-credentials --resource-group aksdemo --name aksdemocls
Merged "aksdemocls" as current context in /home/zhang/.kube/config

'# 查看 K8s Nodes与Deployments的状态
zhang@Azure:~$ kubectl get nodes
NAME                                STATUS   ROLES   AGE     VERSION
aks-agentpool-37951253-vmss000000   Ready    agent   6m47s   v1.16.13
aks-agentpool-37951253-vmss000001   Ready    agent   6m46s   v1.16.13
aks-agentpool-37951253-vmss000002   Ready    agent   6m43s   v1.16.13
virtual-node-aci-linux              Ready    agent   6m22s   v1.14.3-vk-azure-aci-v1.2.1.1

zhang@Azure:~$ kubectl get deployments --all-namespaces=true
NAMESPACE     NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   aci-connector-linux         1/1     1            1           8m9s
kube-system   coredns                     5/5     5            5           8m9s
kube-system   coredns-autoscaler          1/1     1            1           8m9s
kube-system   dashboard-metrics-scraper   1/1     1            1           8m4s
kube-system   kubernetes-dashboard        1/1     1            1           8m4s
kube-system   metrics-server              1/1     1            1           8m9s
kube-system   omsagent-rs                 1/1     1            1           8m9s
kube-system   tunnelfront                 1/1     1            1           8m9s
    
'# 查看 Helm 版本
zhang@Azure:~$ helm version
version.BuildInfo{Version:"v3.3.0-rc.1", GitCommit:"5c2dfaad847df2ac8f289d278186d048f446c70c", GitTreeState:"dirty", GoVersion:"go1.14.4"}

标签: none

添加新评论