【Azure K8S | AKS】在AKS中创建 StatefulSet 示例

AKS,示例,创建 ,Set · 浏览次数 : 11

小编点评

## Azure K8S | AKS 在 AKS 集群中创建 PVC 和 PV 示例 **问题描述:** * 在 Kubernetes 的官网中找到了 stateful set 应用的 YAML 文件 (mystatefulset.yaml)。 * 示例中的 VolumClaimTemplates 会为 StatefulSet 应用自动生成 PVC,PV。 * 想要使用已创建好的 PV,PVC 需要修改 mystatefulset.yaml 文件。 * 部署道AKS后,查看 Statefulset 和 pod 状态图。 **解决方案:** 1. **读取 statefulset.yaml 文件:** - 使用 `kubectl get statefulset pvcwebspec -n ` 命令读取 statefulset 应用的 YAML 配置。 2. **修改 mystatefulset.yaml 文件:** - 按照以下步骤修改 mystatefulset.yaml 文件: - 将 `apiVersion` 设置为 `v1`。 - 将 `kind` 设置为 `StatefulSet`。 - 添加 `spec` 子节点,包含 `template` 和 `spec` 属性。 - 设置 `template` 属性,指定 PVC 的参数。 - 设置 `spec` 属性,指定容器数量、端口和 pod 的 IP 地址。 3. **部署 statefulset 应用:** - 使用 `kubectl apply -f mystatefulset.yaml` 命令部署 Statefulset 应用。 4. **查看状态:** - 使用 `kubectl get statefulset pvcweb -n ` 命令查看 Statefulset 的状态。 5. **创建文件并验证共享:** - 进入 3 个 Pod 中创建文件并验证在其他 Pod 是否能共享。 - 使用 `kubectl exec` 命令进入每个 Pod 并创建文件。 6. **验证共享:** - 使用 `kubectl exec` 命令在其他 Pod 中查看文件是否存在。 **注意:** - `claimName` 在 `VolumClaimTemplates` 中需要匹配 PVC 的名称。 - `replicas` 设置默认值为 1,可以根据实际需求进行调整。 - `minReadySeconds` 和 `maxReadySeconds` 设置默认值为 0,表示 Pod 需要等待 PVC 的资源准备好才启动。

正文

问题描述

  1. 【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例
  2. 【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
  3. 【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小

基于前三篇博文中使用的PV, PVC,Disk来创建StatefulSet应用。并查看其多个POD中所Mount文件夹是否共享?

问题解答

首先,在Kubernetes的官网中找到了 stateful set应用的yaml文件(https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)。

因为示例中的VolumClaimTemplates设定会为StatefulSet的应用的每一个Replicas(POD)自动生成PVC, PV。

如果要使用已创建好的PV, PVC则需要修改Yaml文件( mystatefulset.yaml )为以下内容:

apiVersion: v1
kind: Service
metadata:
  name: nginx1
  labels:
    app: nginx1
spec:
  ports:
  - port: 80
    name: pvcweb
  clusterIP: None
  selector:
    app: nginx1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pvcweb
spec:
  selector:
    matchLabels:
      app: nginx1 # 必须匹配 .spec.template.metadata.labels
  serviceName: "nginx1"
  replicas: 3 # 默认值是 1
  minReadySeconds: 10 # 默认值是 0
  template:
    metadata:
      labels:
        app: nginx1 # 必须匹配 .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx1
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        ports:
        - containerPort: 80
          name: pvcweb
        volumeMounts:
        - name: testpvc
          mountPath: /nmt/nginx
      volumes:
        - name: testpvc
          persistentVolumeClaim:
            claimName: test-pvc-001

使用 kubectl apply -f mystatefulset.yaml 部署道AKS后,查看 statefulset 和pod 状态

如图所示, 名为 pvcweb 的 statefulset应用有3个Pod, pvcweb-0,pvcweb-1,pvcweb-2。

接下来,通过 kubectl exec -it 进入3个Pod中创建文件,并验证在其他Pod是否能共享。

kubectl exec  -it pvcweb-0  --  /bin/sh

cd /nmt/nginx
echo "this is pvcweb-0 file" > file0.txt


kubectl exec  -it pvcweb-1  --  /bin/sh

cd /nmt/nginx
echo "this is pvcweb-1 file" > file1.txt


kubectl exec  -it pvcweb-2  --  /bin/sh

cd /nmt/nginx
echo "this is pvcweb-2 file" > file2.txt


kubectl exec  -it pvcweb-0  -- df -h /nmt/nginx
kubectl exec  -it pvcweb-1  -- df -h /nmt/nginx
kubectl exec  -it pvcweb-2  -- df -h /nmt/nginx

根据实验证明,StatefulSet下的所有POD都共享所设置的PVC中文件。

 

参考资料

StatefulSets:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

 

与【Azure K8S | AKS】在AKS中创建 StatefulSet 示例相似的内容:

【Azure K8S | AKS】在AKS中创建 StatefulSet 示例

问题描述 【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况 【Azure K8S |

【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例

问题描述 在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 问题解答 在Azure Kubernetes Service(AKS)的官方网站中,关于存储的选项介绍中,并没有具体的yaml实例来创建PV, PVC。特别是使用自定

【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小

问题描述 在前两篇文章中,创建了Disk + PV + PVC + POD 方案后,并且进入POD中增加文件。 【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 【Azure K8S|AKS】

【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况

问题描述 在昨天的文章中,创建了 Disk + PV + PVC + POD 方案(https://www.cnblogs.com/lulight/p/17604441.html),那么如何进入到POD之中去查看文件呢? 如PVC Volume Mounts中文件? 问题解答 第一步:进入POD内部

【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案

Failed to pull image "k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.2-r2": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled wh

【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)

问题描述 使用Azure Kubernetes服务(AKS),可以通过kubectl连接 pod 中查看日志,但是如何来查看节点的系统日志呢?如是否有ubuntu系统升级的记录? 问题解答 是的,可以进入AKS的节点查看系统文件,如日志文件(/var/log) 或者由应用生产的其他日志。 具体的操作

【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)

问题描述 在Azure Kubernetes 服务中,创建一个Internal Load Balancer服务,使用以下yaml内容: internallb.yaml apiVersion: v1 kind: Service metadata: name: ilb-myapp annotations

【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决

问题描述 创建Azure Kubernetes Service服务后,需要升级AKS集群的 kubernetes version。在AKS页面的 Cluster configuration 页面中,选择新的版本 1.25.5,确认升级。等待50分钟左右,却等到了升级失败的消息: Failed to

【Azure K8S】记录AKS VMSS实例日志收集方式

问题描述 如何从AKS的VMSS集群中收集实例日志? 参考步骤 第一步:登陆VMSS实例 参考官网步骤:使用 SSH 连接到 Azure Kubernetes 服务 (AKS) 群集节点以进行维护或故障排除: https://docs.azure.cn/zh-cn/aks/ssh#configure

【Azure APIM】APIM self-host 部署在K8S中,如何更换证书呢?

问题描述 APIM self-host(自建网关)部署在K8S中,如何在本地上传及更换证书呢? 问题解答 如果使用Self-host网关,则不支持使用上传到 APIM的 CA 根证书验证服务器和客户端证书。 若要建立信任,请配置特定的客户端证书,使其被网关作为一个自定义的证书颁发机构所信任,使用网关