kubernetes 概念与安装(一)

1**、云原生的基础概述**

云原生的定义

1.1****云原生的发展介绍

云原生技术的主要发展历程如下:
2004年 : Google 开始在内部大规模使用容器技术。
2008年 : Google 将 Cgroups 技术合并进 Linux 内核,为容器化技术奠定基础。
2013年 : Docker 项目正式发布,推动容器技术进入开源领域。
2014年 : Kubernetes 项目正式发布,成为容器编排的行业标准。
2015年 : Google 、 Redhat 、微软等共同发起成立 CNCF (云原生计算基金会),推进云原生技术的开源生态。
2017年 : CNCF 成员达到 170 个,基金项目数量为 14 个。
2018年 : CNCF 迎来三周年,成员数达 195 个,基金项目 19 个。

1.2****云原生的定义

云原生技术帮助企业在公有云、私有云和混合云等动态环境中构建和运行可弹性扩展的应用。
· 公有云:公有云是一种云计算服务,其基础设施由云服务提供商在互联网上公开提供。与私有云不同,公有云上的资源是共享的,用户可以按需使用和付费,无需拥有或管理基础设施。公有云服务通常提供存储、计算、网络和应用程序服务等资源。常见的公有云服务提供商包括亚马逊云、微软Azure 、谷歌云等。
· 私有云:私有云是指一种云计算模式,是企业或组织在自己的数据中心中搭建的基于云计算技术的自有云平台。与公有云不同,私有云完全由企业自己拥有和控制,可以提供更高的安全性和灵活性,因为企业可以根据自身需求对云计算环境进行定制和管理,同时也不需要担心基础设施和数据被外部访问。因此,私有云通常被用于托管企业核心应用程序和敏感数据,以满足严格的规定和监管要求
· 混合云:混合云( Hybrid Cloud)是指由多个云计算架构、不同的云服务提供商或多种云计算部署模式组成的一个集成的云计算环境。混合云将公有云、私有云、本地 IT基础设施和第三方云服务有机地结合起来,以满足企业不同的应用场景和需求。
混合云由多个云环境组成,使得企业可以根据应用的不同需要选择最合适的云环境,使其最大化利用公有云提供的高度灵活性和弹性,同时也可以保留私有云提供的安全性、控制性和可靠性。
混合云的部署方式比较复杂,但能够提供更加灵活的云计算解决方案。在混合云中,企业可以将敏感数据存储在私有云中,同时运行不太敏感的应用程序和工作负载则可以在公有云中进行部署,这能够使得企业在降低成本的同时保持数据和隐私的安全性。

1.3****云原生的技术栈

云原生技术栈包括以下关键技术:
容器化:如 Docker 、 containerd ,提供应用的轻量级封装和环境一致性。
服务网格:例如 Istio ,管理服务之间的通信、安全性和流量控制。
微服务架构:将应用拆解为多个独立的服务,支持灵活扩展和独立部署。
不可变基础设施:服务一旦部署,便不再修改,通常使用版本化的镜像来保持一致性。
声明式API :通过定义期望的状态,由系统自动管理资源。
云原生 = 容器化 (docker+k8s) + 微服务( Microservices + 无服务( Serverless + DevOps + Service Mesh( 服务网格 ) + 云(Cloud)
云元素的四要素
· 微服务:几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒没b 格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无 系。微服务架构的好处就是按function 切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD 来搞。
· 容器化: Docker 是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用, K8S 是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker 和 K8S 都采用 Go 编写,都是好东西。
· DevOps:这是个组合词, Dev+Ops ,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps 应该还包括测试, DevOps 是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。
· 持续交付:持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

1.4****云原生的特征

云原生系统具备以下特征,确保其适应现代云计算环境的需求:
1) 符合 12 因素应用 :应用遵循 12 因素开发原则,确保可扩展性、无状态性、易维护等。
2) 面向微服务架构:应用拆解为独立的、松耦合的服务。
3) 自服务敏捷架构:开发人员可以自主创建和管理云资源,减少对运维的依赖。
4) 基于API 的协作 :通过 API 进行服务间的通信。
5) 抗脆弱性:系统具有自愈能力,能够应对不稳定的环境因素。
12 因素应用 的具体原则:
1) 基准代码:使用同一代码库进行版本控制,并支持多次部署。
2) 依赖管理:显式声明和隔离各依赖项,确保环境一致性。
3) 配置管理:配置项存储在环境中,避免硬编码。
4) 后端服务:外部服务作为附加资源使用。
5) 构建、发布、运行分离:清晰区分应用构建和运行阶段。
6) 无状态进程:应用以无状态进程运行,便于水平扩展。
7) 端口绑定:通过端口提供服务,确保应用独立性。
8) 并发处理:通过进程模型进行扩展。
9) 快速启动与优雅终止:应用启动迅速,并在终止时确保数据一致性。
10) 开发环境与生产环境一致:确保开发、预发布和生产环境尽量一致。
11) 日志管理:统一收集并展示日志信息,确保可追溯性。
12) 管理进程:管理性任务(如数据备份)应使用与常驻进程相同的运行环境。
通过遵循这些原则,云原生应用能够在云环境中灵活、安全且高效地运行。

