K8S使用hostpath、NFS作为volumes案例

hostpath宿主机文件系统

  • 卷通过将宿主机文件系统上的路径挂载到 Pod 中,使得 Pod 内的容器可以访问该路径

  • 可以实现在宿主节点和 Pod 之间共享数据

  • 可以实现pod访问宿主机上特定的日志文件或数据目录

1.创建一个pod,然后在 pod调度到的节点创建目录:/hostpath-test

bash 复制代码
[root@master23107-volumes]# cat 02-hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
spec:
  containers:
    - name: nginx
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
      volumeMounts:
        - mountPath: /data
          name: hostpath-volume
  volumes:
    - name: hostpath-volume
      hostPath:
        path: /hostpath-test
        type: Directory

2.进入pod写入数据,然后删除pod。

复制代码
/ # touch /data/hostpath-test.txt

3.查看worker233节点数据被保留了

bash 复制代码
[root@worker233~]# ls /hostpath-test/
hostpath-test.txt

使用NFS作为volumes

nfs跨节点不同pod共享
bash 复制代码
	1.K8S各节点部署nfs工具
[root@master231 ~]# apt -y install nfs-kernel-server
[root@worker232 ~]# apt -y install nfs-kernel-server
[root@worker233 ~]# apt -y install nfs-kernel-server

	2.配置nfs服务端
[root@master231 ~]# mkdir -pv /oldboyedu/data/nfs-server
mkdir: created directory '/oldboyedu/data'
mkdir: created directory '/oldboyedu/data/nfs-server'
[root@master231 ~]# 
[root@master231 ~]# tail -1 /etc/exports
/oldboyedu/data/nfs-server         *(rw,no_root_squash)
[root@master231 ~]# 
[root@master231 ~]# systemctl restart nfs-server
[root@master231 ~]# 
[root@master231 ~]# exportfs
/oldboyedu/data/nfs-server
		<world>
[root@master231 ~]# 


	3.编写资源清单
[root@master231 pods]# cat 09-pods-volumes-nfs.yaml 
apiVersion: v1
kind: pod
metadata:
  name: xiuxian-nfs-001
spec:
  nodeName: worker232
  volumes:
  - name: data
    # 配置后端存储是nfs
    nfs:
      # 指定nfs server的地址,可以是主机名,前提是hosts文件有解析。
      server: master231
      # 指定nfs的共享目录
      path: /oldboyedu/data/nfs-server
  containers:
  - image: harbor.oldboyedu.com/oldboyedu-web/xiuxian:v2
    name: xiuxian
    volumeMounts:
    - name: data
      mountPath: /xixi

---

apiVersion: v1
kind: pod
metadata:
  name: xiuxian-nfs-002
spec:
  nodeName: worker233
  volumes:
  - name: data
    nfs:
      server: master231
      path: /oldboyedu/data/nfs-server
  containers:
  - image: harbor.oldboyedu.com/oldboyedu-linux/alpine:3.20.2
    name: alpine
    stdin: true
    volumeMounts:
    - name: data
      mountPath: /haha
[root@master231 pods]# 


	4.测试验证 
[root@master231rc]# kubectl exec -it xiuxian-nfs-001 -- sh
/ # ls /xixi/
/ # touch /xixi/nfs-0010-xixi.txt
/ # 

[root@master231k8s-config]# kubectl exec -it xiuxian-nfs-002 -- sh
/ # ls /haha/
nfs-0010-xixi.txt
/ # 

[root@master231k8s-config]# ls /oldboyedu/data/nfs-server/
nfs-0010-xixi.txt
nfs持久存储mysql
bash 复制代码
	0.创建nfs的存储目录
[root@master231 ~]# mkdir -pv /zhiyong18/data/nfs-server/mysql80/
mkdir: created directory '/zhiyong18/data/nfs-server/mysql80/'
[root@master231 ~]# 
[root@master231 ~]# chmod +777 /zhiyong18/data/nfs-server/mysql80/
[root@master231 ~]# 


	1.编写资源清单 
[root@master231 pods]# cat 10-pods-volume-nfs-env-mysql.yaml 
apiVersion: v1
kind: pod
metadata:
  name: mysql-002
  labels:
    apps: mysql80
