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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 前一篇容器文章《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. Windows容器挂载SMB

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
15天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
1月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
4天前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
14 3
|
27天前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
103 2
|
30天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
3天前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
18 3
|
7天前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
|
1月前
|
边缘计算 安全 网络安全
|
1月前
|
数据安全/隐私保护 Windows
安装 Windows Server 2019
安装 Windows Server 2019
|
1月前
|
网络协议 Windows
Windows Server 2019 DHCP服务器搭建
Windows Server 2019 DHCP服务器搭建

相关产品

  • 容器服务Kubernetes版