2. K8S****是什么?

K8S 是 Kubernetes 的简写( K + "ubernetes" 中的 8 个字母 + S )
Kubernetes 是一个开源平台,用于 自动部署、扩展和管理容器化( containerized )应用程序它可以看作一个负责自动化运维、编排多个容器(如由 containerd 驱动的容器)的集群管理系统源起:Kubernetes 受 Google 的 Borg 系统启发,后使用 Go 语言重写并捐赠给 CNCF 名称含义:源自希腊语,意为 " 舵手 / 导航者"
官网:
-- 英文: https://kubernetes.io
-- 中文: https://kubernetes.io/zh-cn/docs
版本节奏:每年约四个发布版本(例如 1.12 、 1.15 、 1.17 ... 到 1.30 、 1.34 等)
2014年 Docker & Kubernetes 蜜月期
2015~2016年 Kubernetes & RKT vs Docker, 最终 Docker 胜出
2016年 Kubernetes 逐渐赢得任务编排的胜利
2017年 rkt 和 containerd 捐献给 CNCF
2020年 kubernetes 宣布废弃 dockershim ,但 Mirantis 和 Docker 宣布维护 dockershim
2022年 5 月 3 日, Kubernetes v1.24 正式发布,此版本提供了很多重要功能。该版本涉及 46 项增强功能: 其中 14 项已升级为稳定版, 15 项进入 beta 阶段, 13 项则刚刚进入 alpha 阶段。此外,另有 2 项功能被弃用、2 项功能被删除。
关键变动:从 Kubernetes 1.24 ,官方移除对 Docker 的内建支持(即移除 dockershim ),节点必须使用符合 CRI ( Container Runtime Interface )的运行时(如 containerd 、CRI-O 等)

3.为什么要用K8S**?**

Kubernetes 的设计初衷是解决传统部署方式在扩展、管理、容错等方面的困难。
以下是它主要解决的问题和带来的好处:
· 自动化运维:无须人工干预,实现一条命令或声明式方式完成部署、更新、扩容、缩容、删除等
· 弹性伸缩:依据指标( CPU 、内存、自定义指标等)自动扩展或缩减 Pod 副本数
· 容灾 / 自愈 :当某个节点或容器失败时, K8S 会自动重建或迁移 Pod ,保证副本数量和期望状态
· 服务发现与负载均衡:通过 Service 为 Pod 提供稳定的访问入口,并自动分发请求
· 滚动升级与回滚:支持渐进式升级,一旦出错可以回滚到之前版本
· 集中配置与密钥管理:通过 ConfigMap 、 Secret 等资源集中管理配置与敏感数据
· 存储编排:支持将外部存储( NFS 、 Ceph 、云存储等)纳入集群资源管理
· 批处理 / 定时任务 :支持 Job 、 CronJob 用于一次性或定时任务

4. Kubernetes****集群架构与组件

Kubernetes 采用 控制平面 + 工作节点的主从架构,控制平面负责调度与管理,节点负责运行实际的应用负载。

4.1****控制平面(Master / Control Plane)组件

|----------------------------------|-------------------------------------------------------------------|
| 组件 | 主要职责 |
| kube-apiserver | 集群的 API 接口入口,负责接收所有资源操作请求(增删改查、 Watch ) |
| kube-controller- manager | 运行多种控制器( Node 控制器、 ReplicaSet 控制器、 Service 控制器等),确保资源状态符合期望 |
| kube-scheduler | 对尚未调度的 Pod 选择合适的节点,基于预选( predicates)与优选( priorities / scoring )策略 |
| etcd | 分布式键值存储,用于持久化保存所有 Kubernetes 资源的状态数据 |

高可用建议 :在生产环境中,控制平面组件建议部署为多实例、高可用配置,避免单点故障。

4.2****工作节点(Node / Worker)组件

|-----------------------------------------------------------------------|----------------------------------------------------------------|
| 组件 | 主要职责 |
| kubelet | 节点上的代理,负责接收控制平面下发的 Pod 任务,监控、执行、汇报节点与 Pod 状态 |
| kube-roxy | 在节点上实现 Service 的网络规则与负载转发,通常通过 iptables、 ipvs 或其他网络模型 |
| container runtime containerd CRI-O 等) | 负责容器镜像拉取、容器启动 / 停止、资源隔离等底层行为(在 Kubernetes ≥ 1.24 中为必选 CRI 运行时) |

