Kubernetes(K8S)集群部署

目录

一、创建3台虚拟机

二、为每台虚拟机安装Docker

三、安装kubelet

3.1 安装要求

3.2 为每台服务器完成前置设置

3.3 为每台服务器安装kubelet、kubeadm、kubectl

四、使用kubeadm引导集群

4.1 master服务器

4.2 node1、node2服务器

4.3 初始化主节点

4.4 work节点加入集群

五、token过期怎么办?

六、安装可视化界面dashboard

6.1 安装

6.2 暴露端口

6.3 访问web界面

6.4 创建访问账号

6.5 生成令牌

6.6 登录

七、写在后面的话


一、创建3台虚拟机

具体操作步骤可以参考之前的教程,建议是先安装一台,然后克隆虚拟机,这样速度快。

注意:在克隆时记得修改Mac地址、IP地址、UUID和主机名。(最后别忘了保存下快照~)

安装VMware虚拟机、Linux系统(CentOS7)_何苏三月的博客-CSDN博客

克隆Linux系统(centos)_linux克隆_何苏三月的博客-CSDN博客

 

二、为每台虚拟机安装Docker

请参考:Docker安装、常见命令、安装常见容器(Mysql、Redis等)_docker redis 容器_何苏三月的博客-CSDN博客

教程中安装docker的命令

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

原来是默认安装最新版,这里需要指定一下版本,目的是保障后续安装k8s不出问题:

yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

其他步骤不变。

三、安装kubelet

3.1 安装要求

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。

  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)

  • 2 CPU 核或更多

  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)

    • 设置防火墙放行规则

  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。

    • 设置不同hostname
  • 开启机器上的某些端口。请参见这里 了解更多详细信息。

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

    • ​​​​​​​永久关闭

3.2 为每台服务器完成前置设置

#各个机器设置自己的域名
hostnamectl set-hostname xxxx# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config#关闭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

3.3 为每台服务器安装kubelet、kubeadm、kubectl

kubelet - “厂长”

kubectl - 程序员敲命令行的命令窗

kubeadm - 引导创建集群的

# 1.先配置K8S去哪儿下载的地址信息
cat <<EOF > /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
EOF
# 2. 安装
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
# 3. 启动kubelet
sudo systemctl enable --now kubelet

💡systemctl status kubelet 查看状态会发现,kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。这是正常现象不用管!

四、使用kubeadm引导集群

4.1 master服务器

下载各个机器需要的镜像,以下只需要在master机器上执行:

# 1. 定义一个for循环,需要的东西下载
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/lfy_k8s_images/$imageName
done
EOF
# 2. 赋予权限,让它下载这些东西
chmod +x ./images.sh && ./images.sh

4.2 node1、node2服务器

从图上可以知道,从节点也需要安装kube-proxy。我们可以只下载这个镜像,当然了为了避免出现意外,我们也可以都下载下来。

方法完全参考4.1

4.3 初始化主节点

1.首先给所有的服务器都添加一下k8s110这台服务器的域名映射

#所有机器添加master域名映射,以下需要修改为自己的内网ip地址
echo "192.168.37.110  cluster-endpoint" >> /etc/hosts

2.然后只在k8s110这台服务器上执行主节点初始化过程:

#主节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.37.110 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.50.0/24#要求所有网络范围不重叠 --pod-network-cidr  --service-cidr --apiserver-advertise-address 都不能重叠

如果出现上述错误,则执行如下命令:

sysctl -w net.ipv4.ip_forward=1

然后重新执行

最后看到如下画面则表示初始化成功!

这段还比较重要的,它告诉我们怎么使用这个集群信息等等,所以我们把文本单独复制出来

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/.kubesudo 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.confYou 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-endpoint:6443 --token 3e54se.alzs9d1mkf30f25w \--discovery-token-ca-cert-hash sha256:689c076e294bdbb588103a51aaa7248b8a0df34bde634a6189d311ad46a02856 \--control-planeThen you can join any number of worker nodes by running the following on each as root:kubeadm join cluster-endpoint:6443 --token 3e54se.alzs9d1mkf30f25w \--discovery-token-ca-cert-hash sha256:689c076e294bdbb588103a51aaa7248b8a0df34bde634a6189d311ad46a02856

