Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

Kubernetes - CentOS7搭建k8s集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

在这里插入图片描述

前言概述:

一、Kubernetes—k8s是什么

Kubernetes 这个名字源于希腊语,意为“舵手“或”飞行员"。
Kubernetes,简称K8s,中间有8个字符用8代替缩写。
Google于2014年开源项目,为容器化应用提供集群和管理的开源工具,Kubernetes目标是让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

主要特性:
1、高可用,不宕机,自动灾难恢复
2、灰度更新,不影响业务正常运转
3、一键回滚到历史版本
4、方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡有一个完善的生态

二、kubernetes 功能和架构

2.1 K8s 概述 :
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes积累了作为Google 生产环境运行工作负载 15年的经验,并吸收了来自于社区的最佳想法和实践。
2.2 K8s 功能:
1)自动装箱 —基于容器对应用运行环境的资源配置要求自动部署应用容器
2)自我修复(自愈能力) —当容器失败时,会对容器进行重启,当所部署的Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
3)水平扩展 —通过简单的命令、用户 UI界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
4)服务发现 —用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
5)滚动更新 —可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
6)版本回退 —可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
7)密钥和配置管理 —在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署
8)存储编排 —自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
9)批处理 —提供一次性任务,定时任务;满足批量数据处理和分析的场景

三、kubernetes 集群搭建(kubeadm/二进制包部署方式)

此次我们以kubeadm部署方式演示验证

3.1 前置知识点
目前生产部署 Kubernetes 集群主要有两种方式:
1) kubeadm Kubeadm是一个K8s部署工具,提供kubeadm
init 和kubeadm join,用于快速部署Kubernetes 集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
2)二进制包 从Github下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。 Kubeadm
降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes
集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

3.2 kubeadm 部署方式介绍 kubeadm 是官方社区推出的一个用于快速部署kubernetes
集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
1)创建一个 Master 节点 kubeadm init
2)将 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和端口>

四、安装要求

在配置Kubernetes集群节点之前,需要满足以下几个条件:
4.1 操作系统:支持Linux操作系统,推荐使用Ubuntu、CentOS等常见发行版;
4.2 主机数量:至少需要3台主机,建议一台用于Master节点,两台用于Worker节点;
4.3 硬件配置:至少2个CPU、2GB内存,硬盘30GB;
4.4 网络通信:集群中所有机器之间网络互通;
4.5 网络通信:可以访问外网,需要拉取镜像(需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点);
4.6 禁止SWAP分区 (kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度,所以关闭swap主要是为了性能考虑)。

五、最终目标/提纲

5.1 在所有节点上安装 Docker 和 kubeadm
5.2 部署 Kubernetes Master
5.3 部署容器网络插件
5.4 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
5.5 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

六、学习课程前提

6.1 熟悉 Docker 的基本使用
6.2 熟悉 Linux 操作系统

相关环境:

在这里插入图片描述
在这里插入图片描述

实测步骤:

1、搭建三台虚拟机并安装操作系统CentOS_7.9
2、三台系统进行初始化操作环境
3、在三台节点安装docker kubelet kubeadm kubectl
4、在Master节点安装kubeadm init命令进行初始化
5、在Node节点执行kubeadm join命令将node节点添加到集群
6、在Master节点安装CNI配置插件,如flannel等
7、测试kubernetes集群,如nginx

开始搬砖:

一、系统初始化(ALL节点)

# 替换国内源配置
ls /etc/yum.repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak  # 备份当前源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 阿里云 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo # 网易163 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-7.repo # 华为云CentOS 7源# 清空缓存
yum clean all
# 生成缓存
yum makecache
# 安装前最好更新一下系统软件
yum -y install vim
yum -y install unzip
yum -y install lrzsz
yum -y update 
# IP配置
ip address
vi /etc/sysconfig/network-scripts/ifcfg-ens192
systemctl restart network# 主机名配置
Hostname
hostnamectl set-hostname k8s-master  # 192.168.10.160
hostnamectl set-hostname k8s-node01  # 192.168.10.161
hostnamectl set-hostname k8s-node02  # 192.168.10.162
# 防火墙配置
systemctl stop firewalld     # 关闭
systemctl disable firewalld  # 禁用
firewall-cmd --reload        # 重启防火墙,生效配置# SELinux安全机制配置
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时关闭
# 关闭SWAP
swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久 (需重启)
# 设置host映射和主机名
vim /etc/hosts或脚本
cat >> /etc/hosts << EOF 
192.168.10.160  k8s-master
192.168.10.161  k8s-node01
192.168.10.162  k8s-node02
EOF