关于 Docker / dockershim containerd 的变动
· Kubernetes 从 1.20 开始宣布弃用内建对 Docker 的支持,逐步推动移除 dockershim
· 在 Kubernetes 1.24 中, dockershim 被正式移除,节点必须使用 CRI 兼容的运行时(如 containerd、 CRI-O 等)
· 虽然 Docker 的引擎不再被 Kubernetes 直接使用(即不作为 CRI 运行时),但其构建的镜像仍然兼容,因为镜像符合 OCI 标准
· containerd 是当前主流的轻量级 CRI 运行时,性能稳定、社区活跃

在你安装的是 K8S 1.28 的环境中,默认或者推荐的运行时就是 containerd 或 CRI-O ,而不是 Docker 。

5. Kubernetes****核心概念与资源对象

下面是 Kubernetes 中常见的、你需要掌握的核心概念和资源类型:

|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 概念 / 资源 | 含义与用途 |
| Pod | Kubernetes 中最小的可调度单位。可包含一个或多个容器,这些容器共享 网络、存储等资源。 |
| 控制器 Controller | 用来确保一定数量的 Pod 在运行、自动修复、扩缩、升级等。典型的控制器有: • Deployment (管理无状态应用), • ReplicaSet (维持 Pod 副本数), • StatefulSet (有状态服务), • DaemonSet (每节点运行一个Pod), • Job / CronJob (批处理 / 定时任务) |
| Service | 为一组 Pod 提供稳定且可达的访问入口,具有负载均衡功能。 Service 通过 标签选择器关联 Pod 。 |
| Ingress | 在 HTTP/HTTPS 层面上管理外部访问路由,将外部流量导入集群内的Service。 |
| Label / Annotation / Selector | Label 是资源的键值对标签,用于标识、组织和筛选资源; Annotation 是用于存放非标识性、较大元数据的字段;Selector 用于根据 Label 选择资源。 |
| Namespace (命 名空间) | 用于将一个 Kubernetes 集群逻辑上划分为多个隔离空间,以实现资源隔离、权限管理等。 |
| 资源定义结构 | Kubernetes 资源通常以 YAML/JSON 定义,具有 apiVersion 、 kind 、metadata 、 spec 、 status 等字段结构。 |

6. Kubernetes****核心能力与特性

