kubeadm 搭建 K8s

本篇主要记录一下 使用 kubeadm 搭建 k8s 详细过程 ,环境使用 VirtualBox 构建的3台虚拟机

1.环境准备

  • 操作系统:Centos7 (CentOS Linux release 7.9.2009)
  • Master 主节点: 1台 虚拟机
  • Node 计算节点: 2台 虚拟机
  • K8s version:v1.23.5 (选的较新的版本)
  • Docker version:20.10.14

虚拟机创建我就不详细展开了

2.虚拟机网络配置(保证能访问外网)

虚拟机网卡 选择的是 1.网络地址转换NAT (主要用来访问外网的) 2.仅主机网络 (主要用来宿主机访问虚拟机的)

把对应的 ip 设置如下

kube-master 192.168.56.20

kube-node-1 192.168.56.21

kube-node-2 192.168.56.22

2.1 3台虚拟机 静态ip配置

cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

  1. TYPE="Ethernet"
  2. PROXY_METHOD="none"
  3. BROWSER_ONLY="no"
  4. BOOTPROTO="none" #关闭
  5. DEFROUTE="yes"
  6. IPV4_FAILURE_FATAL="no"
  7. IPV6INIT="yes"
  8. IPV6_AUTOCONF="yes"
  9. IPV6_DEFROUTE="yes"
  10. IPV6_FAILURE_FATAL="no"
  11. IPV6_ADDR_GEN_MODE="stable-privacy"
  12. NAME="enp0s3"
  13. UUID="35eac2d4-234d-4859-848e-ed2a30a64a81"
  14. DEVICE="enp0s3"
  15. #添加部分
  16. IPADDR="10.0.2.20"
  17. PREFIX="24"
  18. GATEWAY="10.0.2.2"
  19. DNS1="10.0.2.3"
  20. DNS2="114.114.114.114"
  21. ONBOOT="yes"

cat /etc/sysconfig/network-scripts/ifcfg-enp0s8

  1. TYPE=Ethernet
  2. PROXY_METHOD=none
  3. BROWSER_ONLY=no
  4. BOOTPROTO=static #修改为 static 静态ip
  5. DEFROUTE=yes
  6. IPV4_FAILURE_FATAL=no
  7. IPV6INIT=yes
  8. IPV6_AUTOCONF=yes
  9. IPV6_DEFROUTE=yes
  10. IPV6_FAILURE_FATAL=no
  11. IPV6_ADDR_GEN_MODE=stable-privacy
  12. NAME=enp0s8
  13. UUID=d06bac6d-294f-4bfe-bf08-5cb65c0a431f
  14. DEVICE=enp0s8
  15. #新增部分
  16. IPADDR=192.168.56.20
  17. PREFIX=24
  18. ONBOOT=yes

2.2 虚拟机hosts 配置

在 3台虚拟机 /etc/hosts 中配置 如下

  1. 192.168.56.20 kube-master
  2. 192.168.56.21 kube-node-1
  3. 192.168.56.22 kube-node-2

3.k8s 基础环境设置

3.1 yum 换源(可选)

  1. yum -y install wget
  2. cd /etc/yum.repos.d
  3. mv CentOS-Base.repo CentOS-Base.repo.bak
  4. wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  5. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  6. yum clean all
  7. yum makecache #重新生成缓存

3.2 关闭 selinux

  1. setenforce 0 #临时关闭
  2. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久关闭

3.3 关闭swap分区或禁用swap文件

  1. swapoff -a
  2. # 注释掉关于swap分区的行
  3. yes | cp /etc/fstab /etc/fstab_bak
  4. cat /etc/fstab_bak |grep -v swap > /etc/fstab

3.4 允许iptables 检查桥接流量

  1. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  2. br_netfilter
  3. EOF
  4. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  5. net.bridge.bridge-nf-call-ip6tables = 1
  6. net.bridge.bridge-nf-call-iptables = 1
  7. EOF
  8. sudo sysctl --system

3.5 关闭防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld

3.6 /proc/sys/net/ipv4/ip_forward

  1. echo 1 > /proc/sys/net/ipv4/ip_forward

4.kubectl、kubeadm、kubelet的安装

注意 先换源 https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.64be1b11iddYWH 阿里换源文档

