k8s 中 nfs作为存储的三种方式
1、安装nfs服务。直接给命令
yum install nfs-utils vim /etc/exports /data/k8s/ 172.16.1.0/24(sync,rw,no_root_squash) systemctl start nfs; systemctl start rpcbind systemctl enable nfs 测试: yum install nfs-utils showmount -e 172.16.1.131
2、nfs 可以直接作为存储卷使用,下面是一个生产环境部署的YAML配置文件。在此示例中,redis在容器中的持久化数据保存在/data目录下;存储卷使用nfs,nfs的服务地址为:192.168.8.150,存储路径为:/k8s-nfs/redis/data。容器通过volumeMounts.name的值确定所使用的存储卷。生产中一般挂载日志以及一些永久存储的文件使用
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: redis spec: selector: matchLabels: app: redis revisionHistoryLimit: 2 template: metadata: labels: app: redis spec: containers: # 应用的镜像 - image: redis name: redis imagePullPolicy: IfNotPresent # 应用的内部端口 ports: - containerPort: 6379 name: redis6379 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" - name: REDIS_PASSWORD value: "redis" # 持久化挂接位置,在docker中 volumeMounts: - name: redis-persistent-storage mountPath: /data volumes: # 宿主机上的目录 - name: redis-persistent-storage nfs: path: /data/k8s server: 172.16.1.131
3、nfs作为在Kubernetes当前版本的中,可以创建类型为nfs的持久化存储卷,用于为PersistentVolumClaim提供存储卷。在下面的PersistenVolume YAML配置文件中,定义了一个名为nfs-pv的持久化存储卷,此存储卷提供了5G的存储空间,只能由一个PersistentVolumClaim进行可读可写操作。此持久化存储卷使用的nfs服务器地址为192.168.5.150,存储的路径为/tmp。
这里简单提供下使用方法。具体可以查看我的博客中动态pv和静态PV的区别和使用
[root@VM_0_48_centos prometheus]# cat mypv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv001 spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: path: /data/k8s server: 172.19.0.14 [root@VM_0_48_centos prometheus]# cat mypvc.yaml ###会根据大小和类型自动匹配到上面的PV kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: kube-system name: prometheus-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi [root@VM_0_48_centos prometheus]# kubectl get pv,pvc -n kube-system NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pv001 10Gi RWX Retain Bound kube-system/prometheus-claim 17m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/prometheus-claim Bound pv001 10Gi RWX
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: prometheus
namespace
: kube-system
labels:
k8s-app: prometheus
kubernetes.io/cluster-service:
"true"
addonmanager.kubernetes.io/mode: Reconcile
version: v2.2.1
spec:
serviceName:
"prometheus"
replicas: 1
podManagementPolicy:
"Parallel"
updateStrategy:
type:
"RollingUpdate"
selector:
matchLabels:
k8s-app: prometheus
template:
metadata:
labels:
k8s-app: prometheus
annotations:
scheduler.alpha.kubernetes.io/critical-pod:
''
spec:
priorityClassName: system-cluster-critical
serviceAccountName: prometheus
initContainers:
- name:
"init-chown-data"
image:
"busybox:latest"
imagePullPolicy:
"IfNotPresent"
command: [
"chown"
,
"-R"
,
"65534:65534"
,
"/data"
]
volumeMounts:
- name: prometheus-data
mountPath: /data
subPath:
""
containers:
- name: prometheus-server-configmap-reload
image:
"jimmidyson/configmap-reload:v0.1"
imagePullPolicy:
"IfNotPresent"
args:
- --volume-dir=/etc/config
- --webhook-url=http:
//localhost:9090/-/reload
volumeMounts:
- name: config-volume
mountPath: /etc/config
readOnly:
true
resources:
limits:
cpu: 10m
memory: 10Mi
requests:
cpu: 10m
memory: 10Mi
- name: prometheus-server
image:
"prom/prometheus:v2.2.1"
imagePullPolicy:
"IfNotPresent"
args:
- --config.file=/etc/config/prometheus.yml
- --storage.tsdb.path=/data
- --web.console.libraries=/etc/prometheus/console_libraries
- --web.console.templates=/etc/prometheus/consoles
- --web.enable-lifecycle
ports:
- containerPort: 9090
readinessProbe:
httpGet:
path: /-/ready
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
livenessProbe:
httpGet:
path: /-/healthy
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
# based on 10 running nodes with 30 pods each
resources:
limits:
cpu: 200m
memory: 1000Mi
requests:
cpu: 200m
memory: 1000Mi
volumeMounts:
- name: config-volume
mountPath: /etc/config
- name: prometheus-data
mountPath: /data
subPath:
""
terminationGracePeriodSeconds: 300
volumes:
- name: config-volume
configMap:
name: prometheus-config
- name: prometheus-data
persistentVolumeClaim: #申明使用静态PVC永久化存储
claimName: prometheus-claim
良禽择木而栖 贤臣择主而侍