如何实现AKS群集部署及挂载共享存储

如何实现AKS(Azure Kubernetes Service)

群集部署及挂载共享存储

目录

Azure Kubernetes Service 服务 1

群集的部署运行与监控 1

背景需求 3

解决方案 3

产品介绍&基本概念 3

介绍以下内容(基本概念) 3

方案验证 4

1.创建 AKS 群集 4

2.安装Azure CLI 并成功连接到Azure 6

3.连接到群集 9

4.运行应用程序 10

5.测试应用程序 12

6.监视运行状况和日志 13

收益 15

实战应用 15

部署应用及挂载共享存储 15

背景需求

迁移现有应用程序

概述

轻松地将现有应用程序迁移到容器,并在 Azure 托管 Kubernetes 服务 (AKS) 中运行。

1 用户可将现有应用程序转换为容器,还可将容器映像发布到 Azure 容器注册表

2 借助 Azure 门户或命令行,用户可将容器部署到 AKS 群集

解决方案

解决方案介绍:

  • 使用 Azure 门户部署并连接到 AKS 群集。

  • 在该群集中运行一个包含 Web 前端和 Redis 实例的多容器应用程序。

  • 监视运行应用程序的群集和 Pod 的运行状况。

**Kubernetes 群集体系结构:**Kubernetes 群集分为两个组件:

  • 控制平面:提供 Kubernetes 核心服务和应用程序工作负载的业务流程。

  • 节点:运行应用程序工作负载。

在这里插入图片描述

产品介绍&基本概念

Azure Kubernetes 服务 (AKS) 是一种托管 Kubernetes
产品/服务,可进一步简化基于容器的应用程序部署和管理,降低部署和核心管理任务(例如升级协调)的复杂性。作为一个托管的
Kubernetes 服务,Azure 可以自动处理运行状况监视和维护等关键任务。-

Azure Kubernetes
Service(AKS)是Azure推出的开源容器与平台服务。Kubernetes是当下火热的容器市场的关注热点,AKS是Azure容器生态的核心产品服务。

介绍以下内容(基本概念)

核心 Kubernetes 基础结构组件:

控制平面

节点

节点池

工作负载资源:

Pod

部署

控制面板

创建 AKS 群集时,系统会自动创建和配置控制平面。

节点

要运行应用程序和支持服务,需要 Kubernetes 节点。 一个 AKS
群集至少有一个节点,这是运行 Kubernetes 节点组件和容器运行时的 Azure 虚拟机
(VM)。

节点池

具有相同配置的节点将统一合并成节点池。 一个 Kubernetes 群集至少包含一个节点池。
创建 AKS 群集时会定义初始节点数和大小,从而创建默认节点池。 AKS
中的此默认节点池包含运行代理节点的基础 VM。

Pod

Kubernetes 使用 Pod 来运行应用程序的实例。 Pod 表示应用程序的单个实例。

Pod 通常与容器是一对一映射关系。 在高级方案中,一个 Pod 可能包含多个容器。
多容器 Pod 是在同一节点上共同计划的,容器可通过它们共享相关资源。

部署和 YAML 清单

部署表示由 Kubernetes 部署控制器管理的相同 Pod。 部署定义了要创建的 Pod
副本数量。 Kubernetes 计划程序可确保当 Pod
或节点遇到问题时,在正常节点上计划其他 Pod。

方案验证

https://portal.azure.cn 中登录 Azure 门户,

1.创建 AKS 群集

在搜索框 键入 “Kubernetes 服务”,点击Kubernetes 服务,选择“创建”

在这里插入图片描述

在“基本信息”页面上,配置以下选项:

项目详细信息

选择一个 Azure 订阅。

选择或创建一个 Azure 资源组,例如 SinoK8S-RG

群集详细信息

输入 Kubernetes 群集名称,例如 SinoK8SCluster

选择 AKS 群集的“区域”为中国北部2和“Kubernetes 版本”默认即可 。

主节点池

为 AKS 节点选择 VM 节点大小。 一旦部署 AKS 群集,不能更改 VM 大小。

选择要部署到群集中的节点数。请将“节点计数”设置为“1”。
部署群集后,可以调整节点计数。

在这里插入图片描述

在这里插入图片描述

在完成时选择“下一步:节点池”。保留默认的“节点池”选项。
单击屏幕底部的“下一步:身份验证”。

创建新的群集标识:

在“身份验证”页上,配置以下选项:(补个图)

在“身份验证”字段中保留“系统分配的托管标识”。

启用 Kubernetes 基于角色的访问控制 (Kubernetes RBAC)
选项(以便更精细地控制对部署在 AKS 群集中的 Kubernetes 资源的访问权限)。

默认情况下将使用“基本”网络,并且会启用适用于容器的 Azure Monitor。

其余设置保留默认,验证完成后,依次单击“查看 + 创建”、“创建”。

创建 AKS 群集需要几分钟时间。
在这里插入图片描述

部署完成后,单击“转到资源”找到创建好的SinoK8SCluster:

下面显示了示例群集仪表板:

在这里插入图片描述

2.安装Azure CLI 并成功连接到Azure

导入 Microsoft 存储库密钥。

sudo rpm --import <https://packages.microsoft.com/keys/microsoft.asc>

在这里插入图片描述

创建本地 azure-cli 存储库信息,运行如下命令:

	sudo sh -c 'echo -e "[azure-cli]
	
	name=Azure CLI
	
	baseurl=https://packages.microsoft.com/yumrepos/azure-cli
	
	enabled=1
	
	gpgcheck=1
	
	gpgkey=https://packages.microsoft.com/keys/microsoft.asc" \>
	/etc/yum.repos.d/azure-cli.repo'

**sudo yum install azure-cli \#\#\#\#\#**使用 yum install 命令安装。

在这里插入图片描述

先运行 az cloud set -n AzureChinaCloud 更改云环境

登录,使用 az login 命令

如果 CLI 可以打开默认浏览器,它将这样做并加载 Azure 登录页。

否则,请在 https://aka.ms/devicelogin
处打开浏览器页,然后输入终端中显示的授权代码。如图:授权代码为FMP3QTUKZ。

在这里插入图片描述

输入完成后会出现你的中国区Azure账号,选中该账号后会如下图所示:

在这里插入图片描述

点击继续,成功连接到 Azure,见图:
在这里插入图片描述

3.连接到群集

使用 az aks get-credentials 命令将 kubectl 配置为连接到你的 Kubernetes 群集。
以下命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

**az aks get-credentials --admin --name SinoK8SCluster --resource-group  SinoK8S-RG**

在这里插入图片描述

使用 kubectl get 命令返回群集节点的列表,以此验证与群集之间的连接。

**kubectl get nodes**

输出显示在上一步骤中创建的单个节点。 确保节点状态为 Ready
,然后可
以进行运行应用程序步骤*~*

在这里插入图片描述

如果遇到输入kubectl get nodes命令返回结果:-bash: kubectl: command not
found的情况,

在这里插入图片描述

执行以下命令:

**yum install -y etcd kubernetts ntp flannel  \#\#\#\#\#\#**

**vim /etc/yum.repos.d/CentOS-Base.repo
\#\#\#\#\#\#**在/etc/yum.repos.d/目录下添加Kubernetes的yum源,在最后加入下面的信息,保存退出

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

**yum list kubectl –showduplicates

#####**查看可安装的版本,每个人的有所不同,我本机的输出信息如下

在这里插入图片描述

**yum -y install kubectl.x86_64 \#\#\#\#\#\#**安装提示信息中可安装的软件包

**最后再执行kubectl get nodes。**

4.运行应用程序

在本地 Shell 中,使用编辑器创建一个名为 azure-vote.yaml 的文件

复制以下 YAML 定义:

apiVersion: apps/v1

kind: Deployment

metadata:

name: azure-vote-back

spec:

replicas: 1

selector:

matchLabels:

app: azure-vote-back

template:

metadata:

labels:

app: azure-vote-back

spec:

nodeSelector:

"beta.kubernetes.io/os": linux

containers:

\- name: azure-vote-back

image: mcr.microsoft.com/oss/bitnami/redis:6.0.8

env:

\- name: ALLOW_EMPTY_PASSWORD