那么按照它的要求一步一步执行吧!

3.按要求创建文件夹复制文件给予权限等操作

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

发现k8s110这台服务器就是master节点了,但是它的状态是NotReady。

没关系按照它的要求继续执行,下一步说需要安装一个网络插件。

4.安装网络插件

可以有多种安装选择,我们就用calico

curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

下载成功,我们calico.yaml配置文件就有了。

重要提示💡:如果我们在初始化主节点时,修改了--pod-network-cidr=192.168.0.0/16,那么我们就要进入这个配置文件,将我们修改后的ip地址写上去。

ok,有了这个配置文件,就可以通过如下命令为k8s安装calico插件所需要的东西了

#根据配置文件,给集群创建资源(以后通过该命令为k8s创建资源,不限于calico)
kubectl apply -f calico.yaml

 然后执行命令安装calico网络插件

如果出现上述提示,说明我们的yaml文件有可能换行符搞错了等等。

再重新下载就好了。

我们如何查看集群部署了哪些应用呢?

# 查看集群部署了哪些应用
docker ps
# 等价于
kubectl get pods -A
# 运行中的应用在docker里面叫容器,在k8s里面叫Pod,至于为什么,后续再讲

以上,master节点就准备就绪了!

4.4 work节点加入集群

前面初始化主节点成功后的提示中有步骤:

kubeadm join cluster-endpoint:6443 --token 3e54se.alzs9d1mkf30f25w \--discovery-token-ca-cert-hash sha256:689c076e294bdbb588103a51aaa7248b8a0df34bde634a6189d311ad46a02856

我们只需要将它在另外两台服务器各自执行即可。

如果加入报错,请查看是否已经关闭了防火墙,确保关闭防火墙然后执行:

sysctl -w net.ipv4.ip_forward=1

ok,然后去master查看一下节点信息。

我们也可以通过linux的命令 watch -n 1 kubectl get pods -A,每一秒查看一下状态

OK了,我们再看看

至此,K8S集群就跑起来了。

五、token过期怎么办?

token超过24小时就失效了,如果我们还没有加入从节点,或者想加入新的从节点,可以在master节点执行如下命令,让它重新生成

kubeadm token create --print-join-command

六、安装可视化界面dashboard

6.1 安装

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

如果网络不好安装不了就复制下面的,将它写入到一个yaml文件中,然后执行该文件即可:

# Copyright 2017 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.apiVersion: v1
kind: Namespace
metadata:name: kubernetes-dashboard---apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard---kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard---apiVersion: v1
kind: Secret
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard-certsnamespace: kubernetes-dashboard
type: Opaque---apiVersion: v1
kind: Secret
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard-csrfnamespace: kubernetes-dashboard
type: Opaque
data:csrf: ""---apiVersion: v1
kind: Secret
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard-key-holdernamespace: kubernetes-dashboard
type: Opaque---kind: ConfigMap
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard-settingsnamespace: kubernetes-dashboard---kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
rules:# Allow Dashboard to get, update and delete Dashboard exclusive secrets.- apiGroups: [""]resources: ["secrets"]resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]verbs: ["get", "update", "delete"]# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.- apiGroups: [""]resources: ["configmaps"]resourceNames: ["kubernetes-dashboard-settings"]verbs: ["get", "update"]# Allow Dashboard to get metrics.- apiGroups: [""]resources: ["services"]resourceNames: ["heapster", "dashboard-metrics-scraper"]verbs: ["proxy"]- apiGroups: [""]resources: ["services/proxy"]resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]verbs: ["get"]---kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard
rules:# Allow Metrics Scraper to get metrics from the Metrics server- apiGroups: ["metrics.k8s.io"]resources: ["pods", "nodes"]verbs: ["get", "list", "watch"]---apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: kubernetes-dashboard
subjects:- kind: ServiceAccountname: kubernetes-dashboardnamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kubernetes-dashboard
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: kubernetes-dashboard
subjects:- kind: ServiceAccountname: kubernetes-dashboardnamespace: kubernetes-dashboard---kind: Deployment
apiVersion: apps/v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s-app: kubernetes-dashboardtemplate:metadata:labels:k8s-app: kubernetes-dashboardspec:containers:- name: kubernetes-dashboardimage: kubernetesui/dashboard:v2.3.1imagePullPolicy: Alwaysports:- containerPort: 8443protocol: TCPargs:- --auto-generate-certificates- --namespace=kubernetes-dashboard# Uncomment the following line to manually specify Kubernetes API server Host# If not specified, Dashboard will attempt to auto discover the API server and connect# to it. Uncomment only if the default does not work.# - --apiserver-host=http://my-address:portvolumeMounts:- name: kubernetes-dashboard-certsmountPath: /certs# Create on-disk volume to store exec logs- mountPath: /tmpname: tmp-volumelivenessProbe:httpGet:scheme: HTTPSpath: /port: 8443initialDelaySeconds: 30timeoutSeconds: 30securityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsUser: 1001runAsGroup: 2001volumes:- name: kubernetes-dashboard-certssecret:secretName: kubernetes-dashboard-certs- name: tmp-volumeemptyDir: {}serviceAccountName: kubernetes-dashboardnodeSelector:"kubernetes.io/os": linux# Comment the following tolerations if Dashboard must not be deployed on mastertolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule---kind: Service
apiVersion: v1
metadata:labels:k8s-app: dashboard-metrics-scrapername: dashboard-metrics-scrapernamespace: kubernetes-dashboard
spec:ports:- port: 8000targetPort: 8000selector:k8s-app: dashboard-metrics-scraper---kind: Deployment
apiVersion: apps/v1
metadata:labels:k8s-app: dashboard-metrics-scrapername: dashboard-metrics-scrapernamespace: kubernetes-dashboard
spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s-app: dashboard-metrics-scrapertemplate:metadata:labels:k8s-app: dashboard-metrics-scraperannotations:seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'spec:containers:- name: dashboard-metrics-scraperimage: kubernetesui/metrics-scraper:v1.0.6ports:- containerPort: 8000protocol: TCPlivenessProbe:httpGet:scheme: HTTPpath: /port: 8000initialDelaySeconds: 30timeoutSeconds: 30volumeMounts:- mountPath: /tmpname: tmp-volumesecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsUser: 1001runAsGroup: 2001serviceAccountName: kubernetes-dashboardnodeSelector:"kubernetes.io/os": linux# Comment the following tolerations if Dashboard must not be deployed on mastertolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedulevolumes:- name: tmp-volumeemptyDir: {}

6.2 暴露端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

type: ClusterIP 改为 type: NodePort

相当于docker中将内部的端口映射到linux的某个端口

找到放行的端口

kubectl get svc -A |grep kubernetes-dashboard
## 如果是云服务器,找到端口,在安全组放行

6.3 访问web界面

访问: https://集群任意IP:端口 https://192.168.37.110:31820/

发现虚拟机部署的无法访问,云服务器则没有问题。

我后面试了试Google、Edge都不行,华为浏览器、火狐浏览器可以访问到:

 具体怎么解决,这个我放到后面有时间再处理吧~

6.4 创建访问账号

创建一个配置文件dash-usr.yaml

#创建访问账号,准备一个yaml文件; 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

6.5 生成令牌

这个可视化界面是通过令牌登录的,我们可以通过如下命令生成访问令牌:

#获取访问令牌
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}}"

6.6 登录

七、写在后面的话

值得注意的是,我们的这些kubectl命令都需要在master节点上运行,别整岔劈了!

另外,我们重启后,k8s集群正常来说就会自动启动,只不过部分应用需要时间慢慢启动,等他们全部running