· 自动伸缩( Horizontal Pod Autoscaler, Vertical Pod Autoscaler 等)
· 服务发现 & 负载均衡
· 滚动更新 / 回滚
· 容错 / 自愈
· 集中配置 / 密钥管理( ConfigMap / Secret
· 存储编排与持久化存储(PV / PVC / StorageClass
· 批处理 / 定时任务
· 资源隔离 / 配额 / 限制( ResourceQuota, LimitRange 等)
· 安全管理机制:如 RBAC (基于角色的访问控制)、 NetworkPolicy (网络策略)、 Pod 安全策略 / Pod 安全准入(安全设置)

**7.部署方式/**常见部署方案

|------------------------------------------|---------------------------------|
| 部署方式 | 主要适用场景 |
| Minikube | 在本地启动单节点 Kubernetes ,适合实验、学习、演示 |
| kubeadm | 官方推荐的快速部署工具,适合中小型集群 |
| 二进制 / 源码部署 | 手动控制所有组件、 TLS 证书等细节,适合高可控的生产环境 |
| 云托管服务 (如 GKE / EKS / AKS / 阿里 ACK 等) | 云厂商管理控制平面、节点、升级等,适合企业生产环境 |

对于自己搭建 K8S 1.28 的环境,选择 kubeadm + containerd 或者 二进制部署 + containerd更能兼顾灵活性与稳定性。

8**、kubeadm部署****k8s**

K8s-kubeadmin 1.20 安装

8.1 K8s****集群部署环境准备

8.1.1环境架构3master node 2****以上

|---------------|----------|----------|---------------|--------|
| IP | 主机名 | 操作系统 | kubelet版本 | 用途 |
| 192.168.10.11 | master01 | CentOS 7 | v1.20.11 | 管理节点 |
| 192.168.10.21 | node01 | CentOS 7 | v1.20.11 | 工作节点 |
| 192.168.10.20 | node02 | CentOS 7 | v1.20.11 | 工作节点 |

8.1.2****配置主机名

注:以下操作所有节点需要执行

复制代码
# 修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

# 配置主机映射
cat >>/etc/hosts <<EOF
192.168.10.19 master01
192.168.10.20 node01
192.168.10.21 node02
EOF

8.1.3关闭防火墙和selinux、swap分区

复制代码
#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#关闭增强功能
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 清空iptable规则
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

# 关闭swap分区
swapoff -a  #交换分区必须要关闭
sed -i '/swap/s/^/#/g' /etc/fstab   #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

8.1.4****配置内核参数和优化

复制代码
// 加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done


//调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

//生效参数
sysctl --system  

8.1.5 所有节点安装 docker

复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io

# 配置华为云加速器
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors":         ["https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。


systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 

docker info | grep "Cgroup Driver"
Cgroup Driver: systemd

8.2 安装kubeadm,kubelet和kubectl

8.2.1 所有节点添加阿里kubernetes

复制代码
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

8.2.2安装kubectl**、kubelet、**kubeadm

复制代码
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

//开机自启kubelet
systemctl enable kubelet.service
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

8.3部署Kubernetes****集群

8.3.1初始化Kubernetes****集群(master上执行)

① 查看 k8s v1.28.2 初始化所需要的镜像

复制代码
kubeadm config images list


② 初始化 K8s 集群

复制代码
//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录
unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

//复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

//初始化kubeadm
kubeadm config print init-defaults > /opt/kubeadm-config.yaml

cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.10.19		#指定master节点的IP地址
13   bindPort: 6443
......
34 kubernetesVersion: v1.20.11				#指定kubernetes版本号
35 networking:
36   dnsDomain: cluster.local
37   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38   serviceSubnet: 10.96.0.0/16			#指定service网段
39 scheduler: {}
#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,K8S V1.16版本开始替换为 --upload-certs
#tee kubeadm-init.log 用以输出日志  
//查看 kubeadm-init 日志
less kubeadm-init.log

//kubernetes配置文件目录
ls /etc/kubernetes/

//存放ca等证书和密码的目录
ls /etc/kubernetes/pki		

8.3.2根据提示创建kubectl

复制代码
//设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 "$HOME/.kube/config" 的路径进行加载。

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


//如果 kubectl get cs 发现集群不健康,更改以下两个文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.10.19		#修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.10.19(有两处)
#- --port=0					# 搜索port=0,把这一行注释掉

systemctl restart kubelet

8.3.3安装Pod网络插件flannel

复制代码
//所有节点部署网络插件flannel
方法一:
//所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
cd /opt
docker load < flannel.tar

//在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml 


方法二:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml


//在 node 节点上执行 kubeadm join 命令加入群集
kubeadm join 192.168.10.11:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:6c3cf1aea39ad918051290d0e281acc0ecd5234982fd5ae845e9c8e2b53f67c2

8.3.4 在master节点查看节点状态

复制代码
kubectl get nodes

kubectl get pods -n kube-system

8.3.5 测试

复制代码
//测试 pod 资源创建
kubectl create deployment nginx --image=nginx

// 查看资源信息
kubectl get pods -o wide

//暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort

//测试访问
curl http://node01:32404

//扩展3个副本
kubectl scale deployment nginx --replicas=3

8.3.6 安装Dashboard 可视化界面

复制代码
上传这两个文件到所有node节点 dashboard.tar  metrics-scraper.tar,导入
docker load -i dashboard.tar
docker load -i metrics-scraper.tar 


//在 master 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001     #添加
  type: NodePort          #添加
  selector:
    k8s-app: kubernetes-dashboard
	
kubectl apply -f recommended.yaml

#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')


#使用输出的token登录Dashboard
https://NodeIP:30001


相关推荐
工程师老罗2 小时前
龙芯2k0300 PMON取消Linux自启动
linux·运维·服务器
千百元2 小时前
centos如何删除恶心定时任务
linux·运维·centos
skywalk81632 小时前
网站证书自动续订失败的问题解决,原来是续订指令certbot renew出错,导致crontab定时任务续订失败
运维·服务器·证书·certbot
额呃呃2 小时前
游戏服务器和一般高性能服务器的区别
运维·服务器·游戏
liwulin05062 小时前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket
2501_906150563 小时前
开源问卷平台DWSurvey开发配置记录
运维·开源·jenkins
gaize12133 小时前
服务器分类及区别划分!多样化服务器用途体系架构及层次分类
运维·服务器·架构
鲁正杰3 小时前
【运维部署】现代化内网穿透与文件共享方案 (Rust)
运维·开发语言·rust
oMcLin4 小时前
如何在Manjaro Linux上配置并优化Caddy Web服务器,确保高并发流量下的稳定性与安全性?
linux·服务器·前端
济6174 小时前
linux(第七期)--gcc编译软件-- Ubuntu20.04
linux·运维·服务器