spec:
  nodeName: worker232
  volumes:
  - name: db
    nfs:
      server: 10.0.0.231
      path: /zhiyong18/data/nfs-server/mysql80
  containers:
  - image: harbor.zhiyong18.com/zhiyong18-db/mysql:8.3.0-oracle
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: zhiyong18
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_USER
      value: zhiyong
    - name: MYSQL_PASSWORD
      value: "123"
    volumeMounts:
    - name: db
      mountPath: /var/lib/mysql
[root@master231 pods]# 
[root@master231 pods]# kubectl get pods -o wide
NAME        READY   STATUS        RESTARTS      AGE    IP            NODE        NOMINATED NODE   READINESS GATES
mysql-002   1/1     Running       1 (26s ago)   42s    10.100.1.39   worker232   <none>           <none>
[root@master231 pods]# 
[root@master231 pods]# kubectl exec mysql-002  -- env 
...
MYSQL_ROOT_PASSWORD=zhiyong18
MYSQL_DATABASE=wordpress
MYSQL_USER=zhiyong
MYSQL_PASSWORD=123
...
[root@master231 pods]# 


	2.测试数据验证
[root@master231 pods]# kubectl exec -it mysql-002  -- mysql -pzhiyong18
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> SELECT user,host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| zhiyong          | %         |
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> use wordpress;
Database changed
mysql> 
mysql> SHOW TABLES;
Empty set (0.00 sec)

mysql> 
mysql> 
mysql> CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,hobby VARCHAR(255) NOT NULL);
Query OK, 0 rows affected (0.03 sec)

mysql> 
mysql> 
mysql> DESC student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   |     | NULL    |                |
| hobby | varchar(255) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> INSERT INTO student(name,hobby) VALUE ('HanWenTong','Sleep 10');
Query OK, 1 row affected (0.01 sec)

mysql> 
mysql> SELECT * FROM student;
+----+------------+----------+
| id | name       | hobby    |
+----+------------+----------+
|  1 | HanWenTong | Sleep 10 |
+----+------------+----------+
1 row in set (0.00 sec)

mysql> 

3.删除pod调度到另外一个worker节点
[root@master231 pods]# vim 10-pods-volume-nfs-env-mysql.yaml 
[root@master231 pods]# 
[root@master231 pods]# kubectl apply -f 10-pods-volume-nfs-env-mysql.yaml
pod/mysql-002 created
[root@master231 pods]# 
[root@master231 pods]# 
[root@master231 pods]# kubectl get pods -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
mysql-002   1/1     Running   0          7s    10.100.2.9   worker233   <none>           <none>
[root@master231 pods]# 
[root@master231 pods]# kubectl exec -it mysql-002 -- mysql -pzhiyong18
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql> SHOW TABLES FROM wordpress;
+---------------------+
| Tables_in_wordpress |
+---------------------+
| student             |
+---------------------+
1 row in set (0.00 sec)

mysql> 
mysql> SELECT * FROM wordpress.student;
+----+------------+----------+
| id | name       | hobby    |
+----+------------+----------+
|  1 | HanWenTong | Sleep 10 |
+----+------------+----------+
1 row in set (0.00 sec)

mysql>
相关推荐
AKAMAI7 小时前
Queue-it 为数十亿用户增强在线体验
人工智能·云原生·云计算
逍遥浪子~8 小时前
docker实践(一)
运维·docker·容器
AI云原生9 小时前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
❀͜͡傀儡师10 小时前
Docker部署搜索引擎SearXNG
运维·docker·容器·searxng
泡沫冰@11 小时前
K8S集群管理(3)
云原生·容器·kubernetes
麦兜*11 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
LQ深蹲不写BUG12 小时前
微服务事务管理利器:Seata 核心原理与实践指南
微服务·云原生·架构
nathan052913 小时前
Kubernetes 实战练习指南
云原生·容器·kubernetes
無名之輩14 小时前
Nvidia Device Plugin入门二之envvar策略
kubernetes
云和数据.ChenGuang15 小时前
微服务技术栈
微服务·云原生·架构