4.1 添加Kubernetes的alibaba yum源

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF
  10. yum install -y kubelet kubeadm kubectl

4.2 安装 kubelet kubeadm kubectl

  1. yum install -y kubelet kubeadm kubectl
  2. systemctl enable kubelet && systemctl start kubelet

由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装

4.3 启动kubelet 服务

  1. systemctl enable kubelet && systemctl start kubelet

此时执行systemctl status kubelet查看服务状态,此时肯定有错误(因为我们还未进行初始化操作),错误可使用journalctl -xe查看错误信息。

5.Docker 安装和配置

Docker centos 安装文档 地址 https://docs.docker.com/engine/install/centos/

5.1 Docker 安装

  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo
  5. sudo yum install docker-ce docker-ce-cli containerd.io
  6. # 也可以安装其他版本 yum list docker-ce --showduplicates | sort -r
  7. # sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  8. #启动docker
  9. sudo systemctl enable docker && systemctl start docker

5.2 Docker 镜像源更换

  1. sudo tee /etc/docker/daemon.json <<-'EOF'
  2. {
  3. "registry-mirrors": ["https://9xxxx1clo.mirror.aliyuncs.com"] #请更换自己的 阿里云镜像地址
  4. }
  5. EOF

5.3 Docker 配置cgroup-driver

由于 cgroup-driver ,默认docker 是 cgroupfs ,而k8s 默认是 systemd,所以需要设置 docker 的 cgroup 为 systemd

推荐使用方式二进行修改

  1. #查看cgroup-driver
  2. docker info | grep -i cgroup
  3. # 方式一 追加 --exec-opt native.cgroupdriver=systemd 参数
  4. sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
  5. systemctl daemon-reload # 重新加载服务
  6. systemctl enable docker # 启用docker服务(开机自起)
  7. systemctl restart docker # 启动docker服务
  8. # 方式二 修改docker配置文件
  9. vim /etc/docker/daemon.json
  10. {
  11. "exec-opts": ["native.cgroupdriver=systemd"]
  12. }

5.4 拉取k8s所需镜像

可以通过

kubeadm config images list 查看 所需的镜像

  1. kubeadm config images list
  2. k8s.gcr.io/kube-apiserver:v1.23.5
  3. k8s.gcr.io/kube-controller-manager:v1.23.5
  4. k8s.gcr.io/kube-scheduler:v1.23.5
  5. k8s.gcr.io/kube-proxy:v1.23.5
  6. k8s.gcr.io/pause:3.6
  7. k8s.gcr.io/etcd:3.5.1-0
  8. k8s.gcr.io/coredns/coredns:v1.8.6

如果拉取不到镜像 可以通过 去 docker hub 上查找对应的 镜像

  1. docker pull k8simage/kube-apiserver:v1.23.5
  2. docker tag k8simage/kube-apiserver:v1.23.5 k8s.gcr.io/kube-apiserver:v1.23.5 #重新tag改成上面所需的镜像即可, 其他的都按照这样来

Tips: 完成上面操作后 你可以通过 docker save 导出镜像,以后再用的时候 可以通过 docker image load < 进行离线加载镜像

  1. #导出镜像 ,批量导出所有镜像
  2. docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o k8s.images.tar
  3. #导入镜像 ,注意 是 < 不是 > 。。 > 后会导致tar 无法使用需要重新上传
  4. docker image load < ...tar/zip

6.kube-master 节点 初始化

我这里选的是 flannel 网络插件,先来看看 flannel 的配置文件

6.1 查看flannel 网络范围

flannel.yml https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

不同的 网络插件 网络范围不同

6.2 kubeadm init 初始化

  1. kubeadm init --pod-network-cidr=10.244.0.0/16 \ #网卡插件的 网络范围 --apiserver-advertise-address=192.168.56.20 #master 的 ip 地址

等一会就会有如下结果

可以把 kubeadm join 命令记下来 便于后面使用 保存输出中的kubeadm join部分内容,用于添加node节点,或者使用kubeadm token listkubeadm token create --print-join-command查看

执行后续步骤,可以看到提示

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.3 网络插件flannel 配置

前面提到了flannel 把对应的flannel.yml文件下载到服务器中,可以使用wget

