当前位置: 首页 > news >正文

网站开发工程师的工作内容台州网站制作服务

网站开发工程师的工作内容,台州网站制作服务,公司网站制作费用多少,招远网站设计概述 一般情况下#xff0c;K8S中的Pod都不应该将数据持久化到Pod中#xff0c;因为Pod可能被随时创建和删除#xff08;扩容或缩容#xff09;#xff0c;即便是StatefulSet或Operator的Pod#xff0c;也都不建议在Pod里存放数据#xff0c;可以将数据持久化到Host上。…概述 一般情况下K8S中的Pod都不应该将数据持久化到Pod中因为Pod可能被随时创建和删除扩容或缩容即便是StatefulSet或Operator的Pod也都不建议在Pod里存放数据可以将数据持久化到Host上。K8S提供了非常丰富的存储相关的功能使得我们可以方便的让Pod访问存储设备。K8S通过Volume挂载的方式让Pod来访问存储设备Volume与Pod绑定并与Pod有相同的生命周期Volume在Pod中定义而Pod中的容器只需要使用volumeMounts就可以使用在Pod中定义的Volume。 Pod可以引用的Volume包含以下几类 K8S内部的资源对象ConfigMapSecretDownwardAPIProjected Volume等。Node上的资源emptyDirhostPath。持久化存储或网络存储CephFSFCCSIiSCSINFSRBD等。存储厂商提供的存储卷ScaleIO VolumesStorageOSVsphereVolume等。公有云提供的存储卷AWS EBSAzureDiskAzureFileGCE PersistentDisk等。 总之在K8S Pod中能够使用几乎所有的存储类型和方式。特别的通过K8S CSIContainer Storage Interface我们还可以开发自己的存储访问插件接入到特定的存储设备中。 Node本地存储 Node本地存储包含emptyDir和hostPath两种类型。emptyDir用于存储临时数据如缓存删除Pod的时候会自动被清理emptyDir可以指定成Memory类型但会被统计成容器使用的内存。hostPath用于挂载Node的某个目录对于大部分应用来说都不应该直接使用hostPath因为如果Pod被调度到了其它节点其就无法访问到之前节点的hostPath中的数据。另外hostPath上使用的数据不会被计算到存储资源使用统计可能出现磁盘占满而没有提醒的情况。但如果Pod只会被调度到某个Node上那么还是可以使用hostPath。 PV/PVC PV是Persistent Volume即持久化卷是K8S最常用的存储访问方式几乎所有的外部存储都可以通过PV来访问。 PVC是Persistent Volume Claim即持久化卷声明通过PVC来申请对PV的使用。PV和PVC是一一对应关系PV只有通过PVC关联后才能被使用。Pod通过volumeMounts来关联PVC。 PV通常由管理员来创建管理员事先分配好一定数量的PV供Pod使用不同的存储类别NFSCloudCeph等最后都对应成一系列的PV。 PVC通常由Pod来创建在需要使用存储的时候通过PVC来申请PV。 以下是PV/PVC的关系图 下面通过NFS来介绍PV/PVC的使用 先搭建一个双节点的K8S集群略参考 K8S 概述。 接着在master节点上搭建NFS服务主要命令如下 # On Server: sudo apt update sudo apt install nfs-kernel-server mkdir -p /home/sunny/nfs/root echo /home/sunny/nfs/root *(rw,sync,no_subtree_check) | sudo tee -a /etc/exports sudo exportfs -ra sudo systemctl start nfs-kernel-server sudo systemctl enable nfs-kernel-server# On Client: sudo apt install nfs-common sudo mount 192.168.126.16:/home/sunny/nfs/root /mnt 创建PVpv.yaml这里会指定NFS IP和路径 apiVersion: v1 kind: PersistentVolume metadata:name: nginx-pvlabels:type: nginx-pv spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:path: /home/sunny/nfs/rootserver: 192.168.126.16 sunnyxxx:~/k8s/storage/pvc_pv$ kubectl apply -f pv.yaml persistentvolume/nginx-pv created sunnyxxx:~/k8s/storage/pvc_pv$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nginx-pv 1Gi RWX Retain Available 3s 创建PVCpvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: nginx-pvcnamespace: default spec:accessModes:- ReadWriteManyresources:requests:storage: 1Gi sunnyxxx:~/k8s/storage/pvc_pv$ kubectl apply -f pvc.yaml persistentvolumeclaim/nginx-pvc created sunnyxxx:~/k8s/storage/pvc_pv$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nginx-pvc Bound nginx-pv 1Gi RWX 2s sunnyxxx:~/k8s/storage/pvc_pv$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nginx-pv 1Gi RWX Retain Bound default/nginx-pvc 2m59s 可以看出此时PVC的状态是Bound说明其已经找到了一个与此关联的PV而PV的状态也由之前的Available变为Bound且CLAIM是default/nginx-pvc先就可以在Pod里使用这个PVC了。默认PV和PVC的回收策略都是Retain需要手动删除数据即便PV和PVC都被删除。 创建Nginx Podnginx.yaml在配置文件中引用PVC apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2imagePullPolicy: IfNotPresentvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: htmlpersistentVolumeClaim:claimName: nginx-pvc sunnyxxx:~/k8s/storage/pvc_pv$ kubectl apply -f nginx.yaml deployment.apps/nginx-deployment created sunnyxxx:~/k8s/storage/pvc_pv$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-574dc457cf-8ds25 1/1 Running 0 53s 10.244.96.163 r05u36-nex-wvie-spr-cd none none nginx-deployment-574dc457cf-fnn9z 1/1 Running 0 53s 10.244.2.220 r05u30-nex-wvie-spr-cd none none nginx-deployment-574dc457cf-h4kkk 1/1 Running 0 53s 10.244.96.162 r05u36-nex-wvie-spr-cd none none在NFS服务器对应的路径上创建一个index.html文件供Nginx使用 sunnyr05u30-nex-wvie-spr-cd:~/nfs/root$ pwd /home/sunny/nfs/root sunnyr05u30-nex-wvie-spr-cd:~/nfs/root$ cat index.html Hello Nginx with PV/PVC. sunnyr05u30-nex-wvie-spr-cd:~/nfs/root$ 由于3个Nginx Pod都关联到了同一个NFS路径所以通过任何一个Pod都能访问到相同的index.html。如果Pod扩容新的Pod使用的也是相同的NFS路径所以这里就非常容易的实现了数据和代码的分离无论代码部署到哪里无论代码如何改变数据都是统一存储的。 sunnyxxx:~/k8s/storage/pvc_pv$ wget 10.244.2.220 --2024-03-21 01:45:21-- http://10.244.2.220/ Connecting to 10.244.2.220:80... connected. HTTP request sent, awaiting response... 200 OK Length: 25 [text/html] Saving to: ‘index.html’index.html 100%[] 25 --.-KB/s in 0s2024-03-21 01:45:21 (1.68 MB/s) - ‘index.html’ saved [25/25]sunnyxxx:~/k8s/storage/pvc_pv$ cat index.html Hello Nginx with PV/PVC. sunnyxxx:~/k8s/storage/pvc_pv$ wget 10.244.96.163 --2024-03-21 01:47:36-- http://10.244.96.163/ Connecting to 10.244.96.163:80... connected. HTTP request sent, awaiting response... 200 OK Length: 25 [text/html] Saving to: ‘index.html.1’index.html.1 100%[] 25 --.-KB/s in 0s2024-03-21 01:47:36 (79.9 KB/s) - ‘index.html.1’ saved [25/25]sunnyxxx:~/k8s/storage/pvc_pv$ cat index.html Hello Nginx with PV/PVC.StorageClass/PVC PV/PVC确实能实现几乎所有存储的统一访问但有一个问题是PV需要由管理员事先创建好如果创建PVC的时候没有可用的PV则PVC的状态会一直是Pending。不同的Pod可能需要不同规格和类型的PV管理员需要创建和维护数量巨大的PV这无疑是增加了K8S集群管理员的负担。 StorageClass可以解决上面的问题。当我们在创建PVC的时候可以指定一个StorageClassPVC在创建过程中会根据StorageClass的描述自动创建需要的PV不用管理员手动创建。 以下是StorageClass/PVC的关系图 下面通过NFS来介绍StorageClass/PVC的使用 搭建K8S和NFS参考上面内容。 StorageClass通过Provisioner来创建PVProvisioner有很多不同的存储类别有不同的实现是第三方的组件。Provisioner要创建PV意味着其能访问K8S集群需要为其分配权限。 创建RBACRole Based Access Controlrbac.yaml apiVersion: v1 kind: Namespace metadata:name: nginxns --- apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisionernamespace: nginxns --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:name: nfs-client-provisioner-runner rules:- apiGroups: []resources: [persistentvolumes]verbs: [get, list, watch, create, delete]- apiGroups: []resources: [persistentvolumeclaims]verbs: [get, list, watch, update]- apiGroups: [storage.k8s.io]resources: [storageclasses]verbs: [get, list, watch]- apiGroups: []resources: [events]verbs: [create, update, patch] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata:name: managed-run-nfs-client-provisioner subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: nginxns roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata:name: leader-locking-nfs-client-provisionernamespace: nginxns rules:- apiGroups: []resources: [endpoints]verbs: [get, list, watch, create, update, patch] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata:name: leader-locking-nfs-client-provisionernamespace: nginxns subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: nginxns roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io sunnyxxxx:~/k8s/storage/storageclass$ kubectl apply -f rbac.yaml namespace/nginxns created serviceaccount/nfs-client-provisioner created clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created clusterrolebinding.rbac.authorization.k8s.io/managed-run-nfs-client-provisioner created role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created 创建Storage Class, storage_class.yaml这里会定义storage class名称在创建PVC的时候会使用以及与之关联的provisioner apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: managed-nfs-storagenamespace: nginxns provisioner: provisioner-nfs-storage parameters:archiveOnDelete: false sunnyxxx:~/k8s/storage/storageclass$ kubectl apply -f storage_class.yaml storageclass.storage.k8s.io/managed-nfs-storage created sunnyr05u30-nex-wvie-spr-cd:~/k8s/storage/storageclass$ 创建 NFS provisionernfs-provisioner.yaml这里面会指定provisioner名称NFS地址路径serviceAccountName等 apiVersion: apps/v1 kind: Deployment metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisionernamespace: nginxns spec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner#image: quay.io/external_storage/nfs-client-provisioner:latestimage: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: provisioner-nfs-storage- name: NFS_SERVERvalue: 192.168.126.16- name: NFS_PATHvalue: /home/sunny/nfs/rootvolumes:- name: nfs-client-rootnfs:server: 192.168.126.16path: /home/sunny/nfs/root sunnyxxx:~/k8s/storage/storageclass$ kubectl apply -f nfs-provisioner.yaml deployment.apps/nfs-client-provisioner created 创建PVCpvc.yaml在这里会指定storageClassName kind: PersistentVolumeClaim apiVersion: v1 metadata:name: test-claimnamespace: nginxns spec:accessModes:- ReadWriteManystorageClassName: managed-nfs-storageresources:requests:storage: 5Mi sunnyxxx:~/k8s/storage/storageclass$ kubectl apply -f pvc.yaml persistentvolumeclaim/test-claim created sunnyxxx:~/k8s/storage/storageclass$ kubectl get pvc -n nginxns NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-claim Bound pvc-03905a65-efe4-4a5d-a10c-f5b50f026c4c 5Mi RWX managed-nfs-storage 12s sunnyxxx:~/k8s/storage/storageclass$ kubectl get pv -n nginxns NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-03905a65-efe4-4a5d-a10c-f5b50f026c4c 5Mi RWX Delete Bound nginxns/test-claim managed-nfs-storage 41s 创建完PVC以后可以看到pv也自动创建好了且NFS根目录下也创建了相关的供PV使用的目录在该目录中增加index.html sunnyxxx:~/nfs/root$ pwd /home/sunny/nfs/root sunnyxxx:~/nfs/root$ ll total 0 drwxrwxrwx 3 sunny sunny 73 Mar 21 02:30 ./ drwxrwxrwx 3 sunny sunny 18 Mar 20 02:06 ../ drwxrwxrwx 2 nobody nogroup 6 Mar 21 02:30 nginxns-test-claim-pvc-03905a65-efe4-4a5d-a10c-f5b50f026c4c/ sunnyxxx:~/nfs/root$ cd nginxns-test-claim-pvc-03905a65-efe4-4a5d-a10c-f5b50f026c4c/ sunnyxxx:~/nfs/root/nginxns-test-claim-pvc-03905a65-efe4-4a5d-a10c-f5b50f026c4c$ cat index.html Hello Storage Class.创建Nginxnginx.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment-storageclassnamespace: nginxns spec:selector:matchLabels:app: nginx-storageclassreplicas: 3template:metadata:labels:app: nginx-storageclassspec:containers:- name: nginximage: nginx:1.14.2imagePullPolicy: IfNotPresentvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: htmlpersistentVolumeClaim:claimName: test-claim sunnyxxx:~/k8s/storage/storageclass$ kubectl apply -f nginx.yaml deployment.apps/nginx-deployment-storageclass created sunnyxxx:~/k8s/storage/storageclass$ kubectl get pod -n nginxns -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nfs-client-provisioner-7c5d5f57b-shrd8 1/1 Running 0 37m 10.244.96.164 r05u36-nex-wvie-spr-cd none none nginx-deployment-storageclass-86bb9496f8-5mpvg 1/1 Running 0 18s 10.244.2.221 r05u30-nex-wvie-spr-cd none none nginx-deployment-storageclass-86bb9496f8-c8zbp 1/1 Running 0 18s 10.244.96.166 r05u36-nex-wvie-spr-cd none none nginx-deployment-storageclass-86bb9496f8-z4sxm 1/1 Running 0 18s 10.244.96.165 r05u36-nex-wvie-spr-cd none none 访问Pod sunnyxxx:~/k8s/storage/storageclass$ wget 10.244.2.221 --2024-03-21 03:06:12-- http://10.244.2.221/ Connecting to 10.244.2.221:80... connected. HTTP request sent, awaiting response... 200 OK Length: 21 [text/html] Saving to: ‘index.html’index.html 100%[] 21 --.-KB/s in 0s2024-03-21 03:06:12 (53.6 KB/s) - ‘index.html’ saved [21/21]sunnyxxx:~/k8s/storage/storageclass$ cat index.html Hello Storage Class. StorageClass确实能自动创建PV减少管理员准备PV的工作但是我们也发现StorageClass的配置多了不少需要定义RBACStorageClass等资源对象需要创建provisioner这个额外的Pod等。所以如果在一些复杂场景下需要频繁创建和维护PV我们可以使用StorageClass PVC的模来使用存储如果在一些简单的场景下只需要一些固定的PV我们可以使用PV PVC的模式来使用存储。 CSI 在 Kubernetes 中存储插件的开发主要有以下几种方式 CSI插件Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口是全新的插件方案插件和驱动调用通过grpc协议功能丰富支持存储卷动态提供、快速、动态扩容等等。FlexVolume插件FlexVolume 是 Kubernetes 的早期存储插件接口之一它提供了一个简单的接口但局限性却很大用于将存储驱动程序接入到 Kubernetes 中。通过实现 FlexVolume 接口可以将各种存储系统接入到 Kubernetes 集群中包括 NFS、GlusterFS、Ceph 等等。in-tree插件in-tree 存储插件是 Kubernetes 的早期存储插件接口之一它将存储驱动程序嵌入到 Kubernetes 主体代码库中。in-tree 插件可以实现对本地存储、NFS、iSCSI 等存储系统的支持。不过由于 in-tree 插件需要嵌入到 Kubernetes 主体代码库中因此对于插件开发者而言维护成本较高并且需要适应 Kubernetes 主体代码库的版本变化。 CSI 全称 Container Storage Interface是容器编排系统CO如k8s等扩展容器存储的一种实现方式基于gRPC实现是当前主流的存储扩展方式。为什么会使用CSI首先CSI 可以满足不同编排系统的需求除了k8s还可以比如 MesosSwarm。其次CSI 是容器化部署可以减少环境依赖增强安全性丰富插件的功能。CSI 的设计思想把插件的职责从之前讲的 “两阶段处理”扩展成了 Provision、Attach 和 Mount 三个阶段。 CSI 主要包含两个部分CSI Controller Server 与 CSI Node Server。 Controller Server 是控制端的功能负责将卷与具体节点进行配置每个集群中只需要有一个Controller提供服务。Node Server 负责k8s负载节点上的卷配置每个节点都有一个Node提供服务。 CSI部署架构 参考 CSI规范 k8s-编写CSI插件 CSI 插件开发简介
文章转载自:
http://www.morning.blxlf.cn.gov.cn.blxlf.cn
http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn
http://www.morning.wnkqt.cn.gov.cn.wnkqt.cn
http://www.morning.nxkyr.cn.gov.cn.nxkyr.cn
http://www.morning.rdtq.cn.gov.cn.rdtq.cn
http://www.morning.szzxqc.com.gov.cn.szzxqc.com
http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn
http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn
http://www.morning.wklrz.cn.gov.cn.wklrz.cn
http://www.morning.cwqrj.cn.gov.cn.cwqrj.cn
http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn
http://www.morning.rpzqk.cn.gov.cn.rpzqk.cn
http://www.morning.schwr.cn.gov.cn.schwr.cn
http://www.morning.fwcjy.cn.gov.cn.fwcjy.cn
http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn
http://www.morning.lptjt.cn.gov.cn.lptjt.cn
http://www.morning.wwznd.cn.gov.cn.wwznd.cn
http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn
http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn
http://www.morning.pyncm.cn.gov.cn.pyncm.cn
http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn
http://www.morning.tldhq.cn.gov.cn.tldhq.cn
http://www.morning.thntp.cn.gov.cn.thntp.cn
http://www.morning.yxwnn.cn.gov.cn.yxwnn.cn
http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn
http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn
http://www.morning.knmp.cn.gov.cn.knmp.cn
http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn
http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn
http://www.morning.mhnrx.cn.gov.cn.mhnrx.cn
http://www.morning.cczzyy.com.gov.cn.cczzyy.com
http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn
http://www.morning.pswqx.cn.gov.cn.pswqx.cn
http://www.morning.xjmyq.com.gov.cn.xjmyq.com
http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn
http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn
http://www.morning.qwlml.cn.gov.cn.qwlml.cn
http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn
http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn
http://www.morning.elmtw.cn.gov.cn.elmtw.cn
http://www.morning.xdpjs.cn.gov.cn.xdpjs.cn
http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn
http://www.morning.plhyc.cn.gov.cn.plhyc.cn
http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn
http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn
http://www.morning.fwllb.cn.gov.cn.fwllb.cn
http://www.morning.qhvah.cn.gov.cn.qhvah.cn
http://www.morning.qwbht.cn.gov.cn.qwbht.cn
http://www.morning.lfgql.cn.gov.cn.lfgql.cn
http://www.morning.ptxwg.cn.gov.cn.ptxwg.cn
http://www.morning.kfyqd.cn.gov.cn.kfyqd.cn
http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn
http://www.morning.rnds.cn.gov.cn.rnds.cn
http://www.morning.piekr.com.gov.cn.piekr.com
http://www.morning.prhqn.cn.gov.cn.prhqn.cn
http://www.morning.kyflr.cn.gov.cn.kyflr.cn
http://www.morning.yuanshenglan.com.gov.cn.yuanshenglan.com
http://www.morning.dbddm.cn.gov.cn.dbddm.cn
http://www.morning.nfqyk.cn.gov.cn.nfqyk.cn
http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn
http://www.morning.ejknty.cn.gov.cn.ejknty.cn
http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn
http://www.morning.wktbz.cn.gov.cn.wktbz.cn
http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn
http://www.morning.c7622.cn.gov.cn.c7622.cn
http://www.morning.ykrg.cn.gov.cn.ykrg.cn
http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn
http://www.morning.rqhn.cn.gov.cn.rqhn.cn
http://www.morning.gllgf.cn.gov.cn.gllgf.cn
http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn
http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn
http://www.morning.nfzw.cn.gov.cn.nfzw.cn
http://www.morning.gkgb.cn.gov.cn.gkgb.cn
http://www.morning.lmknf.cn.gov.cn.lmknf.cn
http://www.morning.dnmgr.cn.gov.cn.dnmgr.cn
http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn
http://www.morning.mtbsd.cn.gov.cn.mtbsd.cn
http://www.morning.yrpd.cn.gov.cn.yrpd.cn
http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn
http://www.morning.qynnw.cn.gov.cn.qynnw.cn
http://www.tj-hxxt.cn/news/240832.html