在这里插入图片描述

# 将桥接的 IPv4 流量传递到 iptables 的链(内核参数修改---在所有主机上将桥接的ipv4流量传递到iptables的链将桥接的IPv4流量传递到iptables的链(有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失),配置kubernetes.conf文件(kubernetes.conf文件原来不存在,需要自己创建的)
vim /etc/sysctl.d/k8s.conf
-------------------------------------------
或脚本 
cat > /etc/sysctl.d/k8s.conf << EOF 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 
EOF
sysctl -p   # 生效

在这里插入图片描述

# 同步NTP时间
yum install -y ntpdate    # 安装NTP
ntpdate time.windows.com  # 同步NTP服务器系统网络时间
# 统一重启
reboot

二、安装Docker/kubeadm/kubelet (ALL节点)

2.1 安装Docker

Dockershim中间件会一直保留到2021年末,直到发布Kubernetes1.23版本为止。2022年k8s的1.24版本正式剔除dockershim,不再支持让docker去调用containerd,而是直接操作containerd,先安装containerd来替换CRI接口调用。
本次验证v1.18.0版本,后续再验证最新v1.28.0版本。 Kubernetes 1.18.0版本默认 CRI(容器运行时)为Docker,因此先安装Docker,可参考之前部署手册

# 安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2# 安装 Docker 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
# 查看仓库中所有的docker版本
yum list docker-ce --showduplicates | sort -r# 不指定版本号即默认安装
yum install -y docker-ce
# 如果要指定版本号安装
yum install docker-ce-18.06* -y ,此时指定的就是docker-ce-18.06.1的版本
yum install -y docker-ce-18.06.1.ce-3.el7 

在这里插入图片描述

# 启动docker并设置docker开机自启服务
systemctl start docker
systemctl enable docker# 测试验证docker是否安装成功
docker version# 永远的HelloWorld
docker run hello-world

在这里插入图片描述

# 镜像加速配置
1、URL:目前我这边测试环境使用阿里云容器镜像服务:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、注册账户:当然还有腾讯网易等都可以使用不指定,注册一个属于自己的阿里云账户
3、登入获取加速器地址及脚本:登陆阿里云开发者平台--点击控制台---选择容器镜像服务---获取加速器地址---粘贴脚本直接执行
4、重启服务器mkdir -p /etc/docker
vim /etc/docker/daemon.json
或脚本
cat > /etc/docker/daemon.json << EOF 
{ 
"registry-mirrors": ["https://k******f.mirror.aliyuncs.com"] 
} 
EOF

在这里插入图片描述

# 重启服务
systemctl restart docker
# 查看生效信息
docker info
2.2 安装kubeadm、kubelet、kubectl

kubeadm和kubectl都是工具,kubelet才是系统服务
安装包说明:
kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

# 配置k8s镜像源
# 添加 yum 源 
vim /etc/yum.repos.d/kubernetes.repo
或脚本
cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[kubernetes]
name=Kubernetes Repo
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64   
gpgcheck=0
enabled=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgphttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

在这里插入图片描述

# 查询kubeadm可用的版本
yum list kubeadm --showduplicates# 安装kubeadm、kubelet、kubect,# 此次测试验证v1.24之前版本,最新v1.28.2
yum  install -y kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0# 设置kubelet开机自启(先不用启动,会报错,后面kubeadm init初始化master时会自动拉起kubelet)
systemctl enable kubelet

在这里插入图片描述

四、集群初始化Kubernetes Master

在Master节点安装kubeadm init命令进行初始化

