距离上一个阅读量巨大的2025国内可用Docker镜像源配置指南这篇文章已经过去四个月啦,这是下一篇主播自认为“高质量”的文章,希望可以给学习k8s的同学带来帮助!主播还有B站账号居然可以跑会不定期发布转载一些YouTube的优质教程视频,希望可以帮到一些和主播一样刚入门计算机不久的小白!

本教程基于作者运维有术发布的《KubeKey 部署 K8s v1.28.8 实战》改写,优化了一些东西,适合新手小白。

在某些生产环境下,我们仅需要一个原生的 K8s 集群,无需部署 KubeSphere 这样的图形化管理控制台。在我们已有的技术栈里,已经习惯了利用 KubeKey 部署 KubeSphere 和 K8s 集群。今天,我将为大家实战演示如何在 CentOS7 上,利用 KubeKey 部署一套纯粹的 K8s 集群。

实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)

主机名IPCPU内存系统盘数据盘用途
master192.168.6.212240100k8s-master
node1192.168.6.224440100k8s-node
node2192.168.6.234440100k8s-node
合计31010120300

实战环境涉及软件版本信息

  • 操作系统:CentOS7 x64
  • K8s:v1.28.8
  • Docker:v24.0.9
  • KubeKey: v3.1.1

1. 操作系统基础配置

请注意,以下操作无特殊说明时需在所有服务器上执行。本文只选取 Master-1 节点作为演示,并假定其余服务器都已按照相同的方式进行配置和设置。

1.1 配置主机名和IP

# master节点执行:

hostnamectl set-hostname master

# node1节点执行:

hostnamectl set-hostname node1

# node2节点执行:

hostnamectl set-hostname node2

# 5. 配置hosts(让3台机器互相识别)

cat >> /etc/hosts << EOF
192.168.6.21 master
192.168.6.22 node1
192.168.6.23 node2
EOF

1.2 配置 DNS

echo "nameserver 114.114.114.114" > /etc/resolv.conf

1.3 配置服务器时区

  • 配置服务器时区为 Asia/Shanghai
timedatectl set-timezone Asia/Shanghai

1.4 配置国内yum源

​ 对于 CentOS 7,使用以下命令替换默认配置

sudo sed -i.bak \
  -e 's|^mirrorlist=|#mirrorlist=|g' \
  -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g' \
  /etc/yum.repos.d/CentOS-Base.repo

以上命令只替换了默认启用的仓库。替换之后请运行 yum makecache 更新缓存。

1.5 配置时间同步

  • 安装 chrony 作为时间同步软件
yum install chrony 
  • 编辑配置文件 /etc/chrony.conf,修改 ntp 服务器配置
# 使用 sed 自动替换
sed -i 's/^pool pool.*/pool cn.pool.ntp.org iburst/g' /etc/chrony.conf
  • 重启并设置 chrony 服务开机自启动
systemctl enable chronyd --now
  • 验证 chrony 同步状态
# 执行查看命令
chronyc sourcestats -v

# 正常的输出结果如下
[root@master ~]# chronyc sourcestats -v
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
111.230.189.174            18  11   977     -0.693      6.795  -1201us  2207us
electrode.felixc.at        18  10   917     +2.884      8.258    -31ms  2532us
tick.ntp.infomaniak.ch     14   7   720     +2.538     23.906  +6176us  4711us
time.cloudflare.com        18   7   913     +0.633      9.026  -2543us  3142us

1.6 关闭系统防火墙

systemctl stop firewalld && systemctl disable firewalld

1.7 禁用 SELinux

openEuler 22.03 SP3 最小化安装的系统默认启用了 SELinux,为了减少麻烦,我们所有的节点都禁用 SELinux。

# 使用 sed 修改配置文件,实现彻底的禁用
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 使用命令,实现临时禁用,这一步其实不做也行,KubeKey 会自动配置
setenforce 0

1.8 安装系统依赖

在所有节点,执行下面的命令为 Kubernetes 安装系统基本依赖包。

# 安装 Kubernetes 系统依赖包
yum install curl socat conntrack ebtables ipset ipvsadm

3. 安装部署 K8s

3.1 下载 KubeKey

