云端技术驾驭DAY14——存储卷管理、临时卷、持久卷、PV/PVC管理

2024-02-29 18:44

本文主要是介绍云端技术驾驭DAY14——存储卷管理、临时卷、持久卷、PV/PVC管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

往期回顾:
云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述
云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板
云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装
云端技术驾驭DAY04——Logstash安装部署及插件模块
云端技术驾驭DAY06——容器技术概述、镜像与容器管理、定制简单镜像、容器内安装部署服务
云端技术驾驭DAY07——Dockerfile详解、容器镜像制作、私有仓库
云端技术驾驭DAY08——部署容器服务、Compose微服务管理、harbor仓库部署及管理
云端技术驾驭DAY09——k8s集群安装部署、calico插件部署、计算节点配置管理
云端技术驾驭DAY10——kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件
云端技术驾驭DAY11——资源对象文件、Pod自定义命令、多容器Pod、资源监控工具
云端技术驾驭DAY12——Pod调度策略、Pod标签管理、Pod资源配额与限额、全局资源配额与限额策略
云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全

云端技术驾驭DAY14

  • 存储卷
      • 持久卷
          • 卷概述
          • hostPath存储卷
          • NFS存储卷
  • PV/PVC
      • PV/PVC管理
          • PV/PVC概述
          • PV资源对象
          • PVC资源对象
          • Pod调用PVC
  • 存储卷管理
      • 临时卷
          • configMap卷
          • Nginx解析php
          • secret卷
          • emptyDir卷

存储卷

持久卷

卷概述
  • 容器化带来的问题
    • 容器中的文件在磁盘上是临时存放的,这给容器中运行的重要的应用程序带来一些问题
      • 问题1:当容器崩溃或重启的时候,kubelet会以干净的状态重启容器,容器内的历史数据会丢失
      • 问题2:当容器被删除时,容器内的数据也会被一起清理
      • 问题3:多个容器中有共享文件或目录的需求
  • 卷是什么?
    • 卷是一个抽象化的存储设备
  • 为什么要使用卷?
    • 卷可以解决容器崩溃或重启后历史数据丢失的问题
    • 卷可以解决容器或Pod被删除后数据持久保存的问题
    • 卷可以解决在多个容器内共享数据的问题
    • Pod可以同时使用任意数目的卷
  • k8s支持的卷类型
    • 持久卷:持久卷是集群中的存储资源,在里面存储的数据不会随着Pod的删除而丢失
    • 临时卷:有些应用程序需要额外的存储。卷会遵从Pod的生命周期,与Pod一起创建和删除
    • 投射卷:它允许将多个现有卷映射到同一个目录。通过将这些不同类型的卷源组合成一个统一的卷,可以更方便地管理和使用这些资源
  • 如何使用卷?
    • 首先编写一个Pod资源对象文件
    • Pod.spec下添加volumes字段,配置外部存储为卷
    • Pod.spec.containers[*]中添加volumeMounts字段,声明卷在容器中的挂载位置
hostPath存储卷
  • hostPath是持久卷
    • hostPath卷的本质是使用本地设备,例如磁盘、分区、目录、Socket、CharDevice和BlockDevice等。hostPath卷的可用性取决于底层节点的可用性,如果节点不健康,那么hostPath卷也将不可用
    • hostPath卷里的数据不会随着Pod的结束而消失
  • 使用hostPath卷保存日志
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:                     # 卷定义- name: logdata              # 卷名称hostPath:                  # 资源类型path: /var/weblog        # 宿主机路径type: DirectoryOrCreate  # 目录不存在就创建containers:- name: nginximage: myos:nginxvolumeMounts:                       # mount 卷- name: logdata                     # 卷名称mountPath: /usr/local/nginx/logs  # 容器内路径
  • 验证hostPath卷
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP             NODE
web1   1/1     Running   0          45m   10.244.2.16    node-0002[root@master ~]# curl http://10.244.2.16/
Nginx is running !# 删除Pod ,日志数据也不会丢失
[root@master ~]# kubectl delete pod web1
pod "web1" deleted# 来到 node 上查看日志
[root@node-0002 ~]# cat /var/weblog/access.log 
10.244.0.0 - - [27/Jun/2022:02:00:12 +0000] "GET / HTTP/1.1" 200 19 "-" "curl/7.29.0"
  • type对应的类型