4.1 k8s-master节点初始化 (在192.168.10.160 k8s-master节点操作)
# 集群初始化
kubeadm init --apiserver-advertise-address=192.168.10.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
或脚本(去掉##注释,脚本 \ 后面不能有空格)
kubeadm init \											        #在master节点执行初始化(node节点不用执行)
--apiserver-advertise-address=192.168.10.160 \			        #指定apiserver的IP,即master节点的IP,指定master的interface
--image-repository registry.aliyuncs.com/google_containers \	#设置镜像仓库为国内的阿里云镜像仓库
--kubernetes-version v1.18.0 \								    #设置k8s的版本,跟步骤三的kubeadm版本一致
--service-cidr=10.96.0.0/12 \									#设置node节点的网络
--pod-network-cidr=10.244.0.0/16							    #指定Pod服务的虚拟IP地址范围,设置node节点的网络
#--------------------------------------#
# 记录kubeadm join的输出,后面需要这个命令将各个节点加入集群中

在这里插入图片描述

输出 Your Kubernetes control-plane has initialized successfully!
表示master节点安装成功。

#如果失败可以重置,注意版本。如安装成功后直接跳到下一步。
kubeadm reset
rm -rf $HOME/.kube/config​
# 根据提示执行,使用 kubectl 工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看集群节点
kubectl get nodes

在这里插入图片描述

五、将Node节点全部加入到集群

在Node节点执行kubeadm join命令将node节点添加到集群
在这里插入图片描述

在k8s-node01/node02节点操作,把node节点加入集群
# 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
kubeadm join 192.168.10.160:6443 --token ntpc3i.81ga63fqtkprsrx8 \--discovery-token-ca-cert-hash sha256:399fced327c9274c660325648300b822aa3714f42b466f0edbba2cb32b754ae8 

在这里插入图片描述

选择语言默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作命令如下:
kubeadm token create --print-join-command
# 在master节点上,再次查看集群节点,输出如下信息表示node节点加入集群成功
kubectl get nodes

在这里插入图片描述

状态为NotReady未准备就绪是因为需要部署网络插件才能生效。

六、部署Pod(CNI)网络插件

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

在这里插入图片描述

# 默认镜像地址无法访问,sed命令修改为dockerhub镜像仓库:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 运行所有插件
kubectl get pods -n kube-system
-----------------------------------------------------------------------
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-ctd28             1/1     Running   0          6d17h
coredns-7ff77c879f-xpbd9             1/1     Running   0          6d17h
etcd-k8s-master                      1/1     Running   0          6d17h
kube-apiserver-k8s-master            1/1     Running   0          6d17h
kube-controller-manager-k8s-master   1/1     Running   0          6d17h
kube-proxy-6chlp                     1/1     Running   0          6d17h
kube-proxy-7rfbc                     1/1     Running   0          6d17h
kube-proxy-mzmsg                     1/1     Running   0          6d17h
kube-scheduler-k8s-master            1/1     Running   0          6d17h

在这里插入图片描述

# 启动所有插件后,再观察集群活动状态为Ready,准备就绪了
kubectl get nodes

在这里插入图片描述
在这里插入图片描述

七、测试验证kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行

# 拉取nginx镜像
kubectl create deployment nginx --image=nginx
# 开通80端口对外
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看运行状态
kubectl get pod,svc
-----------------------------------------------------------------------
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-zgrqt   1/1     Running   0          2m44sNAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        6d17h
service/nginx        NodePort    10.104.45.57   <none>        80:30400/TCP   9s

在这里插入图片描述

# 测试访问地址:http://NodeIP:Port
http://192.168.10.160:30400/
http://192.168.10.161:30400/
http://192.168.10.162:30400/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上,感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络大框架图形

如标题&#xff0c;精心画了一个计算机网络的框架性的图&#xff0c;包含了计算机网络的核心思想&#xff0c;在此分享和备份下。各层具体协议参考TCP/IP常用协议栈图解-CSDN博客

[论文阅读] 3D感知相关论文简单摘要

Adaptive Fusion of Single-View and Multi-View Depth for Autonomous Driving 提出了一个单、多视图融合深度估计系统&#xff0c;它自适应地集成了高置信度的单视图和多视图结果 动态选择两个分支之间的高置信度区域执行融合 提出了一个双分支网络&#xff0c;即一个以单…

uniapp 微信小程序 获取openid,手机号进行登录,配合后端

流程&#xff1a;登录注册功能,通过uni.getUserProfile获取wxcode,通过wxcode传给后端获取openid,sessionkey,unionid。 通过<u-button type"success" open-type"getPhoneNumber" getphonenumber"decryptPhoneNumber">一键登录</u-butt…

HTML批量文件上传方案——图像预览方式

作者:私语茶馆 1.HTML多文件上传的关键方案 多文件上传包括:文件有效性校验,文件预览、存储和进度展示多个方面,本章节介绍的是文件预览的实现方案。 2.文件上传前预览 2.1.效果 选择文件前: 选择文件后: 2.2.CSS文件代码 StorageCenter.css代码 html {font-family:…

uniapp app权限说明弹框2024.4.23更新

华为上架被拒绝 用uni-app开发的app&#xff0c;上架华为被拒&#xff0c;问题如下&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;电话、相机、存储&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。…

HWOD:输出单向链表中倒数第k个节点

一、知识点 不确定输入的数据有多少组时&#xff0c;可以用 if(scanf()>0) 作为判断条件 如果要处理多组数据&#xff0c;不一定要为每组数据申请空间。可以存储一组&#xff0c;处理一组&#xff0c;存储数据的空间清零之后继续存储下一组数据。额外申请空间&#xff0…

MySQL函数之单行函数

1.前言 我们在使用 SQL 语言的时候&#xff0c;不是直接和这门语言打交道&#xff0c;而是通过它使用不同的数据库软件&#xff0c;即DBMS。DBMS 之间的差异性很大&#xff0c;远大于同一个语言不同版本之间的差异。实际上&#xff0c;只有很少的函数是被 DBMS 同时支持的。比…

微信小程序:12.页面导航

什么是页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现的页面导航的方式有两种&#xff1a; 连接location.href 小程序中实现页面导航的两种方式 声明式导航 在页面上声明一个导航组件 通过点击组件实现页面跳转 导航TabBar页面 是指配置TabB…

Unity自动化之自动构建图集与压缩

文章目录 前言一、UI图集的压缩unity2020之前的版本使用图集unity2020之后的版本使用图集 二、非UI图集压缩总结 前言 为降低DrawCall&#xff0c;我们需要将多个图片构建在图集上。同时还有个好处&#xff0c;可以自动补齐图片补齐2的幂次方或正方形图&#xff0c;这样便可以…

前端实现将当前页面内容下载成图片(图片可做到高清画质)

插件背景&#xff1a; html2canvas可以把你想要转变的元素变为图片&#xff0c;使用file-saver下载图片。 1、安装html2canvas、file-saver npm install html2canvasnpm install file-saver --save 2、在Vue组件中引入并使用html2canvas、file-saver import html2canvas fro…

C#基础|对象初始化器与构造方法对比总结

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 对象初始化器的作用 为了更加灵活的初始化对象的“属性”&#xff0c;是对构造化方法的补充。 02 构造方法总结 2.1、存在的必要性&#xff1a;一个类中&#xff0c;至少要有一个构造方法&#xff08;有无参数均…

合合信息引领AI场景化革新,供应链金融智能化审核全面升级!

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 随着供给侧结构性改革的深入推进和产业结构的不断升级&#xff0c;金融机构在监管部门的指导下&#xff0c;积极拓展供应链金融业务&#xff0c;取得了显著成效。这一举措有效缓解了上下游中小企业的融资困难&a…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下&#xff1a; 报错第一时间想到可能是代码配置原因报错&#xff0c;查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错&#xff0c;后面查阅发现ico在各系统平台会不兼容&#xff0c;也就是ico是给win下使用的&#xff0c;此处改下图标格式就ok&am…

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

AJAX——黑马头条-数据管理平台项目

1.项目介绍 功能&#xff1a; 登录和权限判断查看文章内容列表&#xff08;筛选&#xff0c;分页&#xff09;编辑文章&#xff08;数据回显&#xff09;删除文章发布文章&#xff08;图片上传&#xff0c;富文本编辑器&#xff09; 2.项目准备 技术&#xff1a; 基于Bootst…

ShardingSphere 5.x 系列【26】 数据分片原理之 SQL 路由

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 携带分片键2.1 直接路由2.2 标准路由2.3 笛卡尔路由3. 不携带分片…

【内网横向】SSH协议隧道搭建详解

什么是SSH隧道 SSH隧道是通过Secure Shell&#xff08;SSH&#xff09;协议在两个网络节点之间创建的加密通道。它可以用于安全地传输数据&#xff0c;绕过网络限制或保护数据免受窃听。通过SSH隧道&#xff0c;可以在两个网络之间建立安全的连接&#xff0c;例如在本地计算机和…

济宁市中考报名照片要求及手机拍照采集证件照方法

随着中考报名季的到来&#xff0c;并且进入了中考报名演练阶段&#xff0c;济宁市的广大考生和家长都开始忙碌起来。报名过程中&#xff0c;上传一张符合要求的证件照是必不可少的环节。本文将详细介绍济宁市中考报名照片的具体要求&#xff0c;并提供一些实用的手机拍照采集证…

BUUCTF--web(2)

1、[HCTF 2018]admin1 打开题目后发现有注册和登录两个页面&#xff0c;因为题目提示admin&#xff0c;尝试用admin进行爆破 爆破得到密码为123 登录得到flag 2、[护网杯 2018]easy_tornado1 打开题目后有三个文件&#xff0c;分别打开查看 在url地址栏中发现包含两个参数&a…

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时&#xff0c;务必先在./applications/sample/wifi-iot/app路径下新建一个目录&#xff08;或一…