k8s中使用MySQL共享存储_Kubernetes创建挂载共享存储的容器

在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全;一般都是把数据存储在远程服务器上如:NFS,GlusterFS,ceph等;一般目前主流的还是使用ceph、GlusterFS;

本次实验使用最简单的方式NFS来配置一个通过挂载共享存储的nginx容器;

两台机器:

kubernetes: 10.0.10.135 [Centos7.2]

nfs: 10.0.10.31 [Centos6.5的机器]

由于kubernetes还是之前的实验机器,所以就直接弄好NFS服务器先;

nfs服务器操作:

yum install rpcbind nfs-utils -y

mkdir -p /data/www-data

添加共享目录配置:

cat >/etc/exports<

/data/www-data 10.0.10.0/24(rw,sync)

EOF

添加到开机启动:

chkconfig rpcbind on

chkconfig nfs on

service nfs start

service rpcbind start

检查一下配置:

[root@nfs ~]# exportfs

/data/www-data 10.0.10.0/24

再回到kubernetess机器上要安装一个包:

yum install nfs-utils -y

完成后就可以用命令检查nfs目享的目录了;

[root@node5 ~]# showmount -e 10.0.10.31

Export list for 10.0.10.31:

/data/www-data 10.0.10.0/24

尝试挂载一下;

[root@node5 ~]# mount 10.0.10.31:/data/www-data /mnt

[root@node5 ~]# ls /mnt

css fonts img index.html js

因为事先准备了一些文件,所以就可以看到效果,已经成功挂载过来了说明主机可以挂载;

创建一个rc,并定义两个容器数量,配置文件如下:

cat >nginx_pod_volume_nfs.yaml<

apiVersion: v1

kind: ReplicationController

metadata:

name: nginx

spec:

replicas: 2

selector:

app: web01

template:

metadata:

name: nginx

labels:

app: web01

spec:

containers:

- name: nginx

image: reg.docker.tb/harbor/nginx

ports:

- containerPort: 80

volumeMounts:

- mountPath: /usr/share/nginx/html

readOnly: false

name: nginx-data

volumes:

- name: nginx-data

nfs:

server: 10.0.10.31

path: "/data/www-data"

EOF

创建容器:

[root@node5 test_418]# kubectl create -f nginx_pod_volume_nfs.yaml

replicationcontroller "nginx" created

检查一下服务是否正在运行:

[root@node5 test_418]# kubectl get pods

NAME READY STATUS RESTARTS AGE

nginx-64zrd 1/1 Running 0 15s

nginx-f0z39 1/1 Running 0 15s

[root@node5 test_418]# kubectl get rc

NAME DESIRED CURRENT READY AGE

nginx 2 2 1 8s

此时已经成功运行了两个容器了,但是无法外部访问,这里还要再添加一个service;

创建一个Service,负责对外提供负载;

cat >nginx_service.yaml<

apiVersion: v1

kind: Service

metadata:

name: nginx-service

spec:

externalIPs:

- 10.0.10.135

ports:

- port: 8000

targetPort: 80

protocol: TCP

selector:

app: web01

EOF

检查一下service是否成功运行:

[root@node5 test_418]# kubectl get svc

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes 10.254.0.1 443/TCP 17d

my-mysql 10.254.93.211 10.0.10.135 3306/TCP 7d

nginx-service 10.254.155.182 10.0.10.135 8000/TCP 4s

打开浏览器,访问一下:

此处是一个集群哦!由两个容器提供,哪怕删除其中一个都可以访问;只是因为配置文件中配置了复制份数为2,所以删除任意一个又会很快创建出一个来,最重要的是不用你管理它自动就加入到些集群中;

注:其实这个方式跟本地挂载的方式差不多,只是把远程的目录挂载到Kubernetes主机上再挂载到容器里,这个在实验环境中发现:

[root@node5 test_418]# mount|grep "10.0.10.31"

10.0.10.31:/data/www-data on /var/lib/kubelet/pods/65f7cd9e-23ec-11e7-b0e2-000c29d4cebd/volumes/kubernetes.io~nfs/nginx-data type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.135,local_lock=none,addr=10.0.10.31)

10.0.10.31:/data/www-data on /var/lib/kubelet/pods/65f7db49-23ec-11e7-b0e2-000c29d4cebd/volumes/kubernetes.io~nfs/nginx-data type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.135,local_lock=none,addr=10.0.10.31)

很明显看到两个Pod容器都挂载了一相同的目录,而此目录就是挂载远程NFS服务器的目录;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值