k8s中label标签、deployment控制器、service、ipvs管理简介

news2024/11/17 0:25:45

目录

一.label管理

1.label的作用和特点

2.标签的查询和筛选

(1)等式型

(2)集合型

3.命令行打标签用法示例

(1)为资源对象添加多个标签

(2)更该原有标签

(3)删除标签

4.配置文件打标签用法示例

二.deployment控制器

1.pod控制器简介

2.deployment控制器

三.service管理

1.kubernetes内部可访问的service

2.kubernetes外部可访问的service

3.删除service

四.ipvs管理(做一次就行)

1.加载内核模块(通常在部署kubernetes环境时就已经做了)

2.edit修改kube-proxy配置

3.删除kube-proxy空间下的所有pod以重新添加生效


一.label管理

1.label的作用和特点

(1)label用来在资源上添加标识,来对资源进行区分选择

(2)label一般会以类似于键值对的形式打到资源上,如node、pod、service等对象,一个资源对象可以有多个标签,多个资源对象也可以打同一个标签

2.标签的查询和筛选

使用-l参数,需要指定资源类型(但不需要指定该资源的对象具体名称)、筛选条件,命名空间

(1)等式型

[root@k8s-master ~]# kubectl get pod -l port=80 --show-labels -n myns   #筛选并输出myns下标签为port=80的pod
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          8m10s   port=80,run=nginx,user=nginx
​
[root@k8s-master ~]# kubectl get pod -l port!=80 --show-labels -n myns   #筛选并输出myns下标签不为port=80的pod
No resources found in myns namespace.

(2)集合型

[root@k8s-master ~]# kubectl get pod -l 'user in (nginx,sulibao)' --show-labels -n myns
#筛选并输出myns下标签的user字段的值是nginx或sulibao的pod
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          32m   port=80,run=nginx,user=nginx
[root@k8s-master ~]# kubectl get pod -l 'user notin (sulibao)' --show-labels -n myns
#筛选并输出myns下标签的user字段的值不是sulibao的pod
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          38m   port=80,run=nginx,user=nginx

3.命令行打标签用法示例

(1)为资源对象添加多个标签

[root@k8s-master ~]# kubectl get pod nginx -n myns --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          85s   run=nginx
​
[root@k8s-master ~]# kubectl label pod nginx port=80 -n myns
pod/nginx labeled
​
[root@k8s-master ~]# kubectl label pod nginx user=nginx -n myns
pod/nginx labeled
​
[root@k8s-master ~]# kubectl get pod nginx -n myns --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          2m10s   port=80,run=nginx,user=nginx

(2)更该原有标签

[root@k8s-master ~]# kubectl label pod nginx user=sulibao -n myns --overwrite 
pod/nginx labeled
[root@k8s-master ~]# kubectl get pod -n myns --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          49m   port=80,run=nginx,user=sulibao

(3)删除标签

指定以“标签名-”格式来删除

[root@k8s-master ~]# kubectl label pod nginx port- -n myns
pod/nginx unlabeled
[root@k8s-master ~]# kubectl get pod -n myns --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          51m   run=nginx,user=sulibao

4.配置文件打标签用法示例

(1)定义创建namespace和pod和label文件

[root@k8s-master ~]# cat nginxpod.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: myns
​
---
​
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: myns
  labels:       #指定标签选项
    version: "2.0"   #标签内容
spec:
  containers:
  - name: nginx-containers
    image: nginx

(2)创建并验证

​[root@k8s-master ~]# kubectl create -f nginxpod.yaml 
namespace/myns created
pod/nginxpod created
[root@k8s-master ~]# kubectl get pods -n myns --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
nginxpod   1/1     Running   0          19s   version=2.0

二.deployment控制器

1.pod控制器简介

以往文章提到,kubernetes里pod是最小的控制单元,大部分情况下是通过pod控制器来操作pod的,pod控制器主要是在当pod故障时,进行重启或重新添加pod资源

2.deployment控制器

(1)命令行常用参数

参数功能
--image指定镜像
--port指定端口
--namespace指定命名空间
--replicas指定pod的期望数量,指定后再某个pod出现故障退出控制后会自动添加pod数量至该参数指定的数量,在1.18版本后--replicas用于kubectl create命令而不存在于kubectl run的使用范围