可以看到 在没配置 flannel 的时候 coredns 一直是 pending 状态

  1. wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml #可能会下载不到,文章最后我会提供内容,直接copy过去即可
  2. #Tips: 可能需要指定一下网卡 ,在kube-flannel.yml中 - /opt/bin/flanneld args: 后面添加
  3. #- --iface=enp0s8 # 需要指定网卡,否则可能k8s会导致使用错误的网卡
  4. kubectl apply -f kube-flannel.yml #应用该文件

  1. kubectl get pods --all-namespaces -o wide #查看是否安装成功,它会在 master 和 node 节点上都会自动部署

最后通过 kubectl get nodes -o wide 查看 节点

7.kube-node 节点初始化

7.1 查看token

可以通过该命令进行查看 token

  1. kubeadm token create --print-join-command
  2. #kubeadm join kube-master:6443 --token ii5xyw.mywlktar1e8f60cu --discovery-token-ca-cert-hash sha256:358f92418178342f79aa7b049e6c18a423f0fb88186189142459016fe6efb8e7

7.2 node节点上 执行 kubeadmin join

  1. kubeadm join kube-master:6443 --token ii5xyw.mywlktar1e8f60cu --discovery-token-ca-cert-hash sha256:358f92418178342f79aa7b049e6c18a423f0fb88186189142459016fe6efb8e7

7.3 在master 上查看结果

  1. watch kubectl get nodes -o wide #可以通过watch 实时监听 加入情况

至此使用 kubeadm 已经成功搭建k8s 集群

总结

本篇主要讲解了 如何使用 kubeadm 进行搭建 k8s 集群 ,搭建的是 k8s 较新版本 v1.23.5 版本,使用kubeadm 搭建相对来说还是比较简单的 。

k8s官网文档

https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

阿里 k8s 更换镜像文档

https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.64be1b11iddYWH

Docker hub 地址

https://hub.docker.com/r/k8simage/

Docker 安装地址

https://docs.docker.com/engine/install/centos/