value: "yes"

resources:

requests:

cpu: 100m

memory: 128Mi

limits:

cpu: 250m

memory: 256Mi

ports:

\- containerPort: 6379

name: redis

\---

apiVersion: v1

kind: Service

metadata:

name: azure-vote-back

spec:

ports:

\- port: 6379

selector:

app: azure-vote-back

\---

apiVersion: apps/v1

kind: Deployment

metadata:

name: azure-vote-front

spec:

replicas: 1

selector:

matchLabels:

app: azure-vote-front

template:

metadata:

labels:

app: azure-vote-front

spec:

nodeSelector:

"beta.kubernetes.io/os": linux

containers:

\- name: azure-vote-front

image: mcr.microsoft.com/azuredocs/azure-vote-front:v1

resources:

requests:

cpu: 100m

memory: 128Mi

limits:

cpu: 250m

memory: 256Mi

ports:

\- containerPort: 80

env:

\- name: REDIS

value: "azure-vote-back"

\---

apiVersion: v1

kind: Service

metadata:

name: azure-vote-front

spec:

type: LoadBalancer

ports:

\- port: 80

selector:

app: azure-vote-front

使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称:

kubectl apply -f azure-vote.yaml

输出显示已成功创建的部署和服务:

在这里插入图片描述

5.测试应用程序

应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。
此过程可能需要几分钟才能完成。

若要监视进度,运行如下命令:

kubectl get service azure-vote-front –watch

azure-vote-front 服务的 EXTERNAL-IP 输出最初显示为 pending。在
EXTERNAL-IP 地址从 pending 更改为实际公共 IP 地址后,请使用 CTRL-C 来停止
kubectl 监视进程。 以下输出显示向服务分配了有效的公共 IP 地址:

在这里插入图片描述

若要查看 Azure Vote 应用的实际效果,打开 Web 浏览器并输入服务的外部 IP 地址

在这里插入图片描述

6.监视运行状况和日志

【说明】创建群集后,适用于容器的 Azure Monitor 便已启用。 用于容器的 Azure
Monitor 提供 AKS 群集以及该群集上运行的 Pod 的运行状况指标。

指标数据需在几分钟后才会填充到 Azure 门户中。 若要查看 Azure Vote Pod
的当前运行状况、运行时间和资源使用情况:

浏览回到 Azure 门户中的 AKS 资源。在左侧的“监视”下,选择“见解”。

在这里插入图片描述

在顶部选择“+ 添加筛选器”。选择“命名空间”作为属性,然后选择 <All but
kube-system>
。选择“容器”以查看容器。

将显示 azure-vote-back 和 azure-vote-front 容器,如以下示例中所示:

在这里插入图片描述

若要查看 azure-vote-front Pod 的日志,请从容器下拉列表中选择“查看容器日志”。
这些日志包括容器中的 stdoutstderr 流。

在这里插入图片描述

在这里插入图片描述

收益

使用容器服务的解决了成本和效率问题。IT资产的巨额浪费问题得到解决。

实战应用

部署应用及挂载共享存储

添加资源组

az group create --name yz-TechnologyCarnival --location chinanorth2
在这里插入图片描述

创建容器注册表

az acr login --name sinoage
在这里插入图片描述

登录容器注册表
在这里插入图片描述

推送镜像

docker push sinoage.azurecr.cn/nginx
docker push sinoage.azurecr.cn/mysql
在这里插入图片描述

查看容器注册表中的镜像

az acr repository list --name sinoage --output table
在这里插入图片描述
<span style=“color: #171717”>创建服务主体</span>
az ad sp create-for-rbac --skip-assignment
root@docker:/yaml# az ad sp create-for-rbac --skip-assignment
{
“appId”: “15ff0340-ebbc-406c-ada3-2b0af6fe80be”,
“displayName”: “azure-cli-2019-10-08-07-37-49”,
“name”: “http://azure-cli-2019-10-08-07-37-49”,
“password”: “134e9239-043f-4919-82d2-ca780231b0b8”,
“tenant”: “113aef27-55c0-4536-9576-bd8c6a7846d3”
}
在这里插入图片描述

查看ACRID