如果发现没有重启成功,那么检查一下swap交换分区是不是没有关闭?防火墙是不是打开了?docker是不是都启动了?

遇事不要慌,逐一进行排查,这也是处理问题的能力。我在搭建的过程中,也遇到了不少的坑,正常。不过只要严格按照上述过程执行,我相信问题不大的。

好了,我们下一个阶段见!

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

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

相关文章

腾讯云 AI 绘画:文生图、图生图、图审图 快速入门

腾讯云 AI 绘画是腾讯云推出的一款基于人工智能的图像生成和编辑产品&#xff0c;能够根据输入的图片或描述文本&#xff0c;智能生成与输入内容相关的图片&#xff0c;支持多样化的图片风格选择。 在本文中&#xff0c;我们将介绍如何使用腾讯云 AI 绘画的三项主要功能&#…

如何使用 VuePress 搭建博客网站并 Vercel 部署

先来看一下网站截图&#xff1a; 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter2.使用你喜欢的包管理器进行初始化 yarn init # npm init3.将 VuePress 安装为本地依赖 yarn add -D vuepress # npm install -D vuepress4.创建你…

Qt中的单例模式

QT单例类管理信号和槽函数 Chapter1 Qt中的单例模式一、什么是单例模式&#xff1f;二、Qt中单例模式的实现2.1、静态成员变量2.2、静态局部变量2.3、Q_GLOBAL_STATIC 宏实例2 三、使用场景四、注意事项 Chapter2 QT单例类管理信号和槽函数一、创建单例类二、主界面添加组件三、…

Redis3.2.12版本服务器迁移

1.新机器更新yum源 yum -y update 2.新机器安装redis数据库 yum install redis 3.新机器下载fedora的epel仓库 systemctl enable redis 4.将旧机器上的/etc/redis.conf拷贝到新机器的/config目录下 scp -r -P22 redis.config root162.32.196.57:/config/redis.config 5.新机器启…

为虚拟网络提供敏捷负载均衡:Everoute LB 特性解读

为了保证应用系统的可用性&#xff0c;同时避免并发访问导致后端服务器出现性能瓶颈&#xff0c;不少用户都通过负载均衡技术优化流量分发。随着虚拟化平台下用户业务规模的持续扩大&#xff0c;虚拟化网络的数据访问量也不断增加&#xff0c;而传统负载均衡通常通过硬件负载均…

PyTorch基础(18)-- torch.stack()方法

一、方法详解 首先&#xff0c;看一下stack的直观解释&#xff0c;动词可以简单理解为&#xff1a;把……放成一堆、把……放成一摞。 有了对stack方法的直观感受&#xff0c;接下来&#xff0c;我们正式解析torch.stack方法。 PyTorch torch.stack() method joins (concaten…

统计学习方法 支持向量机(下)

文章目录 统计学习方法 支持向量机&#xff08;下&#xff09;非线性支持向量机与和核函数核技巧正定核常用核函数非线性 SVM 序列最小最优化算法两个变量二次规划的求解方法变量的选择方法SMO 算法 统计学习方法 支持向量机&#xff08;下&#xff09; 学习李航的《统计学习方…

数据结构—线性表(下)

文章目录 6.线性表(下)(4).栈与队列的定义和ADT#1.ADT#2.栈的基本实现#3.队列的形式#4.队列的几种实现 (5).栈与队列的应用#1.栈的应用i.后缀表达式求值ii.中缀表达式转后缀表达式 #2.队列的应用 (6).线性表的其他存储方式#1.索引存储#2.哈希存储i.什么是哈希存储ii.碰撞了怎么…

【高阶数据结构】B树

目录 1.B树 2.B树和B树的不同 3.B*树 B树较于哈希红黑树的优势&#xff1a;外查找&#xff1a;读取磁盘数据 &#xff1b; B树的高度更低&#xff0c;对磁盘的进行I/O操作的次数更少&#xff08;磁盘的性能比内存差得多&#xff09;&#xff1b; 1.B树 1.1.B树的概念&am…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台&#xff0c;为了保护其网站数据的安全性&#xff0c;采取了一系列的反爬虫机制。然而&#xff0c;作为开发者&#xff0c;我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库&#xff0c;它提供…

