【详细教程】Kubernetes集群部署:使用kubeadm创建集群

文章目录

  • 一、虚拟机准备
    • (一)主机基本配置
    • (二)安装docker
    • (三)配置cri-docker环境
    • (四)安装kubeadm、kubelet、kubectl
    • (五)克隆主机
  • 二、环境配置工作
    • (一)修改主机名
    • (二)编辑hosts文件
    • (三)关闭防火墙、selinux、swap
    • (四)配置同步时间、系统模块
    • (五)配置SSH免密登录
  • 三、准备容器所需的镜像
    • (一)查看所需镜像文件
    • (二)配置daemon.json文件
    • (三)拉取镜像文件
    • (四)修改镜像标签
    • (五)查看镜像结果
  • 四、具体节点配置
    • (一)初始化Kubernetes集群
    • (二)部署Pod网络
    • (三)加入子节点
    • (四)确保节点Ready状态
  • 五、Kubernetes集群测试
    • (一)创建mynginx pod
    • (二)暴露端口
    • (三)访问nginx
  • 参考资料


根据官方文档,总共有三种使用部署工具安装kubernetes的方式,分别是使用kubeadm 引导集群、使用kOps安装 Kubernetes、使用Kubespray安装 Kubernetes。

在这里插入图片描述

在本次部署设计中,采用kubeadm引导集群的方式,主要运用了安装kubeadm、对kubeadm进行故障排查、使用kubeadm创建集群。目标是要安装单个控制平面的Kubernetes集群,在集群上安装Pod网络,以便Pod可以相互连通。


一、虚拟机准备

准备三台预先安装docker、cri-docker环境、kubernetes组件、cri-docker环境的虚拟机。

(一)主机基本配置

创建虚拟机,根据官方文档,本次实验在CentOS 8环境下进行,主机内存设置4GB,处理器个数为4,采用NAT网络适配器。

在这里插入图片描述

(二)安装docker

详细安装过程:CentOS 8:在Linux环境下安装和卸载Docker

1. 安装docker

yum install -y
yum-utils device-mapper-persistent-data lvm2

2. 设置阿里云源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装 Docker Engine-Community

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

4. 设置docker开机自动启动

systemctl enable docker

(三)配置cri-docker环境

1. 提前下载cri-docker环境拖入虚拟机,解压缩并移动到指定位置

tar -xf cri-dockerd-0.3.4.amd64.tgz -C /usr/local/
ls /usr/local
mv /usr/local/cri-dockerd/cri-dockerd /usr/local/bin/

在这里插入图片描述

2. 配置cri-dockerd.service文件

vim /etc/systemd/system/cri-dockerd.service
# cri-dockerd.service文件内容

[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

3. 配置cri-dockerd.socket文件

vim /etc/systemd/system/cri-dockerd.socket
# cri-dockerd.socket文件内容

[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

4. 启动cri-docker服务

systemctl daemon-reload
systemctl start cri-dockerd.service
systemctl enable cri-dockerd.service

在这里插入图片描述

(四)安装kubeadm、kubelet、kubectl

kubeadm:用来初始化集群的指令。

kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

kubectl:用来与集群通信的命令行工具。

1. 配置kubernetes的yum源

vim /etc/yum.repos.d/kubernetes.repo
# kubernetes.repo文件内容

[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

2. 安装Kubernetes三大组件

dnf install kubelet kubeadm kubectl

在这里插入图片描述

3. 设置kubectl开机自动启动

systemctl enable kubectl

(五)克隆主机

1. 进入克隆虚拟机向导,选择创建完整克隆

在这里插入图片描述

2. 根据需要为克隆主机重命名,修改存储位置

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


二、环境配置工作

在三台主机中均要进行如下的环境配置工作

(一)修改主机名

对三台主机分别修改主机名

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

(二)编辑hosts文件

1. 查看主机ip地址

ifconfig

2. 编辑/etc/hosts文件

vim /etc/hosts
# /etc/hosts文件内容

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.211.137 master
192.168.211.136 slave1
192.168.211.138 slave2

在这里插入图片描述

(三)关闭防火墙、selinux、swap

1. 关闭防火墙

避免后续需要配置开放端口

systemctl stop firewalld.service
systemctl disable firewalld.service

2. 关闭selinux

selinux会限制容器对宿主机文件系统和系统资源的访问权限

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3. 关闭swap分区,编辑/etc/fstab文件

kubelet要求必须禁用交换分区,kubeadm初始化时会检测swap是否关闭

vim /etc/fstab

修改/etc/fstab文件内容,注释swap行

# /etc/fstab文件内容(局部)

# /dev/mapper/cl-swap     none                    swap    defaults        0 0

在这里插入图片描述

(四)配置同步时间、系统模块

1. 设置本地时区,加载RTC设置

确保集群中的各个组件在进行各种操作时具有一致的时间戳

timedatectl set-local-rtc 0
timedatectl set-timezone Asia/Shanghai
hwclock –systohc

2. 加载和检查系统模块

确保Kubernetes网络和容器的正常运行

modprobe br_netfilter
lsmod | grep br_netfilter

在这里插入图片描述

(五)配置SSH免密登录

配置Kubernetes集群需要在不同的节点之间进行通信和操作,配置SSH免密登录能够简化操作,避免每次执行操作都需要手动输入密码。

1. 生成新的密钥对

ssh-keygen

在这里插入图片描述

2. 将公钥复制到目标主机

ssh-copy-id root@master
ssh-copy-id root@slave1
ssh-copy-id root@slave2

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 检验配置结果

ssh root@master
ssh root@slave1
ssh root@slave2

在这里插入图片描述


三、准备容器所需的镜像

由于无法访问外网,不能下载存放在registry.k8s.io上的默认容器镜像,这里选择在阿里云上进行拉取镜像,然后使用tag命令修改为它需求的镜像标签,以下操作在三台主机中都要进行。

(一)查看所需镜像文件

查看Kubernetes集群需要的镜像

kubeadm config images list

在这里插入图片描述

(二)配置daemon.json文件

1. 在阿里云中启用镜像加速器

在这里插入图片描述

2. 配置/etc/docker/daemon.json文件

在这里插入图片描述

在阿里云操作文档的基础上添加驱动命令修改docker的驱动为systemd,使其与与k8s保持一致,避免冲突

tee
/etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors":["https://2nd8r72o.mirror.aliyuncs.com"],
  "exec-opts":[ "native.cgroupdriver=systemd" ]
}
EOF

3. 载入daemon.json文件并重启docker

systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

(三)拉取镜像文件

拉取阿里云里所需要的镜像

docker pull  registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.4
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.4
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.4
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.4
docker pull registry.aliyuncs.com/google_containers/pause:3.9
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(四)修改镜像标签

使用tag修改为需求的镜像标签

docker tag  registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.4   registry.k8s.io/kube-apiserver:v1.28.4
docker tag  registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.4   registry.k8s.io/kube-controller-manager:v1.28.4
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.4   registry.k8s.io/kube-scheduler:v1.28.4
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.28.4   registry.k8s.io/kube-proxy:v1.28.4
docker tag registry.aliyuncs.com/google_containers/pause:3.9  registry.k8s.io/pause:3.9
docker tag registry.aliyuncs.com/google_containers/etcd:3.5.9-0 registry.k8s.io/etcd:3.5.9-0
docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1

在这里插入图片描述

(五)查看镜像结果

查看本地镜像,确认是否有需要的镜像

docker images

在这里插入图片描述


四、具体节点配置

(一)初始化Kubernetes集群

1. 在主节点执行初始化的命令

apiserver-advertise-address用来指定API服务器的广播地址。

kubernetes-version指定要安装的Kubernetes版本。

service-cidr指定服务网络的CIDR范围。

pod-network-cidr指定Pod网络的CIDR范围。

ignore-preflight-errors=all忽略所有预检错误。

cri-socket指定容器运行时的UNIX套接字路径。

另外,由于前一步骤已经安装了集群所需的镜像,在命令进行时会提示镜像已存在而不再拉取,故也不再需要设置image-repository的值

kubeadm init \
--apiserver-advertise-address=192.168.211.137 \
--kubernetes-version v1.28.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all \
--cri-socket=unix:///var/run/cri-dockerd.sock

如果报错则输入下面命令恢复原有状态

systemctl stop kubelet
rm -rf /etc/kubernetes/*
systemctl stop docker 
rm -rf /var/lib/kubelet/
rm -rf /var/lib/etcd

在这一部分出现的主要问题是:在前期原本只安装了docker而没有安装cri-dockerd,经过查资料发现k8s在1.20.X版本以后就弃用了docker,于是临时改用containerd,重新在containerd拉取镜像和改标签,但在使用中仍有bug无法解决。于是选择安装cri-dockerd再次进行以上命令,执行成功。

2. 初始化成功显示以下内容

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.211.137:6443 --token ejgoxs.086hnhj7qipovd6v \
	--discovery-token-ca-cert-hash sha256:6bbe9e754e2b0ab13301e76268c347b9f95b661b2399630ecfa8da9497ca5744

在这里插入图片描述

初始化成功后虚拟机卡顿严重,通过关闭后提高处理器、内存等配置得以缓解

3. 根据提示运行kubectl

我使用root用户,可以直接设置KUBECONFIG环境变量,可以让kubectl命令行工具自动找到并使用这个配置文件

export KUBECONFIG=/etc/kubernetes/admin.conf

(二)部署Pod网络

部署Pod网络是为了提供容器间和跨节点的网络通信,实现网络策略和安全性,支持服务发现和负载均衡

1. 进入提示的网站,选择flannel网络组件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 安装CNI网络插件

根据网站内提示,Flannel默认用作 CNI 网络插件,部署Flannel时需确保CNI网络插件有安装,由于国内访问Github不稳定,这里提前下载好插件,拖入虚拟机的主目录,再进行解压等命令

在这里插入图片描述

mkdir -p /opt/cni/bin
tar -C /opt/cni/bin -xzf cni-plugins-linux-amd64-v1.2.0.tgz

在这里插入图片描述

3. 使用kubectl部署flannel

根据网站内提示,提前下载好yml文件,拖入虚拟机的主目录,再输入命令

在这里插入图片描述

kubectl apply -f kube-flannel.yml

在这里插入图片描述

(三)加入子节点

1. 在主节点中将kubeconfig环境变量分发到子节点

kubeconfig环境变量指定了kubectl命令使用的kubeconfig文件的路径,该文件包含了连接到集群所需的认证和配置信息,让子节点上的kubectl命令能够连接到Kubernetes集群的控制平面

scp /etc/kubernetes/admin.conf slave1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf slave2:/etc/kubernetes/

设计结束后,在官方安装文档上注意到其实建议不要将admin.conf文件与任何人共享,应该使用kubeadm kubeconfig user命令为其他用户生成 kubeconfig文件

2. 在两个node节点中输入以下命令

由于同时有containerd和docker,在提示的命令基础上加了cri-socket参数,指定为cri-dockerd

kubeadm join 192.168.211.137:6443 \
--token ejgoxs.086hnhj7qipovd6v \
--discovery-token-ca-cert-hash sha256:6bbe9e754e2b0ab13301e76268c347b9f95b661b2399630ecfa8da9497ca5744 \
--cri-socket=unix:///var/run/cri-dockerd.sock

报错则输入下面命令恢复原有状态,再根据报错提示进行调整

rm -rf /etc/kubernetes/kubelet.conf
rm -rf /etc/kubernetes/pki/ca.crt
systemctl restart kubelet

在这里插入图片描述

(四)确保节点Ready状态

1. 查看节点状态

kubectl get nodes

在这里插入图片描述

2. 显示NotReady,需要修改yml文件

原因是pod之间无法ping通,需要让flanneld包发到指定网卡,数据包才能正常的经过flannel进行传送

ifconfig
vim kube-flannel.yml

在kube-flannel.yml文件第139行加上

        - --iface=ens160

再次查看显示正确

kubectl get nodes

在这里插入图片描述

3. 查看命名空间kube-system的pod的状态

kubectl get pods -n kube-system

在这里插入图片描述


五、Kubernetes集群测试

(一)创建mynginx pod

创建一个nginx镜像,向Kubernetes集群提交一个Pod创建的请求,控制平面会根据集群的配置和调度策略,在可用的节点上选择一个节点来运行这个Pod。

kubectl create deployment mynginx --image=nginx

在这里插入图片描述

(二)暴露端口

创建一个Service资源,并将其关联到mynginx Pod,将其与集群的外部网络连接起来,指定Service的端口为80,并使用NodePort类型,NodePort类型会在每个节点上选择一个端口,将外部流量转发到Service的端口上。

kubectl expose deployment mynginx --port=80 --type=NodePort

在这里插入图片描述

(三)访问nginx

通过访问任一节点的IP地址和暴露的NodePort端口,可以访问到nginx服务,说明测试成功

192.168.211.136:30619
192.168.211.138:30619

在这里插入图片描述

在这里插入图片描述


参考资料

Kubernetes 文档 | Kubernetes

【kubernetes】k8s集群搭建(完整详解)-CSDN博客

K8S简介和安装部署详细教程-CSDN博客

centos7中通过kubeadmin安装k8s集群-CSDN博客

K8S集群部署采坑总结-CSDN博客

通过docker+cri-dockerd部署k8s集群环境(含harbor镜像仓库)-CSDN博客

Kubernetes最新版2023.07v1.27.4安装和集群搭建保姆级教程-知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里计算巢:开启数据集市场的宝库,助力AI研究和应用

阿里计算巢 阿里数据巢提供了一个丰富的数据集市场&#xff0c;官方地址&#xff1a; https://computenest.console.aliyun.com/dataset/service/cn-hangzhou 可以看到数据集内容涵盖了多个领域&#xff0c;且还在不断增加中。关键是免费&#xff01;且支持下载到本地。 以下…

MC插件服教程-paper+游戏云VPS

首先必须要先买一台VPS&#xff0c;这里以i9的机型做演示 购买完成等待大约1分钟服务器就会创建完成&#xff0c;之后在管理页可以看到服务器的连接信息 image772356 43 KB 首先复制下远程连接地址&#xff0c;此处即k.rainplay.cn:13192 之后在系统里搜索“rdp”或“远程桌面…

一文学会yum源配置(联网/未联网)以及yum常用命令

1、yum源介绍 yum&#xff08;Yellow dog Updater Modified的简称&#xff09;&#xff0c;yum的宗旨是自动化地升级&#xff0c;安装/移除rpm包&#xff0c;收集rpm包的相关信息&#xff0c;检查依赖性并自动提示用户解决。yum的关键之处是要有可靠的repository&#xff0c;顾…

Linux安装svn服务器和权限配置_亲测成功

Linux安装svn服务器和权限配置_亲测成功 SVN简介 SVN是Subversion的简称&#xff0c;是一个开放源代码的版本控制系统&#xff0c;通过采用分支管理系统的高效管理&#xff0c;简而言之就是用于多个人共同开发同一个项目&#xff0c;实现共享资源&#xff0c;实现最终集中式的…

C# OMRON PLC FINS TCP协议简单测试

FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令&#xff0f;响应系统。运用 FINS指令可实现各种网络间的无缝通信&#xff0c;包括用于信息网络的 Etherne(以太网)&#xff0c;用于控制网络的Controller Link和SYSMAC LINK。…

【C++】C++入门 — 类和对象初步介绍

类和对象 1 类的作用域2 类的实例化3 类对象模型4 this指针介绍&#xff1a;特性&#xff1a; Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 1 类的作用域 类定义了一个新的作用域&#xff0c;类的…

stable-diffusion | v1-5-pruned.ckpt和v1-5-pruned-emaonly.ckpt的区别

https://github.com/runwayml/stable-diffusion?tabreadme-ov-file#reference-sampling-script 对于 1.5 模型&#xff0c;其中可能包括四部分&#xff1a;标准模型、文本编码器、VAE模型、EMA模型。 标准模型&#xff1a;生成图片的核心模块&#xff0c;潜空间中的前向扩散和…

创新大赛专访丨南沙人才荣膺2023年度人才寻猎标杆品牌:吸纳海内外高学历人才,助力南沙精准“选苗”

日前&#xff0c;2023第三届全国人力资源创新大赛颁奖典礼暨成果展圆满举行。自2023年10月份启动以来&#xff0c;大赛共吸引了457个案例报名参赛&#xff0c;经组委会专家团队评审严格审核&#xff0c;企业赛道共有103个案例获奖、72家企业、13位个人、7个产业园斩获荣誉。 广…

SpringMVC-组件解析

一、引子 我们在上一篇文章Spring MVC-基本概念中&#xff0c;为读者解释了如何使用SpringMVC框架&#xff0c;将承接客户端请求的工作从原生的Servlet转移到我们熟知的Controller中。那么我们不禁会好奇&#xff0c;SpringMVC框架到底做了什么&#xff0c;是怎么把请求分发给…

【涵子来信】——拆机,感想

大家好&#xff0c;我是涵子。 初中的第一个学期结束了&#xff0c;来临寒假。我在寒假做了一件有趣的事情&#xff1a;拆机&#xff0c;修手机。今天我来分享分享这件事情。 拆机 情况介绍 拆机对象&#xff1a; iPhone 6 Plus 情况&#xff1a; 电池健康度100%&#xff08…

张维迎《博弈与社会》威胁与承诺(4)宪政与民主

有限政府 动态博弈理论对我们理解民主与法治具有重要的意义。 自人类进入文明时代以来&#xff0c;政府就是社会博弈重要的参与人。任何社会要有效运行&#xff0c;都需要赋予政府一些自由裁量权。但如果政府的自由裁量权太大&#xff0c;政府官员为所欲为&#xff0c;不仅老百…

最新酒桌小游戏喝酒骰子小程序源码/带流量主

2023最新酒桌小游戏喝酒小程序源码-带流量主&#xff0c;喝酒神器3.6修改增加了广告位&#xff0c;直接上传源码到开发者端即&#xff0c;可通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可。 流量主ID替换插屏广告位 adunit-29629a7b54a41a8b视频…

2024年【G2电站锅炉司炉】模拟试题及G2电站锅炉司炉考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【G2电站锅炉司炉】模拟试题及G2电站锅炉司炉考试试题&#xff0c;包含G2电站锅炉司炉模拟试题答案和解析及G2电站锅炉司炉考试试题练习。安全生产模拟考试一点通结合国家G2电站锅炉司炉考试最新大纲及G2电站锅…

MySQL 教程 2.3

MySQL DELETE 语句 你可以使用 DELETE FROM 命令来删除 MySQL 数据表中的记录。 你可以在 mysql> 命令提示符或 PHP 脚本中执行该命令。 语法 以下是 DELETE 语句从 MySQL 数据表中删除数据的通用语法&#xff1a; DELETE FROM table_name WHERE condition; 参数说明&…

JAVA单例模式详解

单例模式 创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性 常用的有&#xff1a;单例模式、工厂模式&#xff08;工厂方法和抽象工厂&#xff09;、建造者模式。 不常用的有&#xff1a;原型模式。 1 单例模式介绍 1.1 定义 单例模式&#xff08;Singlet…

基于YOLOv7算法的高精度实时课堂场景下人脸检测系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时课堂场景下人脸检测系统可用于日常生活中检测与定位人脸&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练…

【代码随想录-哈希表】有效的字母异位词

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

二叉树和堆(3)——二叉树链式结构的实现和递归思想(1)

目录 二叉树的前序、中序和后序遍历 前序遍历 图片解析 代码表示 递归分析 中序遍历 图片解析 代码表示 后序遍历 图片解析 代码表示 学习二叉树的基本操作前&#xff0c;需要创建一棵二叉树&#xff0c;然后才能学习相关的操作。因此&#xff0c;本篇我们就先介绍一…

我在代码随想录|写代码Day25 |回溯算法|93.复原IP地址 , 78.子集 , 90.子集II

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)…

200行C++代码写一个网络调试助手(TCP服务端TCP客户端)

前言 今天分享一个200行C代码写成的QT网络调试助手。 可以先看看效果 。 因为我不喜欢用QT Designer&#xff0c;因此我用的组件都是使用代码布局的&#xff0c;所以需要设计一下布局。 界面是参考的之前写的串口助手&#xff0c;就是把里面的逻辑改了改&#xff0c;因此外观…