flannel.yml 文件

  1. ---
  2. apiVersion: policy/v1beta1
  3. kind: PodSecurityPolicy
  4. metadata:
  5. name: psp.flannel.unprivileged
  6. annotations:
  7. seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
  8. seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
  9. apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
  10. apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
  11. spec:
  12. privileged: false
  13. volumes:
  14. - configMap
  15. - secret
  16. - emptyDir
  17. - hostPath
  18. allowedHostPaths:
  19. - pathPrefix: "/etc/cni/net.d"
  20. - pathPrefix: "/etc/kube-flannel"
  21. - pathPrefix: "/run/flannel"
  22. readOnlyRootFilesystem: false
  23. # Users and groups
  24. runAsUser:
  25. rule: RunAsAny
  26. supplementalGroups:
  27. rule: RunAsAny
  28. fsGroup:
  29. rule: RunAsAny
  30. # Privilege Escalation
  31. allowPrivilegeEscalation: false
  32. defaultAllowPrivilegeEscalation: false
  33. # Capabilities
  34. allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
  35. defaultAddCapabilities: []
  36. requiredDropCapabilities: []
  37. # Host namespaces
  38. hostPID: false
  39. hostIPC: false
  40. hostNetwork: true
  41. hostPorts:
  42. - min: 0
  43. max: 65535
  44. # SELinux
  45. seLinux:
  46. # SELinux is unused in CaaSP
  47. rule: 'RunAsAny'
  48. ---
  49. kind: ClusterRole
  50. apiVersion: rbac.authorization.k8s.io/v1
  51. metadata:
  52. name: flannel
  53. rules:
  54. - apiGroups: ['extensions']
  55. resources: ['podsecuritypolicies']
  56. verbs: ['use']
  57. resourceNames: ['psp.flannel.unprivileged']
  58. - apiGroups:
  59. - ""
  60. resources:
  61. - pods
  62. verbs:
  63. - get
  64. - apiGroups:
  65. - ""
  66. resources:
  67. - nodes
  68. verbs:
  69. - list
  70. - watch
  71. - apiGroups:
  72. - ""
  73. resources:
  74. - nodes/status
  75. verbs:
  76. - patch
  77. ---
  78. kind: ClusterRoleBinding
  79. apiVersion: rbac.authorization.k8s.io/v1
  80. metadata:
  81. name: flannel
  82. roleRef:
  83. apiGroup: rbac.authorization.k8s.io
  84. kind: ClusterRole
  85. name: flannel
  86. subjects:
  87. - kind: ServiceAccount
  88. name: flannel
  89. namespace: kube-system
  90. ---
  91. apiVersion: v1
  92. kind: ServiceAccount
  93. metadata:
  94. name: flannel
  95. namespace: kube-system
  96. ---
  97. kind: ConfigMap
  98. apiVersion: v1
  99. metadata:
  100. name: kube-flannel-cfg
  101. namespace: kube-system
  102. labels:
  103. tier: node
  104. app: flannel
  105. data:
  106. cni-conf.json: |
  107. {
  108. "name": "cbr0",
  109. "cniVersion": "0.3.1",
  110. "plugins": [
  111. {
  112. "type": "flannel",
  113. "delegate": {
  114. "hairpinMode": true,
  115. "isDefaultGateway": true
  116. }
  117. },
  118. {
  119. "type": "portmap",
  120. "capabilities": {
  121. "portMappings": true
  122. }
  123. }
  124. ]
  125. }
  126. net-conf.json: |
  127. {
  128. "Network": "10.244.0.0/16",
  129. "Backend": {
  130. "Type": "vxlan"
  131. }
  132. }
  133. ---
  134. apiVersion: apps/v1
  135. kind: DaemonSet
  136. metadata:
  137. name: kube-flannel-ds
  138. namespace: kube-system
  139. labels:
  140. tier: node
  141. app: flannel
  142. spec:
  143. selector:
  144. matchLabels:
  145. app: flannel
  146. template:
  147. metadata:
  148. labels:
  149. tier: node
  150. app: flannel
  151. spec:
  152. affinity:
  153. nodeAffinity:
  154. requiredDuringSchedulingIgnoredDuringExecution:
  155. nodeSelectorTerms:
  156. - matchExpressions:
  157. - key: kubernetes.io/os
  158. operator: In
  159. values:
  160. - linux
  161. hostNetwork: true
  162. priorityClassName: system-node-critical
  163. tolerations:
  164. - operator: Exists
  165. effect: NoSchedule
  166. serviceAccountName: flannel
  167. initContainers:
  168. - name: install-cni-plugin
  169. #image: flannelcni/flannel-cni-plugin:v1.0.1 for ppc64le and mips64le (dockerhub limitations may apply)
  170. image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
  171. command:
  172. - cp
  173. args:
  174. - -f
  175. - /flannel
  176. - /opt/cni/bin/flannel
  177. volumeMounts:
  178. - name: cni-plugin
  179. mountPath: /opt/cni/bin
  180. - name: install-cni
  181. #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply)
  182. image: rancher/mirrored-flannelcni-flannel:v0.17.0
  183. command:
  184. - cp
  185. args:
  186. - -f
  187. - /etc/kube-flannel/cni-conf.json
  188. - /etc/cni/net.d/10-flannel.conflist
  189. volumeMounts:
  190. - name: cni
  191. mountPath: /etc/cni/net.d
  192. - name: flannel-cfg
  193. mountPath: /etc/kube-flannel/
  194. containers:
  195. - name: kube-flannel
  196. #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply)
  197. image: rancher/mirrored-flannelcni-flannel:v0.17.0
  198. command:
  199. - /opt/bin/flanneld
  200. args:
  201. #- --iface=enp0s8 # 需要指定网卡,否则可能会导致问题
  202. - --ip-masq
  203. - --kube-subnet-mgr
  204. resources:
  205. requests:
  206. cpu: "100m"
  207. memory: "50Mi"
  208. limits:
  209. cpu: "100m"
  210. memory: "50Mi"
  211. securityContext:
  212. privileged: false
  213. capabilities:
  214. add: ["NET_ADMIN", "NET_RAW"]
  215. env:
  216. - name: POD_NAME
  217. valueFrom:
  218. fieldRef:
  219. fieldPath: metadata.name
  220. - name: POD_NAMESPACE
  221. valueFrom:
  222. fieldRef:
  223. fieldPath: metadata.namespace
  224. - name: EVENT_QUEUE_DEPTH
  225. value: "5000"
  226. volumeMounts:
  227. - name: run
  228. mountPath: /run/flannel
  229. - name: flannel-cfg
  230. mountPath: /etc/kube-flannel/
  231. - name: xtables-lock
  232. mountPath: /run/xtables.lock
  233. volumes:
  234. - name: run
  235. hostPath:
  236. path: /run/flannel
  237. - name: cni-plugin
  238. hostPath:
  239. path: /opt/cni/bin
  240. - name: cni
  241. hostPath:
  242. path: /etc/cni/net.d
  243. - name: flannel-cfg
  244. configMap:
  245. name: kube-flannel-cfg
  246. - name: xtables-lock
  247. hostPath:
  248. path: /run/xtables.lock
  249. type: FileOrCreate