az acr show --resource-group yz-TechnologyCarnival --name sinoage --query “id”
–output tsv
在这里插入图片描述

配置 ACR 身份验证

az role assignment create --assignee 15ff0340-ebbc-406c-ada3-2b0af6fe80be
–scope
/subscriptions/6b3fe200-d158-4f43-a320-ccb6bb97af0f/resourceGroups/yz-TechnologyCarnival/providers/Microsoft.ContainerRegistry/registries/sinoage
–role acrpull
在这里插入图片描述

创建 Kubernetes 群集

在这里插入图片描述
root@docker:/yaml# az aks create \
> --resource-group yz-TechnologyCarnival \
> --name sinoageAKSCluster \
> --node-count 1 \
> --service-principal 15ff0340-ebbc-406c-ada3-2b0af6fe80be \
> --client-secret 134e9239-043f-4919-82d2-ca780231b0b8 \
> --generate-ssh-keys
{
“aadProfile”: null,
“addonProfiles”: null,
“agentPoolProfiles”: [
{
“availabilityZones”: null,
“count”: 1,
“enableAutoScaling”: null,
“enableNodePublicIp”: false,
“maxCount”: null,
“maxPods”: 110,
“minCount”: null,
“name”: “nodepool1”,
“nodeTaints”: null,
“orchestratorVersion”: “1.13.10”,
“osDiskSizeGb”: 100,
“osType”: “Linux”,
“provisioningState”: “Succeeded”,
“scaleSetEvictionPolicy”: null,
“scaleSetPriority”: null,
“type”: “AvailabilitySet”,
“vmSize”: “Standard_DS2_v2”,
“vnetSubnetId”: null
}
],
“apiServerAccessProfile”: null,
“dnsPrefix”: “sinoageAKS-yz-TechnologyCar-6b3fe2”,
“enablePodSecurityPolicy”: null,
“enableRbac”: true,
“fqdn”:
“sinoageaks-yz-technologycar-6b3fe2-ca3a87ea.hcp.chinanorth2.cx.prod.service.azk8s.cn”,
“id”:
“/subscriptions/6b3fe200-d158-4f43-a320-ccb6bb97af0f/resourcegroups/yz-TechnologyCarnival/providers/Microsoft.ContainerService/managedClusters/sinoageAKSCluster”,
“identity”: null,
“kubernetesVersion”: “1.13.10”,
“linuxProfile”: {
“adminUsername”: “azureuser”,
“ssh”: {
“publicKeys”: [
{
“keyData”: “ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDfv7ywVcCC4OT6e08zXN9//0PVBSFsl+QZuFjY7zTbEPvYpn4ZvVVAjLNbtN00rDsuYT4/mWW9ly69fa/7KAWrkuGhXs0N2IDDUXdio+2LOpLJv86cFHRcG31SB3YZH8AUWlbxahRrHyHXIQEYX/bPUalfZRMnjrFT0bzDFWGosWLYvblVpWnlgCJPBZTx3oGOX7euhAO1JDMHTrmK5fQrXHJSKwgzgZR0MiDB5SMinlJtxYmT/JVHYnPGwTGfJHBtjMIR2U/wvFhU+m4fDV00mrcVjuw1cgpmNuKXsOiVxSrh+UNfjOieqv86M39laxDPRxANwl+lxfrpKRVRith5”
}
]
}
},
“location”: “chinanorth2”,
“maxAgentPools”: 1,
“name”: “sinoageAKSCluster”,
“networkProfile”: {
“dnsServiceIp”: “10.0.0.10”,
“dockerBridgeCidr”: “172.17.0.1/16”,
“loadBalancerProfile”: null,
“loadBalancerSku”: “Basic”,
“networkPlugin”: “kubenet”,
“networkPolicy”: null,
“podCidr”: “10.244.0.0/16”,
“serviceCidr”: “10.0.0.0/16”
},
“nodeResourceGroup”: “MC_yz-TechnologyCarnival_sinoageAKSCluster_chinanorth2”,
“provisioningState”: “Succeeded”,
“resourceGroup”: “yz-TechnologyCarnival”,
“servicePrincipalProfile”: {
“clientId”: “15ff0340-ebbc-406c-ada3-2b0af6fe80be”,
“secret”: null
},
“tags”: null,
“type”: “Microsoft.ContainerService/ManagedClusters”,
“windowsProfile”: null
}
<span style=“color: #171717”>连接到 Kubernetes 群集</span>
在这里插入图片描述
<span style=“color: #171717”>若要验证与群集之间的连接,请运行
</span>kubectl get nodes<span style=“color: #171717”> 命令:</span>
在这里插入图片描述