本文将 master-1 节点作为部署节点,把 KubeKey 最新版 (v3.1.1) 二进制文件下载到该服务器。具体 KubeKey 版本号可以在 KubeKey release 页面查看。

网盘下载:
链接:https://www.123865.com/s/Mjh6jv-xeEVd?pwd=l7Ms#
提取码:l7Ms

  • 下载最新版的 KubeKey
mkdir ~/kubekey;cd ~/kubekey/

# 选择中文区下载(访问 GitHub 受限时使用)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
  • 正确的执行结果如下
[root@master ~]# mkdir ~/kubekey
[root@master ~]# cd ~/kubekey/
[root@master kubekey]# export KKZONE=cn
[root@master kubekey]# curl -sfL https://get-kk.kubesphere.io | sh -

Downloading kubekey v3.1.1 from https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.1.1/kubekey-v3.1.1-linux-amd64.tar.gz ...


Kubekey v3.1.1 Download Complete!

[root@master kubekey]# ll -h
total 114M
-rwxr-xr-x. 1 root root 79M Apr 16 12:30 kk
-rw-r--r--. 1 root root 36M Apr 25 09:37 kubekey-v3.1.1-linux-amd64.tar.gz

# 如果权限不是-rwxr-xr-x.,则执行:
[root@master kubekey]# chmod 755 kk
  • 查看 KubeKey 支持的 Kubernetes 版本列表 ./kk version --show-supported-k8s
[root@master kubekey]# ./kk version --show-supported-k8s
v1.19.0
......(受限于篇幅,中间的不展示,请读者根据需求查看)
v1.28.0
v1.28.1
v1.28.2
v1.28.3
v1.28.4
v1.28.5
v1.28.6
v1.28.7
v1.28.8
v1.29.0
v1.29.1
v1.29.2
v1.29.3

说明: 输出结果为 KubeKey 支持的结果,但不代表 KubeSphere 和其他 K8s 也能完美支持。本文仅用 KubeKey 部署 K8s,所以不用特别考虑版本的兼容性。

KubeKey 支持的 K8s 版本还是比较新的。本文选择 v1.28.8,生产环境可以选择 v1.26.15 或是其他次要版本是双数,补丁版本数超过 5 的版本。不建议选择太老的版本了,毕竟 v1.30 都已经发布了。

3.2 创建 K8s 集群部署配置文件

  1. 创建集群配置文件

本文选择了 K8s v1.28.8。因此,指定配置文件名称为 k8s-v1288.yaml,如果不指定,默认的文件名为 config-sample.yaml

./kk create config -f k8s-v1288.yaml --with-kubernetes v1.28.8

注意: 生成的默认配置文件内容较多,这里就不做过多展示了,更多详细的配置参数请参考 官方配置示例

  1. 修改配置文件

本文示例采用 3 个节点同时作为 control-plane、etcd 和 worker 节点。

编辑配置文件 k8s-v1288.yaml,主要修改 kind: Cluster 小节的相关配置。

修改 kind: Cluster 小节中 hosts 和 roleGroups 等信息,修改说明如下。

  • hosts:指定节点的 IP、ssh 用户、ssh 密码、ssh 端口
  • roleGroups:指定 3 个 etcd、control-plane 节点,复用相同的机器作为 3 个 worker 节点
  • internalLoadbalancer: 启用内置的 HAProxy 负载均衡器
  • domain:自定义域名 lb.opsxlab.cn,没特殊需求可使用默认值 lb.kubesphere.local
  • clusterName:自定义 opsxlab.cn,没特殊需求可使用默认值 cluster.local
  • autoRenewCerts:该参数可以实现证书到期自动续期,默认为 true
  • containerManager:使用 docker

修改后的完整示例如下:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: master, address: 192.168.6.21, internalAddress: 192.168.6.21, user: root, password: "12121212"}
  - {name: node1, address: 192.168.6.22, internalAddress: 192.168.6.22, user: root, password: "12121212"}
  - {name: node2, address: 192.168.6.23, internalAddress: 192.168.6.23, user: root, password: "12121212"}
  roleGroups:
    etcd:
    - master
    - node1
    control-plane: 
    - master
    - node1
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    internalLoadbalancer: haproxy

    domain: lb.opsxlab.cn
    address: ""
    port: 6443
  kubernetes:
    version: v1.28.8
    clusterName: opsxlab.cn
    autoRenewCerts: true
    containerManager: docker
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: 
      - "https://docker.m.daocloud.io"
      - "https://docker.imgdb.de"
      - "https://docker-0.unsee.tech"
      - "https://docker.hlmirror.com"
    insecureRegistries: []
  addons: []

