阿里云ACK服务使用Windows容器挂载NAS SMB最佳实践

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前一篇容器文章《Windows容器使用阿里云NAS SMB文件系统做持久化存储目录》介绍了在Windows Docker容器中如何连接阿里云NAS SMB文件卷。本文则着重介绍如何使用K8S配置让阿里云ACK服务的Windows容器使用NAS SMB卷。我们使用IIS应用作为演示应用,让IIS搭建的网站能够显示出NAS SMB卷的test目录下存储的index.html的内容。用户可以举一反三,将自己的应用搭建在阿里云ACK上并使用NAS SMB卷。

container class.png

【玩转容器持久化存储】点我进入活动页面

前一篇容器文章《Windows容器使用阿里云NAS SMB文件系统做持久化存储目录》介绍了在Windows Docker容器中如何连接阿里云NAS SMB文件卷。本文则着重介绍如何使用K8S配置让阿里云ACK服务的Windows容器使用NAS SMB卷。
我们使用IIS应用作为演示应用,让IIS搭建的网站能够显示出NAS SMB卷的test目录下存储的index.html的内容。
用户可以举一反三,将自己的应用搭建在阿里云ACK上并使用NAS SMB卷。

步骤

1. 创建Kubernetes托管版集群

参考官网文章快速创建Kubernetes托管版集群

2. 创建Windows节点池

参考官网文章创建Windows节点池

3. 通过kubectl连接Kubernetes集群

参考官网文章通过kubectl连接Kubernetes集群

4. 创建通用型NAS SMB文件系统

参考官网文章创建通用型NAS SMB文件系统

5. 添加挂载点

参考官网文章添加挂载点。注意添加的是K8S集群所在VPC的挂载点。

6. 部署FlexVolume插件

NAS SMB需要用FlexVolume插件连接K8S集群。
保存下面模板到kubectl CloudShell,创建文件template.yaml。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: alicloud-disk-common-windows
provisioner: alicloud/disk
parameters:
  type: cloud
  fstype: ntfs
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: alicloud-disk-efficiency-windows
provisioner: alicloud/disk
parameters:
  type: cloud_efficiency
  fstype: ntfs
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: alicloud-disk-ssd-windows
provisioner: alicloud/disk
parameters:
  type: cloud_ssd
  fstype: ntfs
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: alicloud-disk-available-windows
provisioner: alicloud/disk
parameters:
  type: available
  fstype: ntfs
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alicloud-disk-controller
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: alicloud-disk-controller
  template:
    metadata:
      labels:
        app: alicloud-disk-controller
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
            weight: 1
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - env:
        - name: OS_PLATFORM
          value: windows
        image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/alicloud-disk-controller:v1.16.9.54-a6c644bd-aliyun
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - ls /alicloud-disk-controller
          failureThreshold: 8
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        name: alicloud-disk-controller
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - mountPath: /etc/kubernetes/
          name: cloud-config
        - mountPath: /var/log/alicloud/
          name: logdir
        - mountPath: /var/addon
          name: addon-token
          readOnly: true
      nodeSelector:
        beta.kubernetes.io/os: linux
      serviceAccount: admin
      serviceAccountName: admin
      volumes:
      - hostPath:
          path: /etc/kubernetes/
          type: ""
        name: cloud-config
      - hostPath:
          path: /var/log/alicloud/
          type: ""
        name: logdir
      - name: addon-token
        secret:
          defaultMode: 420
          items:
          - key: addon.token.config
            path: token-config
          secretName: addon.csi.token
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    k8s-volume: flexvolume
  name: flexvolume-windows
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: acs-flexvolume
  template:
    metadata:
      labels:
        name: acs-flexvolume
    spec:
      containers:
      - args:
        - -Command
        - /entrypoint-windows.ps1
        command:
        - pwsh.exe
        env:
        - name: ACS_DISK
          value: "true"
        - name: ACS_NAS
          value: "true"
        - name: ACS_SMB
          value: "true"
        image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.16.9.7be0fa0-windows1809
        imagePullPolicy: Always
        name: acs-flexvolume
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: C:\host
          name: usrdir
      nodeSelector:
        beta.kubernetes.io/os: windows
      tolerations:
      - effect: NoSchedule
        key: os
        operator: Equal
        value: windows
      volumes:
      - hostPath:
          path: C:\
          type: ""
        name: usrdir
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate

在kubectl CloudShell执行:

kubectl apply -f template.yaml

7. 创建PV

准备yaml模板。参考Windows容器挂载SMB

apiVersion: v1
kind: PersistentVolume
metadata:
  labels:
    alicloud-pvname: pv-smb
  name: pv-smb
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 5Gi
  flexVolume:
    driver: alicloud/smb.exe
    options:
      path: \myshare\test
      server: 25f3f4819c-eak52.cn-shenzhen.nas.aliyuncs.com
      user: workgroup\administrator
      password: ***
  persistentVolumeReclaimPolicy: Retain