(2)deployment控制器管理pod资源示例

#命令行管理
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx --port=80 --replicas=3 -n myns
deployment.apps/nginx created
[root@k8s-master ~]# kubectl get pods -n myns
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c5ddbdf54-h65ch   1/1     Running   0          15s
nginx-7c5ddbdf54-ktmj9   1/1     Running   0          15s
nginx-7c5ddbdf54-vpm8n   1/1     Running   0          15s
​
[root@k8s-master ~]# kubectl get deploy -n myns    #查看deployment信息
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           29s
#UP-TO-DATE表示成功成绩的副本数,AVAILABLE表示可用的副本数
[root@k8s-master ~]# kubectl delete pod nginx-7c5ddbdf54-h65ch -n myns    #删除一个pod资源
pod "nginx-7c5ddbdf54-h65ch" deleted
[root@k8s-master ~]# kubectl get pods -n myns    
#由于我们指定了replicas=3,所以即使我们删除了一个pod,也会自动新增一个新的pod以达到我们的指定的期望pod数量
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c5ddbdf54-9zf2k   1/1     Running   0          8s
nginx-7c5ddbdf54-ktmj9   1/1     Running   0          104s
nginx-7c5ddbdf54-vpm8n   1/1     Running   0          104s
[root@k8s-master ~]# kubectl get pods -n myns -o wide   
#新增的pod的name和IP都会发生改变,这个IP也是虚拟IP,外部无法直接访问
NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
nginx-7c5ddbdf54-c9dtt   1/1     Running   0          2m2s   10.244.169.133   k8s-node2   <none>           <none>
nginx-7c5ddbdf54-q2rtf   1/1     Running   0          2m2s   10.244.169.132   k8s-node2   <none>           <none>
nginx-7c5ddbdf54-rfsvf   1/1     Running   0          2m2s   10.244.36.68     k8s-node1   <none>           <none>
​
[root@k8s-master ~]# kubectl delete deploy nginx -n myns   #删除整个资源
deployment.apps "nginx" deleted
​


#文件形式
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx --port=80 --replicas=3 -n myns -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: "2023-10-30T11:27:49Z"
  generation: 1
  labels:
    app: nginx
  name: nginx
  namespace: myns
  resourceVersion: "4986"
  uid: 1872c4fe-d168-4fb1-9721-f6edff5beab6
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: {}
[root@k8s-master ~]# kubectl get pods -n myns
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c5ddbdf54-c9dtt   1/1     Running   0          15s
nginx-7c5ddbdf54-q2rtf   1/1     Running   0          15s
nginx-7c5ddbdf54-rfsvf   1/1     Running   0          15s

三.service管理

此处主要简单介绍解决访问pod上nginx服务的问题,service也可以理解为pod们被访问的接口,也可以通过service实现负载均衡

1.kubernetes内部可访问的service

(1)简单示例

[root@k8s-master ~]# kubectl expose deployment nginx --name=service-nginx --type=ClusterIP --port=80 --target-port=80 -n myns
#指定暴露nginx,service名称为service-nginx,类型为ClusterIP(只有集群内部能通信的类型),暴露端口,名称空间
service/service-nginx exposed
[root@k8s-master ~]# kubectl get service service-nginx -n myns -o wide 
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service-nginx   ClusterIP   10.109.112.194   <none>        80/TCP    36s   app=nginx
[root@k8s-master ~]# curl 10.109.112.194    #访问的是clusterip,这个ip在service工作期间通常是不会变的
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

(2)简单负载均衡实现

[root@k8s-master ~]# kubectl get pods -n myns -o wide 
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
nginx-7c5ddbdf54-c9dtt   1/1     Running   0          22m   10.244.169.133   k8s-node2   <none>           <none>
nginx-7c5ddbdf54-q2rtf   1/1     Running   0          22m   10.244.169.132   k8s-node2   <none>           <none>
nginx-7c5ddbdf54-rfsvf   1/1     Running   0          22m   10.244.36.68     k8s-node1   <none>           <none>