type类型解释
DirectoryOrCreate卷映射对象是一个目录,不存在就创建它
Directory卷映射对象是一个目录,且必须存在
FileOrCreate卷映射对象是一个文件,不存在就创建它
File卷映射对象是一个文件,且必须存在
Socket卷映射对象是一个Socket套接字,且必须存在
CharDevice卷映射对象是一个字符设备,且必须存在
BlockDevice卷映射对象是一个块设备,且必须存在
NFS存储卷
  • NFS存储
    • k8s中允许将nfs存储以卷的方式挂载到你的Pod中
    • 在删除Pod时,nfs存储卷会被卸载,而不是被删除
    • nfs卷可以在不同节点的Pod之间共享数据
  • NFS卷的用途
    • NFS最大的功能就是在不同节点的不同Pod中共享读写数据。本地NFS的客户端可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
  • 实验准备
主机名P地址配置
nfs192.168.1.101CPU,1G内存
  • 部署nfs服务
[root@nfs ~]# mkdir /var/webroot
[root@nfs ~]# echo "nfs server" > /var/webroot/index.html
[root@nfs ~]# dnf -y install nfs-utils
[root@nfs ~]# vim /etc/exports
/var/webroot    192.168.1.0/24(rw,no_root_squash)
[root@nfs ~]# systemctl enable nfs-server.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
  • 在所有node节点安装nfs软件包
[root@ecs-proxy ~]# mkdir nfs
[root@ecs-proxy ~]# cd nfs
[root@ecs-proxy nfs]# vim ansible.cfg 
[defaults]
inventory         = inventory
host_key_checking = False
[root@ecs-proxy nfs]# vim inventory 
[nfs]
192.168.1.[51:55]
[root@ecs-proxy nfs]# vim install_nfs.yml
---
- hosts: alltasks:- yum:name: nfs-utils- service:name: nfs-serverstate: startedenabled: yes
[root@ecs-proxy nfs]# ansible-playbook install_nfs.yml
  • Pod调用NFS卷
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatahostPath:path: /var/weblogtype: DirectoryOrCreate- name: website              # 卷名称nfs:                       # NFS 资源类型server: 192.168.1.10     # NFS 服务器地址path: /var/webroot       # NFS 共享目录containers:- name: nginximage: myos:nginxvolumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: website                     # 卷名称mountPath: /usr/local/nginx/html  # 路径[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
web1   1/1     Running   0          8s    10.244.147.11   node-0002   <none>           <none>
[root@master ~]# curl 10.244.147.11
nfs server

PV/PVC

PV/PVC管理

PV/PVC概述
  • PV/PVC是什么?
    • PV的全称是Persistent Volume,是持久卷
    • PVC的全称是PersistentVolumeClaim,是持久卷声明
  • PV/PVC有什么用途?
    • 存储的管理是一个与计算实例的管理完全不同的问题。管理员希望能提供一种通用的API来完成Pod对卷的部署管理与使用。PV/PVC就是为了满足这种需求而诞生的,PV/PVC的引入使集群具备了存储的逻辑抽象能力
  • k8s支持的存储卷
    • CephFS volume:cephfs
    • 容器存储接口:csi
    • Fibre Channel存储:fc
    • HostPath卷:hostPath
    • iSCSI存储iscsi
    • 网络文件系统存储nfs
    • Rados块设备卷rbd
  • 如何使用PV/PVC
    • PV是资源的提供者,根据集群的基础设施变化而变化
    • PVC是资源的使用者,根据业务服务的需求变化来配置
    • PVC会根据用户声明的需求,自动找到PV完成绑定
PV资源对象
  • 创建PV资源文件
---
kind: PersistentVolume
apiVersion: v1
metadata:name: pv-local
spec:volumeMode: Filesystem         # 提供资源的类型[Filesystem,Block]accessModes:                   # 存储卷能提供的访问模式- ReadWriteOnce              # 卷支持的模式[RWO ROX RWX RWOP]capacity:                      # 存储卷能提供的存储空间storage: 30Gi                # 空间大小persistentVolumeReclaimPolicy: Retain       # 数据回收方式hostPath:                                   # hostPath配置path: /var/weblogtype: DirectoryOrCreate---
kind: PersistentVolume
apiVersion: v1
metadata:                       name: pv-nfs
spec:volumeMode: FilesystemaccessModes:- ReadWriteOnce- ReadOnlyMany- ReadWriteManycapacity:storage: 20GipersistentVolumeReclaimPolicy: RetainmountOptions:                 # mount的参数- nolocknfs:                          # NFS配置server: 192.168.1.10        # NFS服务器IP地址path: /var/webroot          # 共享目录路径[root@master ~]# kubectl apply -f pv.yaml 
persistentvolume/pv-local created
persistentvolume/pv-nfs created
[root@master ~]# kubectl get persistentvolume
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-local   30Gi       RWO            Retain           Available                                   9s
pv-nfs     20Gi       RWO,ROX,RWX    Retain           Available                                   9s
PVC资源对象
  • 创建PVC资源文件