部署应用程序
在这里插入图片描述

发布程序
在这里插入图片描述
在这里插入图片描述

查看pod日志

kubectl describe pods mysql-6479cbbfdc-pgmnn
在这里插入图片描述
在这里插入图片描述

创建存储账户并创建共享文件夹aksshare
在这里插入图片描述

使用存储账户用户名和访问key创建 Kubernetes 机密

kubectl create secret generic azure-secret
–from-literal=azurestorageaccountname=technologycarnival
–from-literal=azurestorageaccountkey=Ad4qRXvlINiNqOiyuEH0G1AnIT+3w8qvUuQToD4gjGY95XkitDlGffXmaHGpInSUlylsc1U6SXvYoDJJDibk+w==
在这里插入图片描述
<span style=“color: #171717”>使用 kubectl describe pod PodName
验证共享是否已成功装载</span>
Containers:
mysql:
Container ID:
docker://c4d5d4f2b0a1a5f27441d745ae2ca64c8eb73e5e6d690a330262f2b99f2b5d0f
Image: sinoage.azurecr.cn/mysql:v1
Image ID:
docker-pullable://sinoage.azurecr.cn/mysql@sha256:2bd4665d9c5ecad61f7ceff82f82e6470c4686b9ec0fd986b84012861506c722
Port: 3306/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 08 Oct 2019 16:37:12 +0800
Ready: True
Restart Count: 0
Environment:
MYSQL_ROOT_PASSWORD: zabbix
Mounts:
/mnt/azure from azure (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-t9nvm (ro)
<span style=“color: #171717”><ac:structured-macro
ac:name=“unmigrated-wiki-markup” ac:schema-version=“1”
ac:macro-id=“d9674f6e-c679-44cd-ad50-1874cd3e8e42”><ac:plain-text-body><![CDATA[[…]
Volumes: azure: Type: AzureFile (an Azure File Service mount on the host and
bind mount to the pod) SecretName: azure-secret ShareName: aksshare ReadOnly:
false default-token-t9nvm: Type: Secret (a volume populated by a Secret)
SecretName: default-token-t9nvm Optional: false QoS Class: BestEffort
Node-Selectors: beta.kubernetes.io/os=linux Tolerations:
node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From
Message ---- ------ ---- ---- ------- Normal Scheduled 6m7s default-scheduler
Successfully assigned default/mysql-6479cbbfdc-pgmnn to aks-nodepool1-10409544-0
Normal Pulling 6m5s kubelet, aks-nodepool1-10409544-0 pulling image
“sinoage.azurecr.cn/mysql:v1” Normal Pulled 5m58s kubelet,
aks-nodepool1-10409544-0 Successfully pulled image “sinoage.azurecr.cn/mysql:v1”
Normal Created 5m48s kubelet, aks-nodepool1-10409544-0 Created container Normal
Started 5m48s kubelet, aks-nodepool1-10409544-0 Started container]]>
de-Selectors: beta.kubernetes.io/os=linux Tolerations:
node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From
Message ---- ------ ---- ---- ------- Normal Scheduled 6m7s default-scheduler
Successfully assigned default/mysql-6479cbbfdc-pgmnn to aks-nodepool1-10409544-0
Normal Pulling 6m5s kubelet, aks-nodepool1-10409544-0 pulling image
“sinoage.azurecr.cn/mysql:v1” Normal Pulled 5m58s kubelet,
aks-nodepool1-10409544-0 Successfully pulled image “sinoage.azurecr.cn/mysql:v1”
Normal Created 5m48s kubelet, aks-nodepool1-10409544-0 Created container Normal
Started 5m48s kubelet, aks-nodepool1-10409544-0 Started container]]>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值