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

本文涉及的产品
容器镜像服务 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. Windows容器挂载SMB

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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
269 146
|
2月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
330 2
|
4月前
|
运维 Kubernetes 持续交付
ACK One GitOps:让全球化游戏服务持续交付更简单
ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
|
8月前
|
Kubernetes 安全 数据安全/隐私保护
容器云服务是什么?
容器云基于容器技术,实现应用及其依赖的标准化封装,支持跨平台快速部署和高效管理。与传统虚拟机相比,容器共享宿主机操作系统内核,资源占用少、启动快,但隔离性稍弱。Docker Engine通过Dockerfile定义应用环境并生成容器镜像,适合单机场景;Kubernetes作为行业标准编排工具,支持自动扩缩容和服务发现,适用于大规模集群管理;OpenShift提供企业级全流程平台,满足合规要求;Rancher简化多云环境下的Kubernetes管理;CoreOS Tectonic专注于安全性,适用于高安全需求领域。容器云正朝着无服务器化、智能运维和边缘协同等方向发展。
620 2
|
9月前
|
人工智能 监控 安全
容器化AI模型的安全防护:构建可信的AI服务
在AI模型广泛应用的背景下,容器化AI模型的安全防护至关重要。主要安全威胁包括数据窃取、模型窃取、对抗样本攻击和模型后门攻击等。为应对这些威胁,需采取多层次防护措施:容器安全(如使用可信镜像、限制权限)、模型安全(如加密、水印)、数据安全(如加密、脱敏)和推理安全(如输入验证、异常检测)。此外,利用开源工具如Anchore Engine、Falco和ART等,可进一步加强防护。遵循安全开发生命周期、最小权限原则和深度防御等最佳实践,确保AI服务的安全性和可信度。
|
8月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
248 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
9月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
191 1
|
8月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
9月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
766 108

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多