[root@master ~]# vim pvc.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: pvc1
spec:                       # 定义需求volumeMode: Filesystem    # 需要使用Filesystem的存储卷accessModes:- ReadWriteOnceresources:requests:storage: 25Gi         # 最小磁盘空间需求---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: pvc2
spec:volumeMode: FilesystemaccessModes:- ReadWriteManyresources:requests:storage: 15Gi[root@master ~]# kubectl apply -f pv.yaml 
persistentvolume/pv-local created
persistentvolume/pv-nfs created
[root@master ~]# kubectl get persistentvolume
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-local   30Gi       RWO            Retain           Available                                   9s
pv-nfs     20Gi       RWO,ROX,RWX    Retain           Available                                   9s
Pod调用PVC
  • 映射PVC为卷
    • 使用PVC用户无需关心后端存储设备
    • 系统会自动查找匹配
[root@master ~]# vim web1.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:                     # 卷定义- name: logdata              # 卷名称persistentVolumeClaim:     # 通过PVC引用存储资源claimName: pvc1         # PVC名称- name: websitepersistentVolumeClaim:claimName: pvc2containers:- name: nginximage: myos:nginxvolumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/htmlroot@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
web1   1/1     Running   0          12s   10.244.240.138   node-0004   <none>           <none>
[root@master ~]# curl 10.244.240.138
nfs server

存储卷管理

临时卷

configMap卷
  • configMap是一种临时卷
    • configMap卷提供了向Pod注入配置数据的方法,允许你将配置文件与镜像分离,使容器化的应用具有可移植性
    • configMap在使用之前需要先创建它,configMap不是用来保存大量数据的,在其中保存的数据不可超过1MiB
  • configMap的用途
    • 配置环境变量
    • 修改配置文件的参数,数据库的地址等
  • 创建configMap语法格式:kubectl create configmap 名称 [选项/参数]
  • 修改系统时区(命令行创建)
[root@master ~]# kubectl create configmap tz --from-literal 'TZ=Asia/Shanghai'
configmap/tz created
[root@master ~]# kubectl get configmaps
NAME               DATA   AGE
kube-root-ca.crt   1      7d2h
tz                 1      8s
  • 使用资源对象文件创建configMap
[root@master ~]# vim timezone.yaml
---
kind: ConfigMap
apiVersion: v1
metadata:name: timezone
data:TZ: Asia/Shanghai[root@master ~]# kubectl apply -f timezone.yaml
configmap/timezone created
Nginx解析php
  • 添加容器
# 在 Pod 中增加 php 容器,与 nginx 共享同一块网卡
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatapersistentVolumeClaim:claimName: pvc1- name: websitepersistentVolumeClaim:claimName: pvc2containers:- name: nginximage: myos:nginxenvFrom:- configMapRef:name: timezonevolumeMounts:- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/html- name: php                            # 以下为新增加内容image: myos:php-fpmenvFrom:                             # 不同容器需要单独配置时区- configMapRef:name: timezonevolumeMounts:- name: website                      # 不同容器需要单独挂载NFSmountPath: /usr/local/nginx/html[root@master ~]# kubectl delete pod web1
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
web1   2/2     Running   0          5s
[root@master ~]# kubectl exec -it web1 -c nginx -- ss -ltun
Netid     State      Recv-Q     Send-Q    Local Address:Port     ... ...
tcp       LISTEN     0          128             0.0.0.0:80       ... ...
tcp       LISTEN     0          128           127.0.0.1:9000     ... ...
  • 创建configMap
# 使用 nginx 配置文件创建 configMap
[root@master ~]# kubectl cp -c nginx web1:/usr/local/nginx/conf/nginx.conf nginx.conf
[root@master ~]# vim nginx.conflocation ~ \.php$ {root            html;fastcgi_pass    127.0.0.1:9000;fastcgi_index   index.php;include         fastcgi.conf;}# 使用命令创建 configMap
[root@master ~]# kubectl create configmap nginx-php --from-file=nginx.conf 
configmap/nginx-php created
  • 挂载configMap
