K8s:二进制安装k8s(单台master)

一、安装k8s

1、拓扑图

2、系统初始化配置

#所有节点执行
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#永久关闭firewalld并清空iptables所有表规则
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
#永久关闭selinux和swap分区
#三个节点分开执行
hostnamectl set-hostname master01
#192.168.170.111的master上执行修改主机名
hostnamectl set-hostname node01
#192.168.170.113的node1上执行修改主机名
hostnamectl set-hostname node02
#192.168.170.114的node2上执行修改主机名
#所有节点执行
bash
#刷新bash使得修改的主机名生效
cat >> /etc/hosts << EOF
192.168.170.111 master01
192.168.170.113 node1
192.168.170.114 node2
EOF
#使用多行重定向将主机名对应的ip写到hosts里面加快访问速度,注意改为自己的ip
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
#使用多行重定向调整内核参数,前2行为开启网桥模式后2行为关闭ipv6协议和开启路由转发
sysctl --system
#加载内核使得配置内核参数生效
yum install ntpdate -y
ntpdate time.windows.com
#安装ntpdate时间同步程序,并与本机的windows同步时间

2.1关闭防火墙selinx以及swap

2.2设置主机名

2.3在每台主机中添加hosts,做映射

2.4调整内核参数,将桥接的ipv4流量传递到iptables,关闭ipv6

2.4时间同步

3、部署docker引擎(两个node节点执行)

#2个node节点执行
yum install -y yum-utils device-mapper-persistent-data lvm2
#安装依赖包以便在系统上安装docker
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
#添加Docker官方源,并将它设置为docker-ce.repo文件
yum install -y docker-ce docker-ce-cli containerd.io
#yum安装docker-ce和docker客户端以及容器io
systemctl start docker.service
systemctl enable docker.service
#开机自启并现在启动docker

4、部署etcd集群