3.3 部署 K8s

接下来我们执行下面的命令,使用上面生成的配置文件部署 K8s。

export KKZONE=cn
./kk create cluster -f k8s-v1288.yaml

上面的命令执行后,首先 KubeKey 会检查部署 K8s 的依赖及其他详细要求。通过检查后,系统将提示您确认安装。输入 yes 并按 ENTER 继续部署。

[root@master kubekey]# ./kk create cluster -f k8s-v1288.yaml


 _   __      _          _   __           
| | / /     | |        | | / /           
| |/ / _   _| |__   ___| |/ /  ___ _   _ 
|    \| | | | '_ \ / _ \    \ / _ \ | | |
| |\  \ |_| | |_) |  __/ |\  \  __/ |_| |
\_| \_/\__,_|_.__/ \___\_| \_/\___|\__, |
                                    __/ |
                                   |___/

17:21:42 CST [GreetingsModule] Greetings
17:21:42 CST message: [node2]
Greetings, KubeKey!
17:21:42 CST message: [master]
Greetings, KubeKey!
17:21:42 CST message: [node1]
Greetings, KubeKey!
17:21:42 CST success: [node2]
17:21:42 CST success: [master]
17:21:42 CST success: [node1]
17:21:42 CST [NodePreCheckModule] A pre-check on nodes
17:21:43 CST success: [node2]
17:21:43 CST success: [master]
17:21:43 CST success: [node1]
17:21:43 CST [ConfirmModule] Display confirmation form
+--------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| name   | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd | nfs client | ceph client | glusterfs client | time         |
+--------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| master | y    | y    | y       | y        | y     | y     | y       | y         | y      |        | y          |            |             |                  | CST 17:21:43 |
| node1  | y    | y    | y       | y        | y     | y     | y       | y         | y      |        | y          |            |             |                  | CST 17:21:43 |
| node2  | y    | y    | y       | y        | y     | y     | y       | y         | y      |        | y          |            |             |                  | CST 17:21:42 |
+--------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+

This is a simple check of your environment.
Before installation, ensure that your machines meet all requirements specified at
https://github.com/kubesphere/kubekey#requirements-and-recommendations

[Notice]
For Kubernetes v1.24 and later, dockershim has been deprecated.
Current runtime is set to Docker and `cri-dockerd` will be installed to support Kubernetes v1.24 and later.
Yoc can also specify a container runtime other than Docker to install Kubernetes v1.24 or later.
You can set "spec.kubernetes.containerManager" in the configuration file to "containerd" or add "--container-manager containerd" to the "./kk create cluster" command.
For more information, see:
https://github.com/kubesphere/kubekey/blob/master/docs/commands/kk-create-cluster.md
https://kubernetes.io/docs/setup/production-environment/container-runtimes/#container-runtimes
https://kubernetes.io/blog/2022/02/17/dockershim-faq/
https://github.com/Mirantis/cri-dockerd

Continue this installation? [yes/no]: yes

注意:

  • nfs client、ceph client、glusterfs client 3 个与存储有关的 client 显示没有安装,这个我们后期会在对接存储的实战中单独安装。
  • docker、containerd 会根据配置文件选择的 containerManager 类型自动安装。

部署完成需要大约 10-20 分钟左右,具体看网速和机器配置,本次部署完成耗时 20 分钟。

部署完成后,您应该会在终端上看到类似于下面的输出。