[root@master ~]# vim web1.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1
spec:volumes:- name: logdatapersistentVolumeClaim:claimName: pvc1- name: websitepersistentVolumeClaim:claimName: pvc2- name: nginx-php     # 卷名称configMap:          # 引用资源对象name: nginx-php   # 资源对象名称containers:- name: nginximage: myos:nginxenvFrom:- configMapRef:name: timezonevolumeMounts:- name: nginx-php                              # 卷名称subPath: nginx.conf                          # 键值(文件名称)mountPath: /usr/local/nginx/conf/nginx.conf  # 路径- name: logdatamountPath: /usr/local/nginx/logs- name: websitemountPath: /usr/local/nginx/html- name: phpimage: myos:php-fpmenvFrom:- configMapRef:name: timezonevolumeMounts:- name: websitemountPath: /usr/local/nginx/html
  • 验证
# 拷贝测试页面 s4/public/info.php
[root@ecs-proxy s4]# rsync -av public/info.php  192.168.1.10:/var/webroot/info.php
#------------------------------------------------------------
[root@master ~]# kubectl delete pod web1 
pod "web1" deleted
[root@master ~]# kubectl apply -f web1.yaml 
pod/web1 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP             NODE
web1   2/2     Running   0          18s   10.244.3.17    node-0003[root@master ~]# curl http://10.244.3.17/info.php
<pre>
Array
([REMOTE_ADDR] => 10.244.0.0[REQUEST_METHOD] => GET[HTTP_USER_AGENT] => curl/7.29.0[REQUEST_URI] => /info.php
)
php_host:   web1
1229
secret卷
  • Secret是一种临时卷
    • Secret类似于ConfigMap但专门用语保存机密数据
    • 在设置Secret.data字段时,所有键值对必须是经过base64编码的字符串
  • Secret的用途
    • 配置一些需要加密的环境变量或文件(例如:https证书)
    • 访问需要认证登陆的私有镜像仓库(例如:harbor私有仓库)
  • 创建secret语法格式:kubectl create secret 子类型 名称 [选项/参数]
    • 子类型
      • 通用类型:kubectl create secret generic 名称 [选项/参数]
      • 用于认证登陆私有仓库的子类型:kubectl create secret docker-registry 名称 [选项/参数]
      • 用语创建TLS证书的子类型:kubectl create secret tls 名称 [选项/参数]
  • 创建TZ资源对象
[root@master ~]# kubectl create secret generic tz --from-literal 'TZ=Asia/Shanghai'
secret/tz created
[root@master ~]# kubectl get secrets tz -o yaml
apiVersion: v1
data:TZ: QXNpYS9TaGFuZ2hhaQ==               # 经加密过的数据
kind: Secret
metadata:creationTimestamp: "2024-02-28T11:16:50Z"name: tznamespace: defaultresourceVersion: "648195"uid: 21097fce-1632-4b00-b45e-0d257ec599d5
type: Opaque
  • 配置harbor仓库的登陆密钥
[root@master ~]# kubectl create secret docker-registry harbor-auth --docker-server=harbor:443 --docker-username="用户名" --docker-password="密码"
secret/harbor-auth created
  • 认证私有仓库
[root@master ~]# vim web2.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web2
spec:containers:- name: apacheimage: myos:httpdimagePullSecrets:- name: harbor-auth[root@master ~]# kubectl apply -f web2.yaml
emptyDir卷
  • emptyDir临时卷
    • emptyDir的本质是一个简单的空目录
    • emptyDir可以提供临时空间,同一个Pod中容器也可以用来共享数据。如:缓存服务器、数据统计分析、排序等
    • emptyDir随Pod创建而创建,Pod在该节点上运行期间,一直存在。当Pod被从节点上删除时,临时卷中的数据也会被永久删除
    • 重启Pod中的容器不会造成emptyDir数据的丢失
  • 配置缓存目录
[root@master ~]# vim web2.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web2
spec:imagePullSecrets:- name: harbor-authvolumes:               # 卷配置- name: cache          # 卷名称emptyDir: {}         # 资源类型containers:- name: apacheimage: harbor:443/myimg/httpd:latestvolumeMounts:            # 挂载卷- name: cache            # 卷名称mountPath: /var/cache  # 路径[root@master ~]# kubectl delete pod web2 
pod "web2" deleted
[root@master ~]# kubectl apply -f web2.yaml 
pod/web2 created
[root@master ~]# kubectl exec -it web2 -- bash
[root@web2 html]# mount -l |grep cache
/dev/vda1 on /var/cache type xfs (rw,relatime,attr2)

这篇关于云端技术驾驭DAY14——存储卷管理、临时卷、持久卷、PV/PVC管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759700

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。