[root@k8s-master ~]# kubectl exec nginx-7c5ddbdf54-c9dtt -it -n myns -- /bin/bash  #对于pod的进一步操作后几篇文章作介绍和演示
root@nginx-7c5ddbdf54-c9dtt:/# echo `hostname` > /usr/share/nginx/html/index.html 
root@nginx-7c5ddbdf54-c9dtt:/# exit
exit
[root@k8s-master ~]# kubectl exec nginx-7c5ddbdf54-q2rtf -it -n myns -- /bin/bash
root@nginx-7c5ddbdf54-q2rtf:/# echo `hostname` > /usr/share/nginx/html/index.html
root@nginx-7c5ddbdf54-q2rtf:/# exit
exit
[root@k8s-master ~]# kubectl exec nginx-7c5ddbdf54-rfsvf -it -n myns -- /bin/bash
root@nginx-7c5ddbdf54-rfsvf:/# echo `hostname` > /usr/share/nginx/html/index.html
root@nginx-7c5ddbdf54-rfsvf:/# exit
exit
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-c9dtt
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-q2rtf
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-q2rtf
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-q2rtf
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-rfsvf
[root@k8s-master ~]# curl 10.109.112.194
nginx-7c5ddbdf54-rfsvf

2.kubernetes外部可访问的service

(1)按照上面的步骤就只需要将type改为NodePort即可

[root@k8s-master ~]# kubectl expose deployment nginx --name=service-nginx1 --type=NodePort --port=80 --target-port=80 -n myns
service/service-nginx1 exposed
[root@k8s-master ~]# kubectl get service service-nginx1 -n myns -o wide 
NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service-nginx1   NodePort   10.110.248.180   <none>        80:30331/TCP   19s   app=nginx

(2)在主机和浏览器都可以访问,同样可以实现负载均衡

注意:是使用主机(虚拟机地址)+service暴露的端口(示例暴露的是30331端口)进行访问

[root@k8s-master ~]# curl 192.168.2.150:30331
nginx-7c5ddbdf54-q2rtf
[root@k8s-master ~]# curl 192.168.2.150:30331
nginx-7c5ddbdf54-c9dtt
[root@k8s-master ~]# curl 192.168.2.150:30331
nginx-7c5ddbdf54-rfsvf

3.删除service

[root@k8s-master ~]# kubectl delete service service-nginx -n myns

四.ipvs管理(做一次就行)

使用ipvs去替换iptables以支持更复杂的调度算法、健康检查等,提高管理运行效率

1.加载内核模块(通常在部署kubernetes环境时就已经做了)

[root@k8s-master ~]# lsmod | grep ip_vs
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  10 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

2.edit修改kube-proxy配置

[root@k8s-master ~]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited
#将mode改为ipvs

3.删除kube-proxy空间下的所有pod以重新添加生效

(1)删除

[root@k8s-master ~]# kubectl get pods -n kube-system | grep kube-proxy
kube-proxy-tk2m4                           1/1     Running   0          99m
kube-proxy-w4nbw                           1/1     Running   0          98m
kube-proxy-x7z2w                           1/1     Running   0          98m
[root@k8s-master ~]# kubectl delete pod kube-proxy-tk2m4 kube-proxy-w4nbw kube-proxy-x7z2w -n kube-system
pod "kube-proxy-tk2m4" deleted
pod "kube-proxy-w4nbw" deleted
pod "kube-proxy-x7z2w" deleted

(2)验证