#master节点操作,#本文的所有需要上传资源在博客资源包中K8S压缩包中均有
cd /usr/local/bin
chmod +x /usr/local/bin/cfssl*
#将cfssl证书签发的工具和命令(cfssl、cfssljson、cfssl-certinfo)上传到/usr/local/bin目录下并添加执行权限
#本文的cfssl工具在博客资源包中K8S压缩包中有
#cfssl:证书签发的工具命令
#cfssljson:将 cfssl 生成的证书(json格式)变为文件承载式证书
#cfssl-certinfo:验证证书的信息
#cfssl-certinfo -cert <证书名称>			#查看证书的信息
mkdir /opt/k8s
cd /opt/k8s/
#上传 etcd-cert.sh(生成证书脚本) 和 etcd.sh(创建etcd集群脚本) 到 /opt/k8s/ 目录中
chmod +x etcd-cert.sh etcd.sh
#添加可执行权限
mkdir /opt/k8s/etcd-cert
#创建etcd-cert目录用于存放etcd的证书
mv etcd-cert.sh /opt/k8s/etcd-cert
#移动生成证书的脚本到存放etcd证书的目录下
vim /opt/k8s/etcd-cert/etcd-cert.sh
#此脚本ip需要修改80到82行master,node1,node2顺序保存退出
vim  ./etcd-cert.sh           
#修改脚本中的ip为自己的ip
./etcd-cert.sh			
#生成CA证书、etcd 服务器证书以及私钥
ls  /opt/k8s/etcd-cert
#查看生成的证书是否为4个.pem结尾3个.json结尾
#上传 etcd-v3.4.9-linux-amd64.tar.gz(etcd程序命令及证书) 到 /opt/k8s 目录中,启动etcd服务
cd /opt/k8s/
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
ls etcd-v3.4.9-linux-amd64
#解压上传的etcd包,内容为3个.md文件一个目录,一个etcd和一个etcdctl启动控制脚本
mkdir -p /opt/etcd/{cfg,bin,ssl}
#创建用于存放etcd配置文件,命令文件,证书的目录
cd /opt/k8s/etcd-v3.4.9-linux-amd64
#进入解压的etcd包中
mv etcd etcdctl /opt/etcd/bin/
#将etcd启动和etcdctl控制脚本移动到创建的用于存放etcd命令文件的bin目录下
cd  /opt/k8s/etcd-cert
#进入创建etcd证书的目录
cp  ./*.pem   /opt/etcd/ssl
#将本目录下所有证书全部拷贝一份到创建的用于存放etcd证书的路径ssl上
cd /opt/k8s
./etcd.sh etcd01 192.168.170.111 etcd02=https://192.168.170.113:2380,etcd03=https://192.168.170.114:2380
#进入存放etcd.sh部署etcd集群的脚本目录执行etcd.sh脚本 后面跟三个etcd集群的ip注意格式,进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,先操作不然不会生成system管理和配置文件,重新开启一个shell查看etcd状态
#另一个窗口执行
ps -ef | grep etcd
#查看etcd集群状态是否为自己的三个etcd  ip
scp -r /opt/etcd/ root@192.168.170.113:/opt/
scp -r /opt/etcd/ root@192.168.170.114:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.170.113:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.170.114:/usr/lib/systemd/system/
#把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点
#node1节点执行
vim /opt/etcd/cfg/etcd
#修改scp过来的etcd配置文件
#[Member]
ETCD_NAME="etcd02"											#修改为etcd02
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.170.113:2380"			#修改为node1的ip地址
ETCD_LISTEN_CLIENT_URLS="https://192.168.170.113:2379"		#修改为node1的ip地址
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.170.113:2380"		#修改为node1的ip地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.170.113:2379"				#修改为node1的ip地址
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.170.111:2380,etcd02=https://192.168.170.113:2380,etcd03=https://192.168.170.114:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#node2节点执行
vim /opt/etcd/cfg/etcd
#修改scp过来的etcd配置文件
#[Member]
ETCD_NAME="etcd03"											#修改为etcd03
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.170.114:2380"			#修改为node1的ip地址
ETCD_LISTEN_CLIENT_URLS="https://192.168.170.114:2379"		#修改为node1的ip地址
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.170.114:2380"		#修改为node1的ip地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.170.114:2379"				#修改为node1的ip地址
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.170.111:2380,etcd02=https://192.168.170.113:2380,etcd03=https://192.168.170.114:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#master节点执行
cd /opt/k8s
./etcd.sh etcd01 192.168.170.111 etcd02=https://192.168.170.113:2380,etcd03=https://192.168.170.114:2380
#重新启动etcd集群
#node1 node2执行
systemctl enable --now etcd
#设置开机启动并立即启动etcd,然后回到master上查看是否成功。不是一直前台运行状态即成功
#master执行:
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.170.111:2379,https://192.168.170.113:2379,https://192.168.170.114:2379" endpoint health --write-out=table
#检查集群监控状态,health全部未true即可
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.170.111:2379,https://192.168.170.113:2379,https://192.168.170.114:2379" endpoint status  --write-out=table
#检查集群状态,有一个is  leader为true即可
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.m --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.170.114:2379" --write-out=table member list
##查看etcd集群成员列表

4.1在master01节点操作

4.2生成etcd证书,上传etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中

4.3创建用于生成CA证书,etcd服务器证书以及私钥的目录

4.4上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目录中,启动etcd服务

4.5创建用于存放etcd配置文件,命令文件,证书的目录

注意:进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况

可以开启另外一个窗口来查看etcd进程是否正常

4.6把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点

4.7在node1节点操作(node2同样)

4.8启动etcd,并检查etcd集群状态

5、master部署组件

//在 master01 节点上操作
#上传 master.zip(master组件) 和 k8s-cert.sh(证书) 到 /opt/k8s 目录中,解压 master.zip 压缩包
cd /opt/k8s/
unzip master.zip
cd  master 
chmod +x *.sh
mv *  /opt/k8s
#解压master组件包,里面有master的4个组件脚本,添加权限移动到/opt/k8s文件夹中
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
#创建kubernetes工作目录
mkdir /opt/k8s/k8s-cert
#创建k8s的证书存放路径
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
#将k8s证书移动到创建的k8s的证书存放路径
cd /opt/k8s/k8s-cert/
vim /opt/k8s/k8s-cert/k8s-cert.sh 
#修改脚本中的ip56-60行顺序是第一个为master、第二个为master高可用ip、第三个为master虚拟ip、第四load balancer01(master)第五为load balancer01(backup)。第四第五可以删除。单节点master不用,若后面需要做集群需要提前规划好ip
chmod +x k8s-cert.sh	
./k8s-cert.sh				
#生成CA证书、相关组件的证书和私钥
ls *pem
#显示生成的证书等一共8个.pem结尾
cp ca*pem apiserver*pem /opt/kubernetes/ssl/
#将ca证书和apiserver证书拷贝到创建的存放证书的ssl/目录下
cd /opt/k8s/
tar zxvf kubernetes-server-linux-amd64.tar.gz
#上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包
cd /opt/k8s/kubernetes/server/bin
#进入解压后的k8s的bin目录中将4个组件拷贝到创建的k8s存放bin文件的路径下
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
cp /opt/kubernetes/bin/* /usr/local/bin/
#将脚本程序存放到 /usr/local/bin下可以全局使用4个命令
cd /opt/k8s/
vim token.sh
[脚本内容]
#!/bin/bash
#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
#保存后退出
chmod +x token.sh
./token.sh
cat /opt/kubernetes/cfg/token.csv
#创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权,查看是否生成了csv文件
cd /opt/k8s/
./apiserver.sh 192.168.170.111 https://192.168.30.11:2379,https://192.168.170.113:2379,https://192.168.170.114:2379
#二进制文件、token、证书都准备好后,开启 apiserver 服务
ps aux | grep kube-apiserver
#检查进程是否启动成功,过滤kube-apiserver最上面一个后面会有-etcd-servers=https://192.168.170.111:2379,https://192.168.170.113:2379,https://192.168.170.114:2379 --bind-address=192.168.170.111 --secure-port=6443此信息为正常,注意ip要改为自己的ip地址
netstat -natp | grep 6443
#过滤端口只有监控本机ip的6443为正常
cd /opt/k8s/
vim  scheduler.sh      
#修改脚本ip。KUBE_APISERVER="https://192.168.170.111:6443"为自己的apiserver的ip地址本文是master地址
./scheduler.sh
ps aux | grep kube-scheduler
#运行shceduler组件脚本,查看服务是否正常
vim controller-manager.sh  
#修改ipKUBE_APISERVER="https://192.168.170.111:6443"为自己的apiserver的ip地址本文是master地址
./controller-manager.sh
ps aux | grep kube-controller-manager
#运行controller-manager.sh组件脚本,查看服务是否正常
vim ./admin.sh
#修改ipKUBE_APISERVER="https://192.168.170.111:6443"为自己的apiserver的ip地址本文是master地址
./admin.sh
#生成kubectl连接集群的kubeconfig文件
kubectl get cs
#通过kubectl工具查看当前集群组件状态,正常状态如下
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-2               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"} 
kubectl version
#查看版本信息

上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包

复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中

创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权

二进制文件、token、证书都准备好后,开启 apiserver 服务

#启动 scheduler 服务

#启动 controller-manager 服务

#生成kubectl连接集群的kubeconfig文件

6、部署worker node组件

#node1执行
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
#创建kubernetes工作目录
cd /opt/
unzip node.zip
#上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.shchmod +x kubelet.sh proxy.sh
#master执行
cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.30.12:/opt/kubernetes/bin/
#把 kubelet、kube-proxy 节点的组件拷贝到 node1 节点
mkdir /opt/k8s/kubeconfig
cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
vim kubeconfig.sh 
./kubeconfig.sh 192.168.170.111 /opt/k8s/k8s-cert/
#上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.170.113:/opt/kubernetes/cfg/
#把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 2个授权文件拷贝到 node1 节点
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
#RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
#若执行失败,可先给kubectl绑定默认cluster-admin管理员集群角色,授权集群操作权限
##node1节点执行
cd /opt/
./kubelet.sh 192.168.170.113
ps aux | grep kubelet
#node1节点执行kubelet安装脚步,注意要写node1节点的ip地址,查看kubelet服务是否正常运行
#在 master01 节点上操作,通过 CSR 请求
kubectl get csr
#可以查看有谁发起请求Pending 表示等待集群给该节点签发证书,查看的内容如下
NAME                                                   AGE   SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-saZodXI7_rtwU6VJGMB1UKPx8sHUsAonx4l1BKJRXOo   53m   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pendingkubectl certificate approve node-csr-saZodXI7_rtwU6VJGMB1UKPx8sHUsAonx4l1BKJRXOo
#执行命令授权csr请求并签发证书
kubectl get csr
#再次查看请求的csr状态Approved,Issued 表示已授权 CSR 请求并签发证书
kubectl get node
#查看节点,状态为NotReady 由于网络插件还没部署
NAME            STATUS     ROLES    AGE    VERSION
192.168.170.113   NotReady   <none>   108s   v1.20.11

6.1在所有 node 节点上操作创建kubernetes工作目录

6.2上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、prox

6.3在master01节点上操作把 kubelet、kube-proxy 拷贝到 node 节点

6.4上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件
#kubeconfig 文件包含集群参数(CA 证书、API Server 地址),客户端参数(上面生成的证书和私钥),集群 context 上下文参数(集群名称、用户名)。Kubenetes 组件(如 kubelet、kube-proxy)通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群,连接到 apiserver。

6.5把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点

6.6RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

7、在node01节点上操作

7.1启动kubelet

7.2在 master01 节点上操作,通过 CSR 请求检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书

7.3通过 CSR 请求

7.4查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady

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

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

相关文章

标准输入输出流(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 输入三角形的三边a,b,c&#xff0c;计算三角形的面积。形成三角形的条件是ab>c,bc>a,ac>b&#xff0c;编写程序&#xff0c;输入a,b,c&#xff0c;检查a,b,c是否满足以上条件&#xff0c;如不满足&#xff0c;由cerr输出有关出错信息…

Spring框架核心:揭秘Java厨房的智能烹饪艺术

前情回顾&#xff1a;Spring框架深度解析&#xff1a;打造你的Java应用梦工厂 六. 实现控制反转 6.1 描述如何在Spring中实现IoC 在Spring Town的厨房里&#xff0c;实现控制反转就像是将食材的采购和准备过程外包给了一个智能系统。这个系统知道每种食材的特性&#xff0c;也…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…

Linux-磁盘管理类实训

一、Linux分区和磁盘操作命令 &#xff08;1&#xff09;将系统内所有的分区&#xff08;文件系统&#xff09;列出来&#xff09; &#xff08;2&#xff09;将系统中所有特殊文件格式及名称都列出来 &#xff08;3&#xff09;将/bin下面的可以用的磁盘容量以易读的容量格式…

做抖店如何提高与达人合作的几率?有效筛选+有效推品

我是王路飞。 总是有很多新手商家&#xff0c;找我吐槽&#xff0c;抖音上的达人特别不好找&#xff0c;好不容易加上了&#xff0c;要么是发消息不回复&#xff0c;要么是寄样后就没下文了。 虽然一直都说找达人带货玩法比较简单&#xff0c;但也离不开电商的基本逻辑&#…

【数据可视化01】matplotlib实例介绍1

目录 一、引言二、实例介绍1.柱状图1)简单柱状图2)堆叠柱状图 2.线条形式3.折线图&#xff08;多子图&#xff09;4.散点图5.水平和垂直线条6.饼状图1&#xff09;饼状图2&#xff09;“条形饼”图 一、引言 matplotlib是一个用于绘制数据可视化的Python库。它可以创建各种静态…

制造业如何挖掘数据价值,附数据分析处理软件推荐

制造业如何挖掘和利用数据价值&#xff1f; 在信息化、智能化高速发展的今天&#xff0c;制造业正迎来一场由数据驱动的深刻变革。数据&#xff0c;作为这场变革的核心驱动力&#xff0c;正被制造业企业深度挖掘和利用&#xff0c;以实现更高效、更智能的生产模式。 制造业在利…

252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波

基于MATLAB的自适应差分阈值法检测心电信号的QRS波&#xff0c;QRS波群反映左、右心室除极电位和时间的变化&#xff0c;第一个向下的波为Q波&#xff0c;向上的波为R波&#xff0c;接着向下的波是S波。通过GUI进行数据处理&#xff0c;展示心率和QRS。程序已调通&#xff0c;可…

44.WEB渗透测试-信息收集-域名、指纹收集(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a; web指纹&#xff1a; 每一个网站&#xff0c;前端开发语言&#xff0c;后端语言&#…

【MySQL数据库开发设计规范】之字段设计规范

欢迎点开这篇文章&#xff0c;自我介绍一下哈&#xff0c;本人姑苏老陈 &#xff0c;是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中&#xff0c;该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章&#xff0c;定期更新&#xff0c;欢迎关注&…

如何查看centos7是否安装nginx

要查看 CentOS 7 系统上是否安装了 Nginx&#xff0c;您可以使用多种方法来检查。以下是一些常见的方法&#xff1a; 通过 RPM 包管理器查询 在 CentOS 系统上&#xff0c;可以使用 RPM 包管理器来查询已安装的软件包。要查看是否安装了 Nginx&#xff0c;您可以在终端中运行以…

强化训练:day7(字符串中找出连续最长的数字串、岛屿数量、拼三角)

文章目录 前言1. 字符串中找出连续最长的数字串1.1 题目描述1.2 解题思路1.3 代码实现 2. 岛屿数量2.1 题目描述2.2 题目描述2.3 代码实现 3. 拼三角3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 字符串中找出连续最长的数字串   2. 岛屿数量   3. 拼三角 1. 字符串…