欢迎大家访问 个人博客 Johnny小屋

kubeadm 搭建 K8s的更多相关文章

  1. kubeadm搭建K8s集群及Pod初体验

    基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...

  2. kubeadm 搭建 K8S集群

    kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...

  3. CentOS7 使用 kubeadm 搭建 k8s 集群

    一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...

  4. centos7 kubeadm 搭建k8s

    Centos 7 搭建 kubernetes 集群环境 一.介绍 本次是centos7 搭建kubernetes1.15.9 通过kubeadm 的形式搭建 二.准备 > centos 7 (镜 ...

  5. 使用kubeadm搭建k8s集群

    1.初始化集群信息 这里我才用了两台虚拟机来搭建集群,一个master,一个node 角色 IP地址 组件 master 192.168.126.137 docker, kubectl, kubead ...

  6. 使用kubeadm搭建高可用k8s v1.16.3集群

    目录 1.部署环境说明 2.集群架构及部署准备工作 2.1.集群架构说明 2.2.修改hosts及hostname 2.3.其他准备 3.部署keepalived 3.1.安装 3.2.配置 3.3. ...

  7. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

  8. kubeadm安装k8s测试环境

    目标是搭建一个可测试的k8s环境,使用的工具 kubeadm, 最终一个master节点(非高可用),2个node节点. 环境以及版本 Centos7.3 kubeadm 1.11.1 kubelet ...

  9. kubernetes系列:(一)、kubeadm搭建kubernetes(v1.13.1)单节点集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的k8s集群. 节点部署信息 节点主机名 节点IP 节点角 ...

随机推荐

  1. 从零开始,开发一个 Web Office 套件(13):删除、替换已选中文字

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  2. C++ TCHAR* 与char* 互转

    C++ TCHAR* 与char* 互转 在MSDN中有这么一段: Note: The ANSI code pages can be different on different computers, ...

  3. v-for key值?

    不写key值会报warning, 和react的array渲染类似. 根据diff算法, 修改数组后, 写key值会复用, 不写会重新生成, 造成性能浪费或某些不必要的错误

  4. Spring-MVC 里面的ModelAndView

    作用: 由于本身http是无状态的并不会保存什么请求信息.  但是目标页面可能又需要一些信息.这时候可以用ModelAndView存放一些业务数据之类等.然后返回给页面 用法: 比较重要的方法: 往对 ...

  5. resion 学习笔记

    resin是一个非常流行的web引用服务器,对servlet和jsp提供了良好的支持,自身采用java开发,支持集群,还支持PHP. resin分为普通版和专业版,主要区别是专业版支持缓存和负载均衡. ...

  6. solr集群搭建,zookeeper集群管理

    1. 第一步 把solrhome中的配置文件上传到zookeeper集群.使用zookeeper的客户端上传. 客户端命令位置:/root/solr-4.10.3/example/scripts/cl ...

  7. 安装Prettier

    安装Prettier Prettier是优化代码格式的工具,可优化JavaScript.TypeScript.JSON等代码及配置文件. 使用命令yarn add -D --exact prettie ...

  8. 使用Node.js版本管理器

    使用Node.js版本管理器 完全卸载Node.js 清除Package缓存:npm cache clean --force 卸载Node.js:wmic product where caption= ...

  9. jQ模拟打字效果插件typetype

    typetype是一个jquery插件,可以模拟人类的打字效果. 效果图如下所示: 查看演示 http://weber.pub/demo/160828/jQuery.Type/jQuery.type. ...

  10. nginx开启gzip和缓存配置

    # 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用C ...