如何实现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 CLIbaseurl=https://packages.microsoft.com/yumrepos/azure-clienabled=1gpgcheck=1gpgkey=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=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0**yum list kubectl –showduplicates

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

**yum -y install kubectl.x86_64 \#\#\#\#\#\#**安装提示信息中可安装的软件包**最后再执行kubectl get nodes。**

4.运行应用程序

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

复制以下 YAML 定义:

apiVersion: apps/v1kind: Deploymentmetadata:name: azure-vote-backspec:replicas: 1selector:matchLabels:app: azure-vote-backtemplate:metadata:labels:app: azure-vote-backspec:nodeSelector:"beta.kubernetes.io/os": linuxcontainers:\- name: azure-vote-backimage: mcr.microsoft.com/oss/bitnami/redis:6.0.8env:\- name: ALLOW_EMPTY_PASSWORDvalue: "yes"resources:requests:cpu: 100mmemory: 128Milimits:cpu: 250mmemory: 256Miports:\- containerPort: 6379name: redis\---apiVersion: v1kind: Servicemetadata:name: azure-vote-backspec:ports:\- port: 6379selector:app: azure-vote-back\---apiVersion: apps/v1kind: Deploymentmetadata:name: azure-vote-frontspec:replicas: 1selector:matchLabels:app: azure-vote-fronttemplate:metadata:labels:app: azure-vote-frontspec:nodeSelector:"beta.kubernetes.io/os": linuxcontainers:\- name: azure-vote-frontimage: mcr.microsoft.com/azuredocs/azure-vote-front:v1resources:requests:cpu: 100mmemory: 128Milimits:cpu: 250mmemory: 256Miports:\- containerPort: 80env:\- name: REDISvalue: "azure-vote-back"\---apiVersion: v1kind: Servicemetadata:name: azure-vote-frontspec:type: LoadBalancerports:\- port: 80selector: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]]>

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

  1. k8s中使用MySQL共享存储_Kubernetes创建挂载共享存储的容器

    在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务器上如:NFS,GlusterFS,ceph等:一般目前主流的还是使用ceph. ...

  2. 两台centOS服务器之间挂载共享存储

    服务端(192.168.1.122) 1.查看系统是否已安装NFS [root@rapdog ~]# rpm -qa | grep nfs [root@rapdog ~]# rpm -qa | gre ...

  3. ESXi挂载NFS共享存储

    通常VMware的整体架构由三个部分组成,虚拟化环境(包括ESXi与vCenter以及VM),交换机(通常为万兆交换机或光纤交换机),存储(netap.EMC等).使用光纤交换机,ESXi使用FC协议 ...

  4. Windows/Linux客户端挂载NFS共享存储

    Windows/Linux客户端挂载NFS共享存储 1. Linux搭建NFS共享存储 1.1. NFS概述 1.2. 安装并配置NFS Server 1.3. 启动并验证NFS Server 2. ...

  5. 3.NFS 共享存储

    1.NFS基本概述 共享存储,文件服务器 NFS是Network File System的缩写及网络文件系统.NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录.NFS系统和Windo ...

  6. Linux下通过iscsi搭建共享存储

    很多情况下,为了简单,我们经常简单的通过nfs来搭建共享存储服务. 有时候,一些软件需要,对共享存储有特殊要求,比如需要通过多个硬盘实现较大的存储空间,或者软件有特殊需要.这时,我们可以考虑通过isc ...

  7. LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

    文章目录 一.LVS-DR集群介绍 1.1 LVS-DR 工作原理 1.2 数据包流向分析 1.3 LVS-DR 模式的特点 1.4 LVS-DR中的ARP问题 1.4.1 问题一 1.4.2 问题二 ...

  8. LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤

    文章目录 一.企业群集应用概述 1.1 群集的三种类型 1 负载均衡群集 2 高可用群集 3 高性能运算群集 1.2 负载均衡结构 1.3 负载均衡群集工作模式 (1) NAT模式--地址转换 (2) ...

  9. LVS负载均衡群集架构(一):NET模式群集部署

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.群集的含义 1.概念 2.问题 3..解决方法 二.集群的分类 1.负载均衡群集:聚合和负载均衡 2.高可用群集(Hig ...

最新文章

  1. pptxgenjs一个月深度使用感受(未完待续……)
  2. treeview控件怎么使用修改发育树_树形控件在生产力工具中的设计
  3. 腐烂国度2巨霸版计算机学知识,《腐烂国度2巨霸版》新手攻略 新手入门玩法技巧大全...
  4. oracle 表空间维护
  5. oracle数据库----笔记1----oracle数据类型
  6. 2013年完美世界校园招聘笔试题
  7. react学习(73)--子组件this
  8. Spring : Spring kafka 入门Demo
  9. jmeter+ant+jenkins接口自动环境搭建
  10. Cannot add task ‘wrapper‘ as a task with that name already exists.
  11. 2019北航计算机961考研经验总结
  12. 汽车应急启动电源,拉杆音箱,蓝牙音响升压芯片合集,DCDC大功率外置MOS升压芯片10W,200W,400W
  13. python---之struck.pack()和struct.unpack
  14. leetcode 每日一题 一起进步714 买卖股票的最佳时机含手续费
  15. mixin(公共样式定义)
  16. 计算机考研abc区划分,考研abc区有什么区别
  17. 物联网-电力监控平台(二)
  18. 英语单词:through; fall through; write through
  19. 校园二手商城小程序,手把手带你开发一款云开发版商城小程序,校园二手微信小程序,可升级社区团购小程序
  20. 【LeetCode】正则表达式匹配

热门文章

  1. SpringBoot-自动配置-源码解析,Java高级程序员面试笔记宝典
  2. 美联储加息力挽狂澜 人民币汇率会否“破7”
  3. 企业库是如何调用存储过程的
  4. python alphago_AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言?
  5. RDMA技术详解——RDMA核心概念
  6. Nginx简介【重点】
  7. 如何在Linux下安装screen
  8. console、tty、pts、pty、Terminal、Physical console、Virtual console、Pseudo Terminal关系解析...
  9. 支付宝内部人士是这样设密码的!太牛逼了!
  10. 算法数据结构面试分享(十一)火眼金睛,从队伍里迅速找出那唯一的一个双胞胎