#名称已发生变化,新pod已添加成功
[root@k8s-master ~]# kubectl get pods -n kube-system | grep kube-proxy
kube-proxy-6xlff                           1/1     Running   0          16s
kube-proxy-k5fm7                           1/1     Running   0          16s
kube-proxy-sqzxf                           1/1     Running   0          16s
#查看日志时已经使用ipvs进行代理
[root@k8s-master ~]# kubectl logs kube-proxy-6xlff -n kube-system | grep ipvsI1030 12:24:48.489664       1 server_others.go:218] "Using ipvs Proxier"
#已生效
[root@k8s-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.150:30331 rr
  -> 10.244.36.68:80              Masq    1      0          0         
  -> 10.244.169.132:80            Masq    1      0          0         
  -> 10.244.169.133:80            Masq    1      0          0         
TCP  10.96.0.1:443 rr
  -> 192.168.2.150:6443           Masq    1      1          0         
TCP  10.96.0.10:53 rr
  -> 10.244.235.193:53            Masq    1      0          0         
  -> 10.244.235.195:53            Masq    1      0          0         
TCP  10.96.0.10:9153 rr
  -> 10.244.235.193:9153          Masq    1      0          0         
  -> 10.244.235.195:9153          Masq    1      0          0         
TCP  10.109.112.194:80 rr
  -> 10.244.36.68:80              Masq    1      0          0         
  -> 10.244.169.132:80            Masq    1      0          0         
  -> 10.244.169.133:80            Masq    1      0          0         
TCP  10.110.248.180:80 rr
  -> 10.244.36.68:80              Masq    1      0          0         
  -> 10.244.169.132:80            Masq    1      0          0         
  -> 10.244.169.133:80            Masq    1      0          0         
TCP  10.244.235.192:30331 rr
  -> 10.244.36.68:80              Masq    1      0          0         
  -> 10.244.169.132:80            Masq    1      0          0         
  -> 10.244.169.133:80            Masq    1      0          0         
UDP  10.96.0.10:53 rr
  -> 10.244.235.193:53            Masq    1      0          0         
  -> 10.244.235.195:53            Masq    1      0          0         

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

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

相关文章

Tomcat安装与配置文件解读

简介 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在…

什么是神经网络,它的原理是啥?(1)

参考&#xff1a;https://www.youtube.com/watch?vmlk0rddP3L4&listPLuhqtP7jdD8CftMk831qdE8BlIteSaNzD 视频1&#xff1a; 简单介绍神经网络的基本概念&#xff0c;以及一个训练好的神经网络是怎么使用的 分类算法中&#xff0c;神经网络在训练过程中会学习输入的 pat…

通过arthas vmtool 调用线上正在运行的service方法

通过arthas vmtool 调用线上正在运行的service方法 场景 场景具体描述业务上有某个缓存需要删除&#xff0c;但是没有写删除 key 的远程接口通过arthas执行 service 方法&#xff0c;删除缓存 key 1.前期准备 1.1下载arthas 官网地址 https://arthas.gitee.io/doc/quick-…

修改el-date-picker宽度

<div style"width: 100%"><el-date-pickerstyle"width:100%"v-model"value"type"datetimerange"start-placeholder"开始日期"end-placeholder"结束日期":default-time"[12:00:00]"value-forma…

编程实例:操作简单的台球计时计费软件推荐,可以连接灯控硬件设备以及灯控器布线图编程

编程实例&#xff1a;操作简单的台球计时计费软件推荐&#xff0c;可以连接灯控硬件设备以及灯控器布线图编程 1、计时计费功能 &#xff1a;开台时间和所用的时长直观显示&#xff0c;每3秒即可刷新一次时间。 2、销售商品功能 &#xff1a;商品可以绑定桌子最后一起结账&…

同城门户同城分类信息网站源码discuz插件+pc端+小程序端+49款插件

同城分类信息 同城好店 同城合伙人 同城招聘 同城卡 同城活动 同城优惠抢购 同城商城 同城头条 同城抽奖 同城拼团 同城砍价 同城电话本 同城认证 同城签到 同城拼车 同城红包 同城子站点 同城相亲 同城交友 同城小程序 代码逻辑清晰,文件规划统一明了&#xff0c;非常不错的&…

网络工程综合试题(二)

1. SR技术有哪些缺点&#xff1f; SR&#xff08;Segment Routing&#xff09;技术是一种新兴的网络编程技术&#xff0c;它具有很多优点&#xff0c;但也存在一些缺点&#xff0c;包括&#xff1a; 部署复杂性&#xff1a;SR技术需要对网络进行改造和升级&#xff0c;包括更新…

LeetCode 275. H 指数 II

原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数&#xff0c;citations 已经按照 升序排列 。计算并返回该研究者的 h…

Java学习 6.循环习题

1.根据年龄&#xff0c;打印出当前年龄段的人是少年&#xff08;低于18&#xff09;&#xff0c;青年&#xff08;19-28&#xff09;&#xff0c;中年&#xff08;29-55&#xff09;&#xff0c;老年&#xff08;55以上&#xff09;。 代码实现 public static void main(Strin…

爬取某信息化服务平台登录页面验证码

网站链接&#xff1a;https://login.cdpf.org.cn/uams/person.html 鼠标放到验证码上&#xff0c;右键“检查” 提取URL 爬虫代码&#xff1a; import requests # 导入base64库&#xff0c;用于对数据进行Base64编码和解码 import base64 # 从io模块导入BytesIO&#xff0c;它…

手把手教你根据接口文档,轻松开发 get 和 post 请求的脚本

前言 一般的接口文档描述的内容&#xff1a; 开发get请求的脚本&#xff0c;接口文档的描述如下&#xff1a; 在loadrunner里面创建一个空脚本&#xff1a; 在action空白处&#xff0c;点击insert—>step 输入web_custom_request&#xff0c;双击选择该函数&#xff0c;填入…

【如何写论文】硕博学位论文的结构框架、过程与大纲分析

硕士论文可以说是毕业前最重要的一部分&#xff0c;也可以说是展示和检验你3年研究生学习的成果的一个考试。硕士论文答辩和检验合格&#xff0c;才能够顺利拿到毕业生和学位证&#xff0c;可见其重要性。 目录 一、基础框架1.1、摘要&#xff08;Abstract&#xff09;1.2、绪论…

负债6W,依靠这个项目副业6个月还清欠款,还多存了10W+

真不敢想象负债6W“走投无路”的我还能通过副业逆天翻盘&#xff0c;6个月还清欠款&#xff0c;还让我多了10W存款&#xff0c;现在小日子也是相当滋润&#xff0c;吃穿不愁&#xff0c;不用过多为生计而奔波操劳。 仅代表个人收益 网盘下载地址&#xff1a;【安卓软件】音魔变…

2023年阿里云双11优惠来了,单笔最高可省2400元!

2023年阿里云双11活动终于来了&#xff0c;阿里云推出了金秋云创季活动&#xff0c;新用户、老用户、企业用户均可领取金秋上云礼包&#xff0c;单笔最高立减2400元&#xff01; 一、活动时间 满减券领取时间&#xff1a;2023年10月27日0点0分0秒-2023年11月30日23点59分59秒 …

FileMaker Pro 2023 Crack

FileMaker Pro 平台是工作组 DBMS 中的领先平台之一&#xff0c;可让您快速开发现成的解决方案&#xff0c;完全根据客户企业的需求量身定制&#xff0c;并使用这些解决方案组织集体工作。FileMaker Pro 强大的功能、对广泛目标平台的支持以及易于使用的界面使 FileMaker Pro 成…

【音视频|wav】wav音频文件格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

取石子

每一堆数量都>1的话可以把合并操作和取石子看成一种操作&#xff0c;总操作数就是sumn-1&#xff0c;为奇数就是Alice先手必胜&#xff0c;哪怕有一堆是2&#xff0c;Bob取后变为1&#xff0c;Alice也可以通过合并操作让1变成>1的数 可以分成两大板块a、b, a中方石子个数…

VM搭建虚拟机2(自定义安装)

文章目录 自定义安装选择你的centos下载目录设置用户名密码自定义安装目录注意&#xff0c;尽量别再同一位置安装虚拟机设置处理器数量内存根据所需配置&#xff08;默认1G&#xff09;NAT按需设置磁盘大小点击完成即可等待安装即可 VMware、centos、典型安装 自定义安装 选择你…

分治法求解棋盘覆盖问题

分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢&#xff1f;分治的技巧在于如何划分棋盘&#xff0c;使划分后的子棋盘的大小相同&#xff0c;并且每个子棋盘均包含一个特殊方格&#xff0c;从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…

Python算法练习 10.30

leetcode 841 钥匙和房间 有 n 个房间&#xff0c;房间按从 0 到 n - 1 编号。最初&#xff0c;除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而&#xff0c;你不能在没有获得钥匙的时候进入锁住的房间。 当你进入一个房间&#xff0c;你可能会在里面找…