-
1)emptyDir(pod删除卷被删除)
点击查看代码
[root@anyu967master1 volume]# more ./emptydir.yaml apiVersion: v1 kind: Pod metadata: name: pod-empty spec: containers: - name: container-empty image: nginx imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {} [root@anyu967master1 volume]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES demo-pod 1/1 Running 7 (21h ago) 13d 10.244.255.178 anyu967node2 <none> <none> pod-empty 1/1 Running 0 69s 10.244.255.180 anyu967node2 <none> <none> [root@anyu967master1 volume]# kubectl get pods pod-empty -o yaml |grep uid uid: cfcda1a8-4a8e-4141-9422-d6cacac21ac8 [root@anyu967node2 ~]# tree /var/lib/kubelet/pods/cfcda1a8-4a8e-4141-9422-d6cacac21ac8 /var/lib/kubelet/pods/cfcda1a8-4a8e-4141-9422-d6cacac21ac8 ├── containers │ └── container-empty │ └── 59e15d9f ├── etc-hosts ├── plugins │ └── kubernetes.io~empty-dir │ ├── cache-volume │ │ └── ready │ └── wrapped_kube-api-access-wx7m6 │ └── ready └── volumes ├── kubernetes.io~empty-dir │ └── cache-volume └── kubernetes.io~projected └── kube-api-access-wx7m6 ├── ca.crt -> ..data/ca.crt ├── namespace -> ..data/namespace └── token -> ..data/token -
2)hostPath(pod删除卷不会被删除)
点击查看代码
[root@anyu967master1 volume]# cat ./hostPath.yaml apiVersion: v1 kind: Pod metadata: name: test-hostpath spec: # nodeName: anyu967node2 containers: - image: nginx imagePullPolicy: IfNotPresent name: test-nginx volumeMounts: - mountPath: /test-nginx name: test-volume - image: tomcat:8.5-jre8-alpine imagePullPolicy: IfNotPresent name: test-tomcat volumeMounts: - mountPath: /test-tomcat name: test-volume volumes: - name: test-volume hostPath: path: /home/xy/data1 type: DirectoryOrCreate [root@anyu967master1 volume]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-hostpath 2/2 Running 0 21s 10.244.255.186 anyu967node2 <none> <none> [root@anyu967master1 xy]# kubectl exec -it test-hostpath -c test-nginx -- /bin/sh -
3)nfs(network file system)
点击查看代码
[root@anyu967master1 volume]# yum install nfs-utils -y [root@anyu967master1 volume]# ll /home/xy/data/volumes [root@anyu967master1 volume]# more /etc/exports /home/xy/data/volumes 192.168.56.0/24(rw,no_root_squash) [root@anyu967master1 volume]# exportfs -arv exporting 192.168.56.0/24:/home/xy/data/volumes [root@anyu967master1 volume]# cat ./nfs.yaml apiVersion: v1 kind: Pod metadata: name: test-nfs-volume spec: containers: - name: test-nfs image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 protocol: TCP volumeMounts: - name: nfs-volumes mountPath: /usr/share/nginx/html volumes: - name: nfs-volumes nfs: path: /home/xy/data/volumes server: 192.168.56.129 [root@anyu967node1 xy]# mount 192.168.56.129:/home/xy/data/volumes /home/xy/nfs/ -
4)PV & PVC & StorageClass(持久化存储卷)
访问模式:
ReadWriteOnce(RWO), 卷可以被一个节点以读写方式挂载ReadOnlyMany(ROX), 卷可以被多个节点以只读方式挂载
ReadWriteMany(RWX), 卷可以被多个节点以读写方式挂载
点击查看代码
[root@anyu967master1 volumes_pv]# exportfs -arv exporting 192.168.56.0/24:/home/xy/data/volumes_pv/v4 exporting 192.168.56.0/24:/home/xy/data/volumes_pv/v3 exporting 192.168.56.0/24:/home/xy/data/volumes_pv/v2 exporting 192.168.56.0/24:/home/xy/data/volumes_pv/v1 exporting 192.168.56.0/24:/home/xy/data/volumes [root@anyu967master1 volume]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE v1 1Gi RWO Retain Available 18s v2 2Gi RWX Retain Available 18s v3 3Gi ROX Retain Available 18s v4 4Gi RWO,RWX Retain Available 18s [root@anyu967master1 volume]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound v2 2Gi RWX 6s [root@anyu967master1 volume]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE v1 1Gi RWO Retain Available 7m48s v2 2Gi RWX Retain Bound default/my-pvc 7m48s v3 3Gi ROX Retain Available 7m48s v4 4Gi RWO,RWX Retain Available 7m48s [root@anyu967master1 volume]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-pvc 1/1 Running 0 14s 10.244.255.190 anyu967node2 <none> <none> # StorageClass 创建PV的模板,动态供给PV [root@anyu967master1 volume]# kubectl get sa NAME SECRETS AGE default 0 18d nfs-provisioner 0 12s [root@anyu967master1 data]# kubectl create clusterrolebinding nfs-provisioner --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner clusterrolebinding.rbac.authorization.k8s.io/nfs-provisioner created [root@anyu967master1 volume]# kubectl apply -f nfsDeployment.yaml deployment.apps/nfs-provisioner created apiVersion: apps/v1 kind: Deployment metadata: name: nfs-provisioner spec: selector: matchLabels: app: nfs-provisioner replicas: 1 strategy: type: Recreate template: metadata: labels: app: nfs-provisioner spec: serviceAccount: nfs-provisioner containers: - name: nfs-provisioner image: registry.cn-beijing.aliyuncs.com/xngczl/nfs-subdir-external-provisione:v4.0.0 imagePullPolicy: IfNotPresent volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: example.com/nfs - name: NFS_SERVER value: 192.168.56.129 - name: NFS_PATH value: /home/xy/data/nfs_pro/ [root@anyu967master1 volume]# kubectl get pods NAME READY STATUS RESTARTS AGE nfs-provisioner-8558b45ff5-pkx44 1/1 Running 0 6s [root@anyu967master1 volume]# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs example.com/nfs Delete Immediate false 10s [root@anyu967master1 volume]# kubectl apply -f dynamicClaim.yaml persistentvolumeclaim/test-claim1 created [root@anyu967master1 volume]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-claim1 Bound pvc-414340e3-a0ed-41b8-aeff-d314f237fce5 1Gi RWX nfs 9s -
5)StatefulSet 控制器(handleless service)
StatefulSet是有状态的集合,管理有状态的服务,所管理的Pod的名称不能随意变化。数据持久化的目录也是不一样,每一个Pod都有自己独有的数据持久化存储目录。比如MySQL主从、redis集群等。
Replicaset、Deployment、DaemonSet都是管理无状态的服务,所管理的Pod的IP、名字、启停顺序等都是随机的。个体对整体无影响,所有pod都是共用一个数据卷的,部署的tomcat就是无状态的服务,tomcat被删除,在启动一个新的tomcat,加入到集群即可,跟tomcat的名字无关。点击查看代码
# Headless Service: 用来定义Pod网络标识,生成可以解析DNS记录; # vollumeClaimTemplates: 存储申请模板,创建PVC,指定pvc名称大小,自动创建pvc,且pvc由存储类供应; # StatefulSet: 管理pod的 # FQDN:<pod_name>.<svc_name>.<namespace_name>.svc.cluster.local [root@anyu967master1 statefulset]# cat ./statefulSet.yaml apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 # service 端口 name: web clusterIP: None selector: app: nginx # 标签选择器 选择拥有**app=nginx**标签的pod --- apiVersion: apps/v1 kind: StatefulSet metadata: labels: # May match selectors of replication controllers and services app: sts-nginx name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" # handlerless service的名字 replicas: 2 template: metadata: labels: app: nginx # 标签 spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: ["ReadWriteOnce","ReadWriteMany"] storageClassName: nfs-web # 指定从哪个存储类申请pv resources: requests: storage: 1Gi # 需要1Gi的pv 会自动跟符合条件的pv绑定
本文来自博客园,作者:anyu967,转载请注明原文链接:https://www.cnblogs.com/anyu967/articles/17343288.html
浙公网安备 33010602011771号