在 AKS 部署您的 K8S Cluster
随着应用程序开发向基于容器的方法发展,安排和管理资源的需求变得很重要。 Kubernetes 是提供可靠的容错应用程序工作负荷计划能力的领先平台。 Azure Kubernetes 服务 (AKS) 是一种托管 Kubernetes 产品/服务,可进一步简化基于容器的应用程序部署和管理。本文介绍了 Kubernetes 核心基础结构组件,以及如何快速的建立 K8S Cluster on AKS。
[toc]
本文关键章节
在 AKS 部署您的 K8S Cluster
- 什么是 Kubernetes?
- Kubernetes 关键概览
- Kubernetes 群集体系结构
- 控制面板
- 节点和节点池
- 在 AKS 部署您的 K8S Cluster
- 对 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
- 首先访问您的 Azure 门户, 选择 Kubernetes Service
- 选择 Add -> Add Kubernates Cluster
为K8S Cluster 建立 Resource Pool,给出 k8s 资源组名称和集群名称。
-
为K8S Cluster 建立 Resource Pool
-
配置 Node pool
-
配置认证,新建服务主体
-
配置网络
-
配置集成选项
- 配置 Tag
- 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 进行管理
- 我人需要一个 storage Account 来存储我们的 Azure Cloud Shell 的持久化内容
- 出现如下的提示命令行就进入成功了
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"}