easyui 网站设计,wordpress菜单子菜单,山东app下载安装注册,抖音代运营公司排名前十KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访 一.背景二.操作步骤1.安装KVMA.在BIOS中开启VT-dB.修改grub,开启iommu在/etc/default/grub 中 GRUB_CMDLINE_LINUX行 添加 intel_iommuon iommupt重新创建引导… KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访 一.背景二.操作步骤1.安装KVMA.在BIOS中开启VT-dB.修改grub,开启iommu在/etc/default/grub 中 GRUB_CMDLINE_LINUX行 添加 intel_iommuon iommupt重新创建引导重启服务器验证iommu是否开启 C.SSH开启X11-forwarding,用于可交互式安装修改/etc/ssh/sshd_config如下:重启SSH服务 D.安装依赖 2.创建第一台KVM虚拟机,做为Master节点A.创建存储目录B.下载ubuntu 20.04镜像C.创建虚拟机通过virt-install创建虚机,在界面上配置ubutnu20.04重启虚机通过远程桌面登录ubuntu20.04,查看IP(如:192.168.122.140)在物理机上通过SSH登录虚机修改为静态IP更新apt源关闭swap开启网络转发安装docker-ce设置docker国内镜像安装kubelet创建K8S集群关闭虚机在物理机上,克隆出二台虚机,设置成不同的MAC依次启动三台虚机通过ssh登录ubuntu20节点,获取join命令通过ssh登录ubuntu20_node1,将其加入集群通过ssh登录ubuntu20_node2,将其加入集群回到ubuntu20节点,获取node列表,设置node1、node2为工作节点在ubuntu20上安装Helm在ubuntu20上创建Helm工程在ubuntu20上通过Helm命令创建pod获取K8S集群的DNS服务器地址进入第一个pod,配置DNS,使其能通过域名访问pod1进入第二个pod,配置DNS,使能通过域名访问pod0删除资源 3.遇到的问题及解决办法 三.补充知识点**1. Deployment****特点****行为****适用场景** **2. StatefulSet****特点****行为****适用场景** **3. 主要区别****4. 具体示例****Deployment 示例****StatefulSet 示例** **5. 选择使用 Deployment 还是 StatefulSet 的指南****使用 Deployment****使用 StatefulSet** **6. 常见误区****7. 总结** 一.背景
在centos7.9上安装KVM ubuntu20.04虚拟机在该虚机中部署K8S单节点将该虚拟机克隆出二份,设置MAC和IP,并加入到K8S集群在Mastet节点安装Helm通过Helm模板创建二个Pod,每个Pod一个容器,Pod之间可通过固定的域名访问
二.操作步骤
1.安装KVM
A.在BIOS中开启VT-d
B.修改grub,开启iommu
在/etc/default/grub 中 GRUB_CMDLINE_LINUX行 添加 intel_iommuon iommupt
修改如下
GRUB_TIMEOUT5
GRUB_DISTRIBUTOR$(sed s, release .*$,,g /etc/system-release)
GRUB_DEFAULTsaved
GRUB_DISABLE_SUBMENUtrue
GRUB_TERMINAL_OUTPUTconsole
GRUB_DISABLE_RECOVERYtrue
GRUB_CMDLINE_LINUXcrashkernel384M rd.lvm.lvcentos/root rd.lvm.lvcentos/swap rhgb quiet intel_iommuon iommupt重新创建引导
*EFI模式: grub2-mkconfig -o /boot/efi/EFI/bclinux/grub.cfg
*BIOS模式: grub2-mkconfig -o /boot/grub2/grub.cfg重启服务器
sync;sync;ipmitool power cycle验证iommu是否开启
dmesg | grep iommu -iC.SSH开启X11-forwarding,用于可交互式安装
修改/etc/ssh/sshd_config如下:
AddressFamily inet
AllowTcpForwarding yes
X11Forwarding yes重启SSH服务
systemctl restart sshdD.安装依赖
yum -y install qemu qemu-kvm libvirt libvirt-python libguestfs- \tools virt-install tigervnc virt-viewer virt-manager
systemctl enable libvirtd
systemctl start libvirtd 2.创建第一台KVM虚拟机,做为Master节点
A.创建存储目录
mkdir -p /var/lib/libvirt/boot/
mkdir -p /var/lib/libvirt/images/B.下载ubuntu 20.04镜像
cd /var/lib/libvirt/boot/
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.5-live-server-amd64.isoC.创建虚拟机
通过virt-install创建虚机,在界面上配置ubutnu20.04
virt-install \--virt-typekvm \--name ubuntu20 \--ram 21920 \--vcpus16 \--os-type linux \--os-variant ubuntu20.04 \--console pty,target_typeserial\--connect qemu:///system \--cdrom/var/lib/libvirt/boot/ubuntu-20.04.5-live-server-amd64.iso \--networkbridgevirbr0,modelvirtio \--graphics vnc \--disk path/var/lib/libvirt/images/ubuntu20.qcow2,size20,busvirtio,formatqcow2注意事项
开启SSHConfigure Proxy可选:http://mirrors.aliyun.com/ubuntu/
重启虚机
virsh shutdown ubuntu20
virsh start ubuntu20通过远程桌面登录ubuntu20.04,查看IP(如:192.168.122.140)
virt-viewer在物理机上通过SSH登录虚机
ssh kvm192.168.122.140
sudo su修改为静态IP
cat /etc/netplan/00-installer-config.yaml -EOF
network:version: 2renderer: networkdethernets:ens3:addresses:- 192.168.122.140/24gateway4: 192.168.122.1nameservers:addresses: [8.8.8.8,8.8.4.4]
EOF
netplan apply更新apt源
sed -i shttp://.*archive.ubuntu.comhttp://repo.huaweicloud.comg /etc/apt/sources.list
sed -i shttp://.*security.ubuntu.comhttp://repo.huaweicloud.comg /etc/apt/sources.list
apt update
apt install net-tools -y关闭swap
sudo sed -i s/.*swap.*/#/ /etc/fstab
swapoff -a开启网络转发
bash -c cat /etc/sysctl.conf EOF
net.ipv4.ip_forward 1
net.bridge.bridge-nf-call-iptables 1
EOF安装docker-ce
sudo apt install -y apt-transport-https ca-certificates software-properties-common
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg |sudo apt-key add -
sudo add-apt-repository deb [archamd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable
sudo apt-cache madison docker-ce
dpkg -l | grep docker
apt remove --purge docker-ce*
sudo apt install docker-ce5:19.03.15~3-0~ubuntu-focal docker-ce-cli5:19.03.15~3-0~ubuntu-focal containerd.io -y设置docker国内镜像
bash -c cat /etc/docker/daemon.json EOF
{dns: [8.8.8.8, 8.8.4.4],registry-mirrors: [https://docker.m.daocloud.io/,https://huecker.io/,https://dockerhub.timeweb.cloud,https://noohub.ru/,https://dockerproxy.com,https://docker.mirrors.ustc.edu.cn,https://docker.nju.edu.cn,https://xx4bwyg2.mirror.aliyuncs.com,http://f1361db2.m.daocloud.io,https://registry.docker-cn.com,http://hub-mirror.c.163.com]
}
EOF
systemctl restart docker安装kubelet
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg |sudo apt-key add -
sudo bash -c cat /etc/apt/sources.list.d/kubernetes.list EOF
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
sudo apt install -y kubeadm1.20.0-00 kubelet1.20.0-00 kubectl1.20.0-00
systemctl enable kubelet sudo systemctl start kubelet创建K8S集群
rm /var/lib/etcd -rf
kubeadm reset
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.0 --pod-network-cidr10.244.0.0/16mkdir -p $HOME/.kube
sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl get pods --all-namespaces
#等待所有pod为running状态
kubectl get node输出
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-jvlns 1/1 Running 0 17m
kube-system coredns-7f89b7bc75-558sb 0/1 Running 0 17m
kube-system coredns-7f89b7bc75-5mhgm 0/1 Running 0 17m
kube-system etcd-111111 0/1 Running 1 17m
kube-system kube-apiserver-111111 1/1 Running 1 17m
kube-system kube-controller-manager-111111 0/1 Running 1 17m
kube-system kube-proxy-g7nsd 1/1 Running 1 17m
kube-system kube-scheduler-111111 0/1 Running 1 17m关闭虚机
poweroff在物理机上,克隆出二台虚机,设置成不同的MAC
virt-clone -o ubuntu20 -n ubuntu20_node1 -f /var/lib/libvirt/images/ubuntu20_node1.qcow2 --mac 52:54:00:3b:d9:17
virt-clone -o ubuntu20 -n ubuntu20_node2 -f /var/lib/libvirt/images/ubuntu20_node2.qcow2 --mac 52:54:00:3b:d9:27依次启动三台虚机
virsh start ubuntu20_node1
virsh start ubuntu20_node2
virsh start ubuntu20每启动一台node节点,执行以下步骤
修改/etc/netplan/00-installer-config.yaml中的IP地址,之后执行netplan apply生效
通过ssh登录ubuntu20节点,获取join命令
kubeadm token create --print-join-command输出
kubeadm join 192.168.122.140:6443 --token v0wuxs.cqduc5dw0t50fis6 \--discovery-token-ca-cert-hash sha256:aa14d393d6e693d6a1bea6e6b6d75c55e3bb38a29071fe7166ce9d49606b6b0e通过ssh登录ubuntu20_node1,将其加入集群
# 修改主机名
hostnamectl set-hostname node1# join到K8S集群
kubeadm reset
rm -f /etc/kubernetes/pki/ca.crt /etc/kubernetes/kubelet.conf
kubeadm join 192.168.122.140:6443 --token v0wuxs.cqduc5dw0t50fis6 \--discovery-token-ca-cert-hash sha256:aa14d393d6e693d6a1bea6e6b6d75c55e3bb38a29071fe7166ce9d49606b6b0e通过ssh登录ubuntu20_node2,将其加入集群
# 修改主机名
hostnamectl set-hostname node2# join到K8S集群
kubeadm reset
rm -f /etc/kubernetes/pki/ca.crt /etc/kubernetes/kubelet.conf
kubeadm join 192.168.122.140:6443 --token v0wuxs.cqduc5dw0t50fis6 \--discovery-token-ca-cert-hash sha256:aa14d393d6e693d6a1bea6e6b6d75c55e3bb38a29071fe7166ce9d49606b6b0e回到ubuntu20节点,获取node列表,设置node1、node2为工作节点
kubectl get nodes
kubectl label nodes node1 node-role.kubernetes.io/worker
kubectl label nodes node2 node-role.kubernetes.io/worker
kubectl get nodes --show-labels在ubuntu20上安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash在ubuntu20上创建Helm工程
# 创建工程
helm create llama-training
cd llama-training# 删除无用的文件
rm templates/deployment.yaml
rm templates/service.yaml
rm templates/ingress.yaml
rm -rf templates/tests
rm templates/hpa.yaml
rm templates/serviceaccount.yaml
rm templates/NOTES.txt# 创建 values.yaml 文件包含可变参数
cat values.yaml EOF
replicaCount: 2
image:repository: ubuntutag: 20.04pullPolicy: IfNotPresent
masterPort: 29500
worldSize: 16
EOF# 创建 StatefulSet 模板为每个 Pod 分配稳定的主机名
cat templates/statefulset.yaml -EOF
apiVersion: apps/v1
kind: StatefulSet
metadata:name: {{ include llama-training.fullname . }}labels:{{- include llama-training.labels . | nindent 4 }}
spec:serviceName: {{ include llama-training.fullname . }}-headlessreplicas: {{ .Values.replicaCount }}selector:matchLabels:{{- include llama-training.selectorLabels . | nindent 6 }}template:metadata:labels:{{- include llama-training.selectorLabels . | nindent 8 }}spec:containers:- name: {{ .Chart.Name }}image: {{ .Values.image.repository }}:{{ .Values.image.tag }}imagePullPolicy: {{ .Values.image.pullPolicy }}securityContext:allowPrivilegeEscalation: falseenv:- name: MASTER_ADDRvalue: {{ include llama-training.fullname . }}-headless- name: MASTER_PORTvalue: {{ .Values.masterPort }}- name: WORLD_SIZEvalue: {{ .Values.worldSize }}command: [ /bin/bash, -c, -- ]args: [ while true; do sleep 30; done; ]
EOF# 创建 Headless Service让 Pod 之间可以通过域名访问解决 IP 地址不固定的问题
cat templates/headless-service.yaml -EOF
apiVersion: v1
kind: Service
metadata:name: {{ include llama-training.fullname . }}-headlesslabels:{{- include llama-training.labels . | nindent 4 }}
spec:clusterIP: None # 使其成为 Headless Serviceselector:{{- include llama-training.selectorLabels . | nindent 4 }}
EOF# 设置网络策略让 Pod 可以访问外网
cat templates/networkpolicy.yaml -EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: {{ include llama-training.fullname . }}-egressnamespace: {{ .Release.Namespace }}labels:{{- include llama-training.labels . | nindent 4 }}
spec:podSelector:matchLabels:{{- include llama-training.selectorLabels . | nindent 6 }}policyTypes:- Egressegress:- {}
EOF在ubuntu20上通过Helm命令创建pod
helm install llama-training .
kubectl get pods -o wide输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
llama-training-0 1/1 Running 0 15s 10.244.2.194 node1 none none
llama-training-1 1/1 Running 0 14s 10.244.1.106 master none none获取K8S集群的DNS服务器地址
kubectl get endpoints -n kube-system -o wide|grep kube-dnskube-dns 10.244.1.104:53,10.244.1.105:53,10.244.1.104:53 3 more... 63m进入第一个pod,配置DNS,使其能通过域名访问pod1
# 进入pod
kubectl exec -it llama-training-0 -- bash# 配置DNS
cat /etc/resolv.conf -EOF
nameserver 10.244.1.104
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
nameserver 8.8.8.8
EOF# 下载相关工具
apt update
apt install net-tools iputils-ping -y# 通过域名ping二个pod
ping llama-training-0.llama-training-headless.default.svc.cluster.local -c 2
ping llama-training-1.llama-training-headless.default.svc.cluster.local -c 2# 退出
exit输出
64 bytes from llama-training-0.llama-training-headless.default.svc.cluster.local (10.244.2.194): icmp_seq1 ttl64 time0.035 ms
64 bytes from llama-training-0.llama-training-headless.default.svc.cluster.local (10.244.2.194): icmp_seq2 ttl64 time0.032 ms64 bytes from llama-training-1.llama-training-headless.default.svc.cluster.local (10.244.1.106): icmp_seq1 ttl62 time0.319 ms
64 bytes from llama-training-1.llama-training-headless.default.svc.cluster.local (10.244.1.106): icmp_seq2 ttl62 time0.457 ms进入第二个pod,配置DNS,使能通过域名访问pod0
# 进入pod
kubectl exec -it llama-training-1 -- bash# 配置DNS
cat /etc/resolv.conf -EOF
nameserver 10.244.1.104
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
nameserver 8.8.8.8
EOF# 下载相关工具
apt update
apt install net-tools iputils-ping -y# 通过域名ping二个pod
ping llama-training-0.llama-training-headless.default.svc.cluster.local -c 2
ping llama-training-1.llama-training-headless.default.svc.cluster.local -c 2# 退出
exit输出
64 bytes from llama-training-0.llama-training-headless.default.svc.cluster.local (10.244.2.194): icmp_seq1 ttl64 time0.035 ms
64 bytes from llama-training-0.llama-training-headless.default.svc.cluster.local (10.244.2.194): icmp_seq2 ttl64 time0.032 ms64 bytes from llama-training-1.llama-training-headless.default.svc.cluster.local (10.244.1.106): icmp_seq1 ttl62 time0.319 ms
64 bytes from llama-training-1.llama-training-headless.default.svc.cluster.local (10.244.1.106): icmp_seq2 ttl62 time0.457 ms删除资源
helm uninstall llama-training
kubectl get pods -o wide
# 等待资源释放3.遇到的问题及解决办法
“cni0” already has an IP address different from
ifconfig cni0 down
ip link delete cni0DNC异常,重启 CoreDNS
kubectl delete pod -n kube-system -l k8s-appkube-dns
kubectl get pods -n kube-system三.补充知识点 在 Kubernetesk8s中Pod 是最小的可部署单位它代表了在集群中运行的一个或多个容器。每个 Pod 都运行在单个节点服务器上无法跨越多个节点。也就是说一个 Pod 不能同时分布在多个服务器上运行。
如果您需要在多个服务器上运行应用程序以实现高可用性和负载均衡您可以使用 Deployment、ReplicaSet 或 StatefulSet 等更高级别的控制器来管理多个 Pod 实例。Kubernetes 会根据资源情况和调度策略将这些 Pod 分布到集群中的不同节点上运行。
总结来说Pod 本身不能跨服务器但您可以通过创建多个 Pod并利用 Kubernetes 的调度和管理功能让这些 Pod 分布在不同的节点上以满足跨服务器的需求。 在Kubernetes中Pod之间可以通过主机名进行访问通常是通过以下几种方式实现的 直接使用Pod的DNS每个Pod在Kubernetes集群中都有一个DNS条目你可以直接使用Pod的名称来进行访问不过这种方法不推荐用在生产环境因为Pod的IP地址会随着重启发生变化。 使用Service进行访问 ClusterIP这是Kubernetes中Service的默认类型。Service为一组Pod提供了一个稳定的IP地址和DNS名称。你可以通过Service的名称来访问PodService会自动进行负载均衡。 Headless Service如果需要直接获取Pod的IP地址可以创建一个Headless Service。通过将Service的clusterIP字段设置为None来创建。这样Kubernetes会为这个Service的每个Pod创建一个DNS记录。 StatefulSets 对于有状态应用比如ZooKeeper、Cassandra等可以使用StatefulSets来部署。这种资源类型会为每个Pod分配稳定的主机名格式通常为podname.headless-service-name.namespace.svc.cluster.local。 在 Kubernetes 中Deployment 和 StatefulSet 是两种常用的工作负载Workload资源类型它们用于管理 Pod 的部署和伸缩。虽然它们都可以用于管理应用程序的副本但它们在处理 Pod 的方式和适用的场景上有着显著的区别。
以下将详细解释 Deployment 和 StatefulSet 的主要区别以及它们各自的适用场景。 1. Deployment
特点
无状态服务StatelessDeployment 主要用于管理无状态的应用程序如 Web 前端、API 服务器等。Pod 的可互换性Deployment 中的所有 Pod 都是可互换的没有特定的身份。
行为
滚动更新Rolling Update支持无中断地更新应用程序到新版本。Pods 的命名Pod 的名称是随机生成的不保证稳定的主机名Hostname或网络标识Network Identity。副本数Replica管理可以轻松地水平伸缩 Pod 的数量。
适用场景
无需持久化存储的无状态应用。对于应用程序的实例间没有严格的顺序或身份需求。 2. StatefulSet
特点
有状态服务StatefulStatefulSet 用于管理有状态的应用程序如数据库例如 MySQL、MongoDB、分布式系统例如 Kafka、Zookeeper等。稳定的网络标识每个 Pod 都有一个稳定的、唯一的网络标识主机名该标识在 Pod 重建或调度到其他节点时保持不变。持久化存储可以为每个 Pod 关联一个持久化的存储卷PersistentVolume即使 Pod 被删除或重新调度数据也不会丢失。
行为
有序部署和更新Pod 的创建、更新和删除按照指定的顺序进行从 0 到 N-1。Pods 的命名Pod 的名称遵循固定的模式StatefulSet 名称-序号例如 my-app-0、my-app-1。持久化存储卷的绑定通过 VolumeClaimTemplates每个 Pod 都有自己的持久化存储卷。
适用场景
需要持久化数据的有状态应用程序。应用程序实例需要稳定的身份例如需要特定的主机名或 IP 地址。应用程序实例之间需要有序部署或终止。 3. 主要区别
特性DeploymentStatefulSet适用应用类型无状态应用程序有状态应用程序Pod 可互换性Pods 可互换无需稳定身份Pods 有稳定的身份不可互换网络标识Pod 名称随机无稳定的主机名或网络标识每个 Pod 有稳定的主机名网络标识长期保持不变存储卷通常使用共享的存储卷或不需要存储每个 Pod 关联一个专属的持久化存储卷部署和更新顺序无序Pods 可并行创建、更新或删除有序按照序号顺序创建、更新或删除 Pods滚动更新支持更新时可同时更新多个实例更新时按顺序进行一个接一个地更新 Pods扩缩容支持同时创建或删除多个 Pods按序号增减 Pods扩容时创建新的序号的 Pod 4. 具体示例
Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3 # 副本数可以随意调整selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21说明
部署了 3 个 Nginx 实例Pod 名称随机生成例如 nginx-deployment-xxxxxxxxxx-yyyyy。Pods 之间没有稳定的身份或顺序可以随意扩缩容。
StatefulSet 示例
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-statefulset
spec:serviceName: mysqlreplicas: 3 # 副本数按照序号创建selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: [ReadWriteOnce]storageClassName: standardresources:requests:storage: 10Gi说明
部署了 3 个 MySQL 实例Pod 名称为 mysql-statefulset-0、mysql-statefulset-1、mysql-statefulset-2。每个 Pod 都有一个名为 mysql-data 的持久化存储卷数据不会因 Pod 重建而丢失。Pods 的创建、更新和删除按序号进行确保顺序性和稳定性。 5. 选择使用 Deployment 还是 StatefulSet 的指南
使用 Deployment
无状态应用程序应用程序不需要持久化数据。Pod 可互换实例之间没有区别可以随意替换。无需稳定网络标识Pods 的主机名和 IP 地址可变。需要快速扩缩容可以迅速增加或减少 Pods 数量。快速滚动更新可同时更新多个实例减少更新时间。
使用 StatefulSet
有状态应用程序如数据库、缓存系统等需要持久化数据。Pod 需要稳定身份实例需要固定的主机名或网络标识。需要持久化存储每个 Pod 需要绑定独立的存储卷。有序部署和更新需要按照特定顺序启动或停止实例。对实例间关系有要求实例之间存在关联需要稳定的通信。 6. 常见误区
误用 Deployment 管理有状态服务可能导致数据丢失、网络通信失败等问题。误用 StatefulSet 管理无状态服务增加了不必要的复杂性降低了部署效率。 7. 总结
Deployment适用于无状态、可快速扩展的应用程序管理简单部署效率高。StatefulSet适用于有状态、需要持久化存储和稳定网络标识的应用程序确保应用程序的可靠性和一致性。
文章转载自: http://www.morning.jfcbs.cn.gov.cn.jfcbs.cn http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn http://www.morning.gwxwl.cn.gov.cn.gwxwl.cn http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.qrpdk.cn.gov.cn.qrpdk.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.xjqrn.cn.gov.cn.xjqrn.cn http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.gthgf.cn.gov.cn.gthgf.cn http://www.morning.zxqxx.cn.gov.cn.zxqxx.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.dyght.cn.gov.cn.dyght.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.trtdg.cn.gov.cn.trtdg.cn http://www.morning.pphbn.cn.gov.cn.pphbn.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn http://www.morning.ftmly.cn.gov.cn.ftmly.cn http://www.morning.pmjw.cn.gov.cn.pmjw.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.fyxtn.cn.gov.cn.fyxtn.cn http://www.morning.hnrls.cn.gov.cn.hnrls.cn http://www.morning.kqlrl.cn.gov.cn.kqlrl.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.rqqn.cn.gov.cn.rqqn.cn http://www.morning.tzcr.cn.gov.cn.tzcr.cn http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.zwmjq.cn.gov.cn.zwmjq.cn http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn http://www.morning.jfjpn.cn.gov.cn.jfjpn.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.fnmgr.cn.gov.cn.fnmgr.cn http://www.morning.chfxz.cn.gov.cn.chfxz.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.kwksj.cn.gov.cn.kwksj.cn http://www.morning.sfwcb.cn.gov.cn.sfwcb.cn http://www.morning.bynf.cn.gov.cn.bynf.cn http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.qrwjb.cn.gov.cn.qrwjb.cn http://www.morning.wbrf.cn.gov.cn.wbrf.cn http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.drcnn.cn.gov.cn.drcnn.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.zydr.cn.gov.cn.zydr.cn http://www.morning.srgbr.cn.gov.cn.srgbr.cn http://www.morning.qjngk.cn.gov.cn.qjngk.cn http://www.morning.dglszn.com.gov.cn.dglszn.com http://www.morning.njftk.cn.gov.cn.njftk.cn http://www.morning.c7625.cn.gov.cn.c7625.cn http://www.morning.jynzb.cn.gov.cn.jynzb.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.frzdt.cn.gov.cn.frzdt.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn