kubernetes学习笔记(一)

kubernetes简介

​ Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

​ 在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

官方网站:https://kubernetes.io/

kubernetes特点

**自动化部署和扩展:**Kubernetes可以自动部署容器应用,并根据需要自动扩展或缩减应用实例的数量。

服务发现和负载均衡:Kubernetes提供了服务发现机制,使得容器中的应用可以容易地找到彼此并与之通信。同时,它支持内置的负载均衡,可以将流量分发到多个实例。

存储编排:Kubernetes支持多种存储系统,包括本地存储、网络存储(如NFS、Ceph等),以及持久卷(Persistent Volumes),使得存储的管理更加灵活和高效。

自动回滚和自我修复:如果应用实例失败,Kubernetes可以自动重启它们。此外,它还可以根据定义的策略自动回滚应用版本。

密钥和配置管理:Kubernetes支持配置管理,允许应用以环境变量的形式或通过配置文件的方式获取所需的配置信息。此外,它还支持密钥管理,可以安全地存储和管理敏感信息。

批处理和定时任务:Kubernetes支持批处理作业和定时任务,可以通过Cron Jobs等功能实现。

自我修复能力:Kubernetes能够监控应用的状态,并在节点故障或应用故障时自动采取措施(如重启、替换实例等)。

可扩展性和灵活性:Kubernetes架构设计允许它在不同的基础设施上运行(如物理机、虚拟机、公有云、私有云等),具有很高的可扩展性和灵活性。

社区和生态系统:Kubernetes拥有一个非常活跃的社区和生态系统,有大量的插件、工具和集成解决方案(如Helm、Istio、Prometheus等),可以满足各种不同的需求。

安全性:Kubernetes提供了多层次的安全特性,包括网络策略、角色基础访问控制(RBAC)、密钥管理等,确保容器应用的安全性。

kubernetes安装

在安装kubernetes之前需要安装docker。这里只提供centos安装方式,其他平台可以看前面docker的学习笔记。

centos官方安装

#安装一些系统必要的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查/etc/yum.repos.d/docker-ce.repo 中的ur[地址是不是都是阿里云的]
vi /etc/yum.repos.d/docker-ce.repo
# 如果不是,那么把download-stage.docker.com全部替换为mirrors。aliyun.com/docker-ce/#更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce#使用docker version可以看到client端的信息
docker version#启动服务器再次使用docker version 就可以看到服务器端和客户端的docker信息了
systemctl start docker

kubernetes集群规划

​ 这里是使用虚拟机去创建了3个centos7.5的主机。分别为其分配2h2g的资源。按理来说master节点的至少2h4g的资源。work节点至少需要1h2g的资源,但是由于电脑资源有限,所以就为每一个节点包括master节点2h2g的资源。至于磁盘的话20-30G就行了,当然资源肯定是越多越好了,也可以使用阿里云或者是其他云厂商的按需付费的云服务器(抢占式实例),实例按小时收费那种。做完实验以后就可以回收停止付费,也是一种不错的选择,也还比较便宜。

这不介绍master和work的区别,我认为至少需要把集群搭起来,才能更好的学习kubernetes。

这里搭建的测试学习环境有太多的主观因素,生产环境配置还请斟酌。

1、基础环境
  • 为每台主机安装kubelet、kubeadm、kubectl

  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。

  • 开启机器上的某些端口

  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。

  • 设置防火墙规则、设置不同的hostname、互信

2、虚拟机网络配置

这里使用NAT模式的网络,为其指定的私网网段是172.31.26.X如下

image-20250620191116061

为master分配IP为172.31.26.3主机域名master,node01的IP为172.31.26.4主机域名node01,node02的IP为172.31.26.5主机域名node02

若是使用云主机以阿里云的ECS为例,可以在一下栏目去创建专有网络,

image-20250620191231082

在创建专有网络时选择IPV4,网段为172.16.0.0/16如下。

image-20250620191521184

由于这个172.16.0.0/16这个网络范围太大可以有65536-2个主机地址,所以可以通过交换机进一步去划分子网如下。

image-20250620191651168

创建实例的时候选择对应得专有网络和交换机即可。

3、基础环境设置

设置各个主机自己的主机名

hostnamectl set-hostname xxxx
#master节点 hostnamectl set-hostname master
#work节点hostnamectl set-hostname node01

将 SELinux 设置为 permissive 模式(SELinux仍然监控和记录所有的安全违规事件,但不会强制执行任何拒绝操作。这意味着即使某些操作违反了策略,系统也会允许这些操作继续进行,但是会在日志中记录下来,但是有的教程说是必须把SELinux设置成disabled。有的说是 permissive就行。这里设置成permissive

sudo setenforce 0  #临时关闭
sudo vi /etc/selinux/config #修改config如下 需重启电脑生效
SELINUX=permissive

关闭swap分区,注释/etc/fstab文件中所有swap分区相关的挂载配置

swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

允许 iptables 检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装kubelet、kubeadm、kubectl,首先添加kubelet的yum源。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOFsudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
systemctl enable --now kubelet#使用systemctl status kubelet查看时每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环

下载kubelet需要的镜像,这里的镜像地址是我阿里云的容器服务的地址,上面已经有kubelet需要的镜像了,可以直接使用我的,也可以其他。

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/sxc-k8s-images/$imageName
done
EOFchmod +x ./images.sh && ./images.sh

首先为所有的机器添加主机域名映射如下,这里根据实际情况填写即可。

vi /etc/hosts
172.31.26.3 cluster-master
172.31.26.4 node01
172.31.26.5 node02

虚拟机的话可以直接关闭防火墙

kubernetes集群安装

1、master节点初始化。
#在master节点执行以下命令
kubeadm init \
--apiserver-advertise-address=172.31.26.3 \ #apiserver的地址。
--control-plane-endpoint=cluster-master \   #主节点的域名。
--image-repository registry.cn-hangzhou.aliyuncs.com/sxc-k8s-images \ #镜像地址
--kubernetes-version v1.20.9 \  #kubernetes-version版本
--service-cidr=10.96.0.0/16 \ #k8s为service所分配的私网IP范围
--pod-network-cidr=192.168.0.0/16 #k8s为pod所分配的私网IP范围

保证所有网络范围不重叠

执行完上诉命令显示如下表示主节点初始化成功。

#出现以下证明master节点初始化成功
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/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, 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/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join cluster-master:6443 --token 5qvdjf.ztj534mpyvz4x2aq \--discovery-token-ca-cert-hash sha256:364e66000f1c0d3d9cd168806f01bee8f1456f2585c91737caf4dc6ea6d619c8 \--control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join cluster-master:6443 --token 5qvdjf.ztj534mpyvz4x2aq \--discovery-token-ca-cert-hash sha256:364e66000f1c0d3d9cd168806f01bee8f1456f2585c91737caf4dc6ea6d619c8
2、work节点加入

在node01和node02节点执行以下命令,该信息是由初始化master节点成功后直接给出的。

kubeadm join cluster-master:6443 --token 5qvdjf.ztj534mpyvz4x2aq \--discovery-token-ca-cert-hash sha256:364e66000f1c0d3d9cd168806f01bee8f1456f2585c91737caf4dc6ea6d619c8
3、安装网络组件calico
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
kubectl apply -f calico.yaml

该组件是用于节点之间通信的,calico镜像可能会拉取失败可以直接通过docker直接拉取。

网络组件安装好以后通过如下命令去查看pod,有如下信息

[root@cluster-master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS                  RESTARTS   AGE
kube-system   calico-kube-controllers-577f77cb5c-pl9gh   1/1     Running                 0          55m
kube-system   calico-node-n9t97                          1/1     Running                 0          55m
kube-system   coredns-584db6f4bf-fhg9z                   1/1     Running                 0          58m
kube-system   coredns-584db6f4bf-fmhkx                   1/1     Running                 0          58m
kube-system   etcd-cluster-master                        1/1     Running                 1          58m
kube-system   kube-apiserver-cluster-master              1/1     Running                 1          58m
kube-system   kube-controller-manager-cluster-master     1/1     Running                 4          58m
kube-system   kube-proxy-l89mb                           1/1     Running                 0          9m40s
kube-system   kube-proxy-pm96g                           1/1     Running                 1          58m
kube-system   kube-proxy-z2lh6                           1/1     Running                 0          10m
kube-system   kube-scheduler-cluster-master              1/1     Running                 3          58m
4、查看节点是否就绪

使用以下命令查看,status为Ready表示节点的已经就绪了,若是是有节点挂了,status状态是NotReady。

[root@cluster-master ~]# kubectl get nodes  
NAME             STATUS   ROLES                  AGE   VERSION
cluster-master   Ready    control-plane,master   67m   v1.20.9
node01           Ready    <none>                 18m   v1.20.9
node02           Ready    <none>     
5、部署一个DashBoard

使用yaml配置的方式去快速部署一个bashboard。

curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml -O
kubectl apply -f recommended.yaml

修改访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
#将type: ClusterIP 改为 type: NodePort

查看dashboard运行在哪个端口

 kubectl get svc -A |grep kubernetes-dashboard
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.96.44.83    <none>        8000/TCP                 7m3s
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.96.250.52   <none>        443:30592/TCP            7m4s

云服务器的记得在安全组开放这个端口,通过集群中任意集群的IP加端口都可以访问。这个端口是随机分配的,根据实际情况为准。

另外该地址需要通过https方式访问。

创建访问账号,任然是通过yaml的方式去创建

[root@cluster-master ~]# vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard

创建令牌访问

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

会的到一个token如下,就可以在dashboard中通过token登录了。

eyJhbGciOiJSUzI1NiIsImtpZCI6IjVibVBCMTByTjZxcFdkZFlhTFgzV3FtbDdER0xmd1pTelZUN1YwT1pEdUkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTl3NndjIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNmYxMDQ3MS00YWVhLTQxMWYtOTM5Yi1mY2JmMGJhNjg4MWIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.aqNjyfbQkTwYKQmT9Uga0rPUfHOH8qDFZyXhGLnmWkTGgfAgESZwJLzXpWcMtEtAQapYY_vehRmHg_cZ0LDTbiHqqsb45gOtjxjuHXSFPV2lDd9Pn2Adeq8ALWOXTwOgHM6xEBjrCCfuT9hdIz1WNfWlSbbb5XugZvM9jhjI6qQ0s2MSkXYP7kb1graeGkgOzaZiM9-qVxoQf0D0wUJIa4yPW-BYlVme_O8ZXArfTss7LgmlAKz14deGbvyY_sKuRJIoZgiojLZtYBu0L1fzci36TXrOckbRlFDpcCf68_CRp0SzI7eyoczxSJ9RxixDKavaqRXMsIeMxHmD8I2TzA

界面如下,输入token就可以登陆了。

image-20250620201412863

完成上述一个用来学习的kubernetes集群就安装好了。

kubernetes安装总结

集群安装常见问题

1、在安装calico组件是k8s提示Pod出现Init:ImagePullBackOff

出现这个问题的话是镜像拉取失败了,可以通过一下命令查看 pod安装失败的原因

kubectl describe pod pod名字 -n 名称空间

若是镜像没有拉取成功,可以使用docker手动拉取镜像。一般来说是docker的镜像仓库配置的问题。

2、work节点加入时报错如下

error execution phase preflight: couldn't validate the identity of the API Server: Get "https://cluster-master:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s": dial tcp 172.31.26.3:6443: connect: no route to host

存在这个问题的话,虚拟机搭建的集群记得关闭防火墙,若是服务器的话需要在安全组中放行6443端口号。

systemctl disable firewalld --now

setenforce 0

还有可能是token过期了,重新获取token

kubeadm token create --print-join-command

3、在访问dashboard时页面提示

您的连接不是私密连接

攻击者可能会试图从 172.31.26.3 窃取您的信息(例如:密码、消息或信用卡信息)。详细了解此警告

方法一:添加到Chrome快捷方式标志 --ignore-certificate-errors ,然后重新打开并浏览到您的网站。在快捷方式的目标栏目的后面添加上述

方法二:当查看“您的连接不是私密”屏幕时:输入 thisisunsafe,当Chrome不允许通过点击设置例外时,例如对于此HSTS案例,这将允许安全例外。(亲测有效)

​ 完成上面的步骤,就可以搭建一个学习测试的kubernetes集群了。其实很早就接触了这个东西,但是一直没去学习,这次就准备好好的去学习一下。

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

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

相关文章

Eureka实战

1.创建父工程SpringCloudTestSpringCloudTest为父工程&#xff0c;用于引入通用依赖&#xff0c;如spring-boot-starter-web、lombok&#xff0c;这样子工程就可以直接继承&#xff0c;无需重复引入。在dependencyManagement标签中引入和springboot版本对应的springcloud&#…

如何把镜头对焦在超焦距上

要把镜头对焦在超焦距上&#xff0c;可以按照以下步骤操作&#xff1a;1. 计算超焦距 首先需要知道你的镜头参数和相机参数&#xff1a; 焦距 f&#xff08;如 24mm、35mm&#xff09;光圈 N&#xff08;如 f/8、f/11&#xff09;容许弥散圆直径 c&#xff08;与传感器尺寸有关…

idea docker插件连接docker失败

报错org.apache.hc.client5.http.HttpHostConnectException:Connect to http://localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:o:0:0:0:1] failed:Connection refused:getsockopt解决方法&#xff1a;

【后端】.NET Core API框架搭建(6) --配置使用MongoDB

目录 1.添加包 2. 连接配置 2.1.链接字符串 2.2.连接类 3.仓储配置 3.1.仓储实现 3.2.仓储接口 4.获取配置和注册 4.1.添加配置获取方法 4.2.注册 5.常规使用案例 5.1实体 5.2.实现 5.3.接口 5.4.控制器 NET Core 应用程序中使用 MongoDB 有许多好处&#xff0c;尤其是在…

Spring AI快速入门

文章目录1 介绍1_大模型对比2_开发框架对比2 快速入门1_引入依赖2 配置模型3 配置客户端4 测试3 会话日志1_Advisor2 添加日志Advisor4 会话记忆1_定义会话存储方式2 配置会话记忆Advisor5 会话历史1_管理会话历史2 保存会话id3 查询会话历史6 后续1 介绍 SpringAI整合了全球&…

Windows下编译pthreads

本文记录在Windows下编译pthreads的流程。 零、环境 操作系统Windows 11VS Code1.92.1Git2.34.1MSYS2msys2-x86_64-20240507Visual StudioVisual Studio Community 2022CMake3.22.1 一、编译安装 1.1 下载 git clone https://git.code.sf.net/p/pthreads4w/code 1.2 构建…

WP Force SSL Pro – HTTPS SSL Redirect Boost Your Website‘s Trust in Minutes!

In the vast digital landscape where security and user trust are paramount, ensuring your WordPress site uses HTTPS is not just a recommendation—it’s a necessity. That’s where WP Force SSL Pro – HTTPS SSL Redirect steps in as your silent guardian, makin…

jvm--java代码对照字节码图解

java代码&#xff1a;无静态方法&#xff1b;&#xff08;对应字节码没有方法&#xff09; 任何一个类&#xff0c;至少有一个构造器&#xff0c;默认是无参构造java代码包含&#xff1a;静态方法java代码包含&#xff1a;静态方法、显示构造方法public class ClassInitTest {p…

动态规划题解_打家劫舍【LeetCode】

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

电脑安装 Win10 提示无法在当前分区上安装Windows的解决办法

原因&#xff1a; win10系统均添加快速启动功能&#xff0c;预装的win10电脑默认都是UEFI引导和GPT硬盘&#xff0c;传统的引导方式为Legacy引导和MBR硬盘&#xff0c;UEFI必须跟GPT对应&#xff0c;同理Legacy必须跟MBR对应。如果BIOS开启UEFI&#xff0c;而硬盘分区表格式为M…

大端序与小端序

理解大端序&#xff08;Big-Endian&#xff09;和小端序&#xff08;Little-Endian&#xff09;的关键在于数据在内存中存储时字节的排列顺序&#xff0c;特别是在存储多字节数据类型&#xff08;如整数、浮点数&#xff09;时。以下是清晰易懂的解释&#xff1a;核心概念 假设…

PyTorch笔记5----------Autograd、nn库

1.Autograd grad和grad_fn grad&#xff1a;该tensor的梯度值&#xff0c;每次在计算backward时都需要将前一时刻的梯度归零&#xff0c;否则梯度值会一直累加grad_fn&#xff1a;叶子结点通常为None&#xff0c;只有结果节点的grad_fn才有效&#xff0c;用于只是梯度函数时哪…

Perl 格式化输出

Perl 格式化输出 引言 Perl 是一种通用、解释型、动态编程语言&#xff0c;广泛应用于文本处理、系统管理、网络编程等领域。在Perl编程中&#xff0c;格式化输出是一种常见的需求&#xff0c;它可以帮助开发者更好地展示和打印信息。本文将详细讲解Perl中格式化输出的方法&…

Python爬虫实战:研究markdown2库相关技术

一、引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上的信息量呈指数级增长。如何高效地获取和整理这些信息成为了一个重要的研究课题。网络爬虫作为一种自动获取网页内容的技术,能够按照一定的规则,自动地抓取万维网信息,为信息的收集提供了有力手段。 Markdown …

【Linux】基本指令详解(二) 输入\输出重定向、一切皆文件、认识管道、man、cp、mv、echo、cat

文章目录一、man指令二、输入/输出重定向(echo、一切皆文件&#xff09;三、cp指令四、mv指令五、cat指令六、more/less指令七、head/tail指令八、管道初见一、man指令 Linux的指令有很多参数&#xff0c;我们不可能全记住&#xff0c;可以通过查看联机手册获取帮助。 man 指令…

MVC HTML 帮助器

MVC HTML 帮助器 引言 MVC&#xff08;模型-视图-控制器&#xff09;是一种流行的软件架构模式&#xff0c;它将应用程序的逻辑分解为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09…

linux下手工安装ollama0.9.6

1、去下载ollama的linux版的压缩包&#xff1a; 地址&#xff1a;https://github.com/ollama/ollama/releases2、上传到linux中。3、解压&#xff1a; tar zxvf ollama-linux-amd64-0.9.6.tgz -C /usr/local/4、如果仅仅是要手工执行&#xff0c;已经可以了&#xff1a; ollama…

kotlin布局交互

将 wrapContentSize() 方法链接到 Modifier 对象&#xff0c;然后传递 Alignment.Center 作为实参以将组件居中。Alignment.Center 会指定组件同时在水平和垂直方向上居中。 DiceWithButtonAndImage(modifier Modifier.fillMaxSize().wrapContentSize(Alignment.Center) )创建…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ToastNotification(推送通知)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— ToastNotification组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script s…

学习笔记(34):matplotlib绘制图表-房价数据分析与可视化

学习笔记(34):matplotlib绘制图表-房价数据分析与可视化分析房价分布情况&#xff0c;通过直方图、核密度估计和正态分布拟合来直观展示房价的分布特征&#xff0c;并进行统计检验。一、房价数据分析与可视化&#xff0c;代码分析1.1、导入必要的库import pandas as pd import …