2023年集成电路还缺人吗?集成电路产业人才供需研讨会

10月20日&#xff0c;移知教育创始人团长受邀参与由ARM举办的《集成电路产业人才供需研讨会》&#xff0c;同样受邀参与的还有上海大学、华东理工大学、华东师范大学、上海工程技术大学、上海人社高级职称评审专家等等&#xff0c;高校负责人以及行业专家应邀参加了本次研讨会。…

数学与经济管理

数学与经济管理&#xff08;2-4分&#xff09; 章节概述 最小生成树问题 答案&#xff1a;23 讲解地址&#xff1a;74-最小生成树问题_哔哩哔哩_bilibili 最短路径问题 答案&#xff1a;81 讲解地址&#xff1a;75-最短路径问题_哔哩哔哩_bilibili 网络与最大流量问题 真题 讲解…

asp.net乡村旅游管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乡村旅游管理系统是一套完善的web设计管理系统系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net乡村旅游管理系统 二、…

2023年下半年WSK-PETS5考试内容大纲及题型解析

国家公派留学人员全国外语水平考试&#xff08;WSK-PETS5&#xff09;成绩作为国家留学基金委&#xff08;CSC&#xff09;认可语言成绩证明&#xff0c;一直备受公派访问学者、博士后申请者的关注。随着下半年考试时间的临近&#xff0c;知识人网小编特整理出本次考试内容大纲…

U盘安装Windows10系统(最新最详细图文教程)

目录 一.简介 二.安装步骤 2.1、用U盘制作PE系统 2.2 安装系统 软件&#xff1a;Windows 10版本&#xff1a;1909语言&#xff1a;简体中文大小&#xff1a;4.95G安装环境&#xff1a;PE系统&#xff0c;7代以上处理器硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xf…

【从瀑布模式到水母模式】ChatGPT如何赋能软件研发全流程

文章目录 &#x1f384;前言&#x1f354;本书概要&#x1f33a;内容简介&#x1f33a;作者简介&#x1f33a;专家推荐&#x1f6f8;读者对象&#x1f354;彩蛋 &#x1f384;前言 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地…

聊聊“JVM 调优JVM 性能优化”是怎么个事?

所谓“调优”就是一个诊断和处理手段&#xff0c;最终的目标是让系统的处理能力&#xff0c;也就是“性能”达到最优化。 计算机系统中&#xff0c;性能相关的资源主要分为这几类&#xff1a; CPU&#xff1a;CPU 是系统最关键的计算资源&#xff0c;在单位时间内有限&#xf…

Qt篇——子控件QLayoutItem与实际控件的强转

方法&#xff1a;使用qobject_cast<QLabel*>() &#xff0c;将通过itemAt(i)获取到的子控件(QLayoutItem)强转为子控件的实际类型(如QLineEdit、QLabel等)。 场景举例&#xff1a; QLabel *label qobject_cast<QLabel*>(ui->horizontalLayout_40->itemAt(0…

十八、字符串(3)

本章概要 正则表达式 基础创建正则表达式量词CharSequencePattern 和 Matcherfinde()组&#xff08;Groups&#xff09;start() 和 end()Pattern 标记split()替换操作reset()正则表达式与 Java I/0 正则表达式 很久之前&#xff0c;_正则表达式_就已经整合到标准 Unix 工具…

在el-dialog中使用tinymce 点击工具栏下拉框被遮挡

在el-dialog中使用tinymce控件时&#xff0c;会出现点击工具栏下拉框出现在弹窗下一层&#xff0c;审查元素之后发现是tinymce的下拉框z-index优先级低于el-dialog的z-index导致的&#xff0c;所以需要增加tinymce的下拉框的z-index值。 通过审查元素得到&#xff0c;需要修改t…