10:59:25 CST [ConfigureKubernetesModule] Configure kubernetes
10:59:25 CST success: [master]
10:59:25 CST skipped: [node1]
10:59:25 CST skipped: [node2]
10:59:25 CST [ChownModule] Chown user $HOME/.kube dir
10:59:26 CST success: [node2]
10:59:26 CST success: [node1]
10:59:26 CST success: [master]
10:59:26 CST [AutoRenewCertsModule] Generate k8s certs renew script
10:59:27 CST success: [node1]
10:59:27 CST success: [node2]
10:59:27 CST success: [master]
10:59:27 CST [AutoRenewCertsModule] Generate k8s certs renew service
10:59:28 CST success: [node2]
10:59:28 CST success: [node1]
10:59:28 CST success: [master]
10:59:28 CST [AutoRenewCertsModule] Generate k8s certs renew timer
10:59:29 CST success: [node1]
10:59:29 CST success: [node2]
10:59:29 CST success: [master]
10:59:29 CST [AutoRenewCertsModule] Enable k8s certs renew service
10:59:29 CST success: [node2]
10:59:29 CST success: [node1]
10:59:29 CST success: [master]
10:59:29 CST [SaveKubeConfigModule] Save kube config as a configmap
10:59:29 CST success: [LocalHost]
10:59:29 CST [AddonsModule] Install addons
10:59:29 CST success: [LocalHost]
10:59:29 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.

Please check the result using the command:

        kubectl get pod -A

4. 验证 K8s 集群

4.1 kubectl 命令行验证集群状态

本小节只是简单的看了一下基本状态,并不全面,更多的细节大家自己体验探索吧。

  • 查看集群节点信息

在 master-1 节点运行 kubectl 命令获取 K8s 集群上的可用节点列表。

kubectl get nodes -o wide

在输出结果中可以看到,当前的 K8s 集群有三个可用节点、节点的内部 IP、节点角色、节点的 K8s 版本号、容器运行时及版本号、操作系统类型及内核版本等信息。

[root@master ~]# kubectl get nodes -o wide
NAME     STATUS   ROLES                  AGE    VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master   Ready    control-plane          153m   v1.28.8   192.168.6.21   <none>        CentOS Linux 7 (Core)   3.10.0-1160.71.1.el7.x86_64   docker://24.0.9
node1    Ready    control-plane,worker   153m   v1.28.8   192.168.6.22   <none>        CentOS Linux 7 (Core)   3.10.0-1160.71.1.el7.x86_64   docker://24.0.9
node2    Ready    worker                 153m   v1.28.8   192.168.6.23   <none>        CentOS Linux 7 (Core)   3.10.0-1160.71.1.el7.x86_64   docker://24.0.9
  • 查看 Pod 列表

输入以下命令获取在 K8s 集群上运行的 Pod 列表。

kubectl get pods -o wide -A

在输出结果中可以看到, 所有 pod 都在运行(需要等到大约5分钟)。

[root@master kubekey]# kubectl get pod -A -o wide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP              NODE        
kube-system   calico-kube-controllers-64f6cb8db5-fsgnq   1/1     Running   0          4m59s   10.233.84.2     master           
kube-system   calico-node-5hkm4                          1/1     Running   0          4m59s   192.168.6.23   node2          
kube-system   calico-node-wqz9s                          1/1     Running   0          4m59s   192.168.6.22   node1
kube-system   calico-node-zzr5n                          1/1     Running   0          4m59s   192.168.6.21   master
kube-system   coredns-76dd97cd74-66k8z                   1/1     Running   0          6m22s   10.233.84.1     master
kube-system   coredns-76dd97cd74-94kvl                   1/1     Running   0          6m22s   10.233.84.3     master
kube-system   kube-apiserver-master                1/1     Running   0          6m39s   192.168.6.21   master
kube-system   kube-apiserver-node1                1/1     Running   0          4m52s   192.168.6.22   node1
kube-system   kube-apiserver-node2                1/1     Running   0          5m9s    192.168.6.23   node2
kube-system   kube-controller-manager-master       1/1     Running   0          6m39s   192.168.6.21   master
kube-system   kube-controller-manager-node1       1/1     Running   0          4m58s   192.168.6.22   node1
kube-system   kube-controller-manager-node2       1/1     Running   0          5m5s    192.168.6.23   node2
kube-system   kube-proxy-2xpq4                           1/1     Running   0          5m3s    192.168.6.21   master
kube-system   kube-proxy-9frmd                           1/1     Running   0          5m3s    192.168.6.23   node2
kube-system   kube-proxy-bhg2k                           1/1     Running   0          5m3s    192.168.6.22   node1
kube-system   kube-scheduler-master                1/1     Running   0          6m39s   192.168.6.21   master
kube-system   kube-scheduler-node1                1/1     Running   0          4m59s   192.168.6.22   node1
kube-system   kube-scheduler-node2                1/1     Running   0          5m5s    192.168.6.23   node2
kube-system   nodelocaldns-gl6dc                         1/1     Running   0          6m22s   192.168.6.21   master
kube-system   nodelocaldns-q45jf                         1/1     Running   0          5m9s    192.168.6.23   node2
kube-system   nodelocaldns-rskk5                         1/1     Running   0          5m8s    192.168.6.22   node1
  • 查看 Image 列表

