Fork me on GitHub

Kubernetes创建挂载共享存储的容器

Kubernetes创建挂载共享存储的容器

前言

本文介绍如何使用NFS来配置一个通过挂载共享存储的Nginx容器。

部署实践

环境说明

1
2
Kubernetes: v1.8版本 192.168.200.100 CentOS 7.4
NFS: 192.168.200.101 CentOS 7.4

Kubernetes集群部署

NFS部署

Server端

1
2
3
4
5
6
7
8
# yum install rpcbind nfs-utils -y
# mkdir -p /data/www-data
# cat >/etc/exports<<-EOF
/data/www-data 192.168.200.0/24(rw,sync)
EOF
# systemctl start nfs
# systemctl enable nfs
# echo "k8s" >> /data/www-data/index.html # 创建测试文件

Client端

1
2
3
# yum install nfs-utils -y
# showmount -e node1 # 显示共享目录
# mount node1:/data/www-data /mnt # 测试挂载

1、配置参数可以根据线上环境调整
2、所有Kubernetes node节点必须按照client按照客户端,理解PV\PVC使用原理

创建PV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# cat pv-nfs.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
server: node1
path: "/data/www-data"
[root@master k8s]# kubectl create -f pv-nfs.yml --record
persistentvolume "pv0001" created
[root@master k8s]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0001 5Gi RWO Retain Available 27s

创建PVC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@master k8s]# cat pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
[root@master k8s]# kubectl create -f pvc.yml --record
persistentvolumeclaim "myclaim" created
[root@master k8s]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pv0001 5Gi RWO 5s

创建Nginx deployment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@master k8s]# cat nginx-deployment-pvc.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment-pvc
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
track: stable
spec:
containers:
- name: nginx
image: gtest.com/k8s/nginx:1.10
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: nginx-storage
volumes:
- name: nginx-storage
persistentVolumeClaim:
claimName: myclaim
[root@master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-pvc-789584787d-c2npz 1/1 Running 0 2m 172.20.166.139 192.168.200.101
nginx-deployment-pvc-789584787d-cc7td 1/1 Running 0 2m 172.20.104.9 192.168.200.102
nginx-deployment-pvc-789584787d-j9zdx 1/1 Running 0 2m 172.20.104.10 192.168.200.102

创建Nginx Service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@master k8s]# cat nginx-svc.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
ports:
- port: 80
nodePort: 32000
selector:
app: nginx
[root@master k8s]# kubectl create -f nginx-svc.yml --record
service "nginx-svc" created
[root@master k8s]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 5h
nginx-svc NodePort 10.68.133.178 <none> 80:32000/TCP 14s
[root@master k8s]# kubectl get endpoints nginx-svc
NAME ENDPOINTS AGE
nginx-svc 172.20.166.139:80,172.20.104.9:80,172.20.104.10:80 33s

测试

1、浏览器访问测试,访问Kubernetes任意节点的32000端口

2、通过dashboard查看创建的各类资源



参考资料

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

======================================================
希望各位朋友支持一下

本文作者:dongsheng
本文地址https://mds1455975151.github.io/archives/43db2491.html
版权声明:转载请注明出处!

坚持技术分享,您的支持将鼓励我继续创作!