将上面模板中的内容替换为以下内容:

driver: 配置挂载驱动,必须为alicloud/smb.exe;
server:SMB存储盘的挂载地址,所在网络需要和集群所在vpc相同;
path:SMB存储盘的挂载地址,必须以\myshare开头,后面可以为空或者子目录;
user:集群节点的登陆用户名,推荐使用 workgroup\administrator;
password:集群节点的登陆密码;

使用kubectl create命令创建,或者在ACK控制台的 工作负载 页面中,点击 使用模板创建,创建PV。
pv.png

8. 创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-smb
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-smb

使用kubectl create命令创建,或者在ACK控制台的 工作负载 页面中,点击 使用模板创建,创建PVC。

9. 验证PV、PVC创建成功

# kubectl get pvc |grep pvc-smb
pvc-smb                    Bound    pv-smb                   5Gi        RWX                                         24h

10. 在Windows节点修改注册表,打开SMB卷匿名访问

给节点 绑定EIP,添加本地客户端到 安全组,登录到Windows节点后打开cmd命令行,运行以下命令修改注册表,打开SMB卷匿名访问功能。如果不打开会出现New-SmbGlobalMapping挂载错误。

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters /f /v AllowInsecureGuestAuth /t REG_DWORD /d 1

11. 在NAS SMB卷的/myshare/test目录下创建index.html

在ECS或者ACK Windows节点上挂载PVC声明的NAS SMB卷,在/myshare/test目录下创建index.html,包含内容Hello World in test folder。
index.html.png

12. 创建IIS应用

IIS是Windows最常用的网站应用。我们启动容器化的IIS,让IIS显示NAS SMB内容,达到演示Windows ACK容器连接NAS SMB的目标。

apiVersion: v1
kind: Service
metadata:
  name: iis-svc
spec:
  ports:
    - port: 8000
      protocol: TCP
      targetPort: 80
  selector:
    app: iis
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: iis
spec:
  selector:
    matchLabels:
      app: iis
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: iis
    spec:
      containers:
      - image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
        imagePullPolicy: IfNotPresent
        name: iis
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /inetpub/wwwroot/shared
          name: pvc-nas
      tolerations:
      - key: os
        value: windows
      volumes:
      - name: pvc-nas
        persistentVolumeClaim:
          claimName: pvc-smb

使用kubectl create命令创建,或者在ACK控制台的 工作负载 页面中,点击 使用模板创建,创建IIS应用。

13. 验证IIS应用可以显示NAS SMB卷内容

等待几分钟,待IIS应用正常运行之后,查看IIS服务的外部端点,打开,然后找到shared路径,显示Hello World in test folder!
ip.png

result.png

总结

综上我们使用IIS应用作为演示应用,让IIS搭建的网站能够显示出NAS SMB卷的test目录下存储的index.html的内容。
用户可以举一反三,将自己的应用搭建在阿里云ACK上并使用NAS SMB卷。

参考资料

1. 创建Windows节点池

https://help.aliyun.com/document_detail/162785.html

2. 创建Windows应用

https://help.aliyun.com/document_detail/173703.html

3. 通过kubectl连接Kubernetes集群

https://help.aliyun.com/document_detail/86494.html

4. Windows容器使用阿里云NAS SMB文件系统做持久化存储目录

https://developer.aliyun.com/article/772570

5. 阿里云ACK FlexVolume存储插件说明

https://help.aliyun.com/document_detail/157025.html

6. Windows容器挂载SMB

https://help.aliyun.com/document_detail/185877.html

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
人工智能 安全 专有云
阿里云飞天企业版获信通院可信云技术最佳实践奖
阿里云飞天企业版获信通院可信云技术最佳实践奖
15 5
|
2天前
|
人工智能 安全 专有云
阿里云飞天企业版获信通院可信云技术最佳实践奖
在中国信息通信研究院举办的“2024可信云大会”上,阿里云飞天企业版凭借“一云多算”能力拿下“可信云技术最佳实践”奖。此外飞天企业版还通过了《“云+应用”一体化运维能力要求》、《行业云平台一体化运营平台评估L4卓越级》等多项评估。
|
4天前
|
存储 SQL OLAP
分析性能提升40%,阿里云Hologres流量场景最佳实践
分析性能提升40%,阿里云Hologres流量场景最佳实践
|
28天前
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
28天前
|
存储 数据库 数据可视化
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
|
3天前
|
存储 人工智能 自然语言处理
阿里云Elasticsearch AI场景语义搜索最佳实践
本文介绍了如何使用阿里云Elasticsearch结合搜索开发工作台搭建AI语义搜索。
|
28天前
|
Cloud Native 数据库 数据可视化
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
10天前
|
人工智能 自然语言处理 算法
|
10天前
|
弹性计算 Java 关系型数据库
|
10天前
|
存储 SQL 分布式计算

相关产品

  • 容器服务Kubernetes版