相关文章:

  • qq做我女朋友好吗网站用wordpress做淘宝客
  • 邵阳建设网站的公司网站后台做链接
  • 四川省建设网站建筑电工深圳网站设计哪好
  • 人才共享网站的建设方案怎么写广东微信网站制作公司哪家好
  • 个人网站排行如何创建网站的详细步骤
  • 网站优化基本技巧怎样建立和设计公司网站
  • 网站建设的目的及效益分析安阳县事业单位招聘2023
  • 网站设计模版化妆品网站建设可行性报告
  • 邢台网站建设的公司wordpress 制作网站模板
  • 域名到期网站快看小程序入口
  • 个人网站制作wordpressjoomla网站如何加入会话功能
  • 建设一个网站需要什么技术网站销售需要什么手续
  • 济南在线制作网站深圳市做网站
  • 获取网页 代码 做网站佛山网站建设联系电话
  • 做网站必须原创吗淘宝移动网站建设
  • 优化网站建设价格代做网站地图
  • 住房和城乡建设部网站登录怎么建立公司网站
  • 吉林市网站创意与建设wordpress添加cnzz
  • 网站出现转站怎么办找工作求职
  • 网站编辑超链接怎么做台州网警
  • 深圳市龙岗区做网站的公司酒店网站开发协议
  • 西安网站建设推荐q479185700上墙重庆百度推广优化
  • 大型大型网站建设方案wordpress改登录地址
  • 网络公司 网站建设wordpress翠竹林
  • 芜湖灵创网站建设网站右侧浮动广告
  • 企业网站源码 可去版权网页设计的一般流程
  • 网站活动模板天津放心站内优化seo
  • 模板网站与定制网站的区别一家做运动鞋的网站好
  • 注册网站邮箱格式怎么写做网站专题页的字大小是多少钱
  • 做的比较好看的国内网站网站建设 后台空间容量