输入以下命令获取在 K8s 集群节点上已经下载的 Image 列表。

[root@master kubekey]# crictl images ls
IMAGE                                                                   TAG                 IMAGE ID            SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/cni                       v3.27.3             6527a35581401       88.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns                   1.9.3               5185b96f0becf       14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache        1.22.20             ff71cd4ea5ae5       30.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-apiserver            v1.28.8             e70a71eaa5605       34.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controller-manager   v1.28.8             e5ae3e4dc6566       33.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers          v3.27.3             3e4fd05c0c1c0       33.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy                v1.28.8             5ce97277076c6       28.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-scheduler            v1.28.8             ad3260645145d       18.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node                      v3.27.3             5c6ffd2b2a1d0       116MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause                     3.9                 e6f1816883972       321kB

至此,我们已经完成了部署 3 台 Master 节点 和 Worker 节点复用的最小化 K8s 集群。

接下来我们将在 K8s 集群上部署一个简单的 Nginx Web 服务器,测试验证 K8s 集群是否正常。

5. 部署测试资源

本示例使用命令行工具在 K8s 集群上部署一个 Nginx Web 服务器。

5.1 创建 Nginx Deployment

运行以下命令创建一个部署 Nginx Web 服务器的 Deployment。此示例中,我们将创建具有两个副本基于 nginx:alpine 镜像的 Pod。

kubectl create deployment nginx --image=nginx:alpine --replicas=2

5.2 创建 Nginx Service

创建一个新的 K8s 服务,服务名称 nginx,服务类型 Nodeport,对外的服务端口 80。

kubectl create service nodeport nginx --tcp=80:80

5.3 验证 Nginx Deployment 和 Pod

  • 运行以下命令查看创建的 Deployment 和 Pod 资源。
kubectl get deployment -o wide
kubectl get pods -o wide
  • 查看结果如下:
[root@master kubekey]# kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   2/2     2            2           20s   nginx        nginx:alpine   app=nginx

[root@master kubekey]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
nginx-6c557cc74d-tbw9c   1/1     Running   0          23s   10.233.102.187   node1   <none>           <none>
nginx-6c557cc74d-xzzss   1/1     Running   0          23s   10.233.103.148   master   <none>           <none>

5.4 验证 Nginx Service

运行以下命令查看可用的服务列表,在列表中我们可以看到 nginx 服务类型 为 Nodeport,并在 Kubernetes 主机上开放了 30619 端口。

kubectl get svc -o wide

查看结果如下:

[root@master kubekey]# kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE     SELECTOR
kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP        4d22h   <none>
nginx        NodePort    10.233.14.48   <none>        80:30619/TCP   5s      app=nginx

5.5 验证服务

运行以下命令访问部署的 Nginx 服务,验证服务是否成功部署。

  • 验证直接访问 Pod
curl 10.233.102.187

# 访问结果如下
[root@ks-master-1 ~]# curl 10.233.102.187
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  • 验证访问 Service
curl 10.233.14.48

# 访问结果同上,略
  • 验证访问 Nodeport
curl 192.168.6.21:30619

# 访问结果同上,略

6. 自动化 Shell 脚本

文章中所有操作步骤,已全部编排为自动化脚本,因篇幅限制,不在此文档中展示。

7. 总结

本文分享了在 CentOS7 操作系统上,如何利用 KubeSphere 开发的工具 KubeKey,部署 K8s v1.28.8 集群的详细流程及注意事项。

主要内容概括如下:

  • CentOS 操作系统基础配置
  • 使用 CentOS 部署 K8s 集群
  • K8s 集群部署完成后的验证测试

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