k8s上对Pod的管理部分详解

目录

一.Pod结构介绍

1.user container

2.pause

二.Pod工作形式介绍

1.自主式pod

2.控制器管理下的pod

三.对Pod的操作介绍

1.run/apply -f/create -f运行pod

2.get查看pod信息

3.exec操作运行中的pod

(1)进入运行中的pod

(2)进入pod中的容器

4.logs打印pod日志

5.describe描述pod详细信息用于排错

6.edit编辑运行中的pod

7.cp复制pod内的文件到master

9.delete删除pod

10.扩展使用kubectl命令插件

四.pod的yaml文件配置定义解析

五.Pod对容器的封装

1.对单个容器的封装

2.对多个容器封装并绑定为一个Pod

六.静态Pod管理

1.配置文件方式

2.http方式


一.Pod结构介绍

pod中包含若干个容器,大体可以分为两大类

1.user container

用户程序所在容器,数量一般可多可少

2.pause

是每一个pod的根容器,主要是用来评估pod的健康状态和以根容器设置的IP实现pod内部通信

 

二.Pod工作形式介绍

主要通过yaml/json文件或kubectl run创建pod,但是pod的形式又可以分为两大类

1.自主式pod

通过命令行或run直接定义pod资源,这种情况下创建的pod在被删除后就彻底被删除了

2.控制器管理下的pod

控制器管理pod可以保障pod始终维持在指定的数量下运行,常见的pod控制器有上篇文章介绍到的deployment控制器,还有replicaset、job、cronjob、daemonset等

三.对Pod的操作介绍

1.run/apply -f/create -f运行pod

[root@k8s-master pod]# kubectl run mynginx --image=nginx -n myns
pod/mynginx created
[root@k8s-master pod]# kubectl create -f tomcat.yaml 
pod/tomcat created
[root@k8s-master pod]# kubectl apply -f httpd.yaml 
pod/httpd created
​
[root@k8s-master pod]# kubectl get pods -n myns
NAME      READY   STATUS    RESTARTS   AGE
httpd     1/1     Running   0          2m20s
mynginx   1/1     Running   0          4m33s
tomcat    1/1     Running   0          8s

2.get查看pod信息

(1)查看所有pod

[root@k8s-master ~]# kubectl get pods -A

(2)查看指定的单个/多个pod

[root@k8s-master ~]# kubectl get pod nginx -n myns
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9s
​
[root@k8s-master ~]# kubectl get pod nginx nginx1 -n myns
NAME     READY   STATUS    RESTARTS   AGE
nginx    1/1     Running   0          97s
nginx1   1/1     Running   0          15s

(3)查看pod同时查看其他类型资源(需要具体指定资源类型和名称)

[root@k8s-master ~]# kubectl get pod/nginx -n myns node/k8s-node1
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          104s
​
NAME             STATUS   ROLES    AGE    VERSION
node/k8s-node1   Ready    <none>   3m6s   v1.28.2

(4)同时应用多个关于pod的yaml文件时添加多个-f参数即可

(5)列出在某个节点上运行的pod

[root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k8s-node1

(6)-w实时查看pod信息

[root@k8s-master ~]# kubectl get  pod -w nginx -n myns 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          4h16m
[root@k8s-master ~]# 

3.exec操作运行中的pod

(1)进入运行中的pod

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- /bin/bash
root@nginx:/# ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp
​
#不进入但执行命令
[root@k8s-master ~]# kubectl exec -it nginx -n myns -- ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp

(2)进入pod中的容器

[root@k8s-master ~]# kubectl exec -it nginx -c xxx -n myns -- /bin/bash
#-c后指定容器名称

4.logs打印pod日志

[root@k8s-master ~]# kubectl logs nginx -n myns 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/10/31 09:08:21 [notice] 1#1: using the "epoll" event method
2023/10/31 09:08:21 [notice] 1#1: nginx/1.25.3
2023/10/31 09:08:21 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2023/10/31 09:08:21 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64
2023/10/31 09:08:21 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/10/31 09:08:21 [notice] 1#1: start worker processes
2023/10/31 09:08:21 [notice] 1#1: start worker process 29
2023/10/31 09:08:21 [notice] 1#1: start worker process 30
2023/10/31 09:08:21 [notice] 1#1: start worker process 31
2023/10/31 09:08:21 [notice] 1#1: start worker process 32

[root@k8s-master ~]# kubectl logs nginx -n myns -f #加-f参数持续监控

5.describe描述pod详细信息用于排错

[root@k8s-master ~]# kubectl describe pod nginx -n myns

6.edit编辑运行中的pod

更改完后需要w/wq保存

[root@k8s-master ~]# kubectl edit pod nginx -n myns

7.cp复制pod内的文件到master

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.36.65	nginx

[root@k8s-master ~]# kubectl cp nginx:etc/hosts -n myns /root/myhosts    #“:”后不需要指示“/”号,master的目标路径需要是一个文件而不是一个目录(此处的/root/myhosts)
[root@k8s-master ~]# cat myhosts 
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.36.65	nginx

9.delete删除pod

(1)通过delete pod进行删除

[root@k8s-master pod]# kubectl get pod mynginx -n myns --show-labels
NAME      READY   STATUS    RESTARTS   AGE   LABELS
mynginx   1/1     Running   0          37m   run=nginx,user=sulibao
[root@k8s-master pod]# kubectl delete pod mynginx -n myns
pod "mynginx" deleted

(2)若是通过文件创建的pod,可以通过delete -f进行删除

[root@k8s-master pod]# kubectl delete -f nginx.yaml 
pod "mynginx" deleted

(3)若是拥有标签的pod,可以通过匹配标签进行删除

[root@k8s-master pod]# kubectl delete pods -l run=nginx -n myns
pod "mynginx" deleted

10.扩展使用kubectl命令插件

(1)必须是“kubectl-自定义名称”格式命名

[root@k8s-master ~]# vim /usr/local/bin/kubectl-pwd   #放在/usr/local/bin下
[root@k8s-master ~]# cat /usr/local/bin/kubectl-pwd 
#!/bin/bash

pwd

[root@k8s-master ~]# chmod +x /usr/local/bin/kubectl-pwd    #一定要加上执行权限
[root@k8s-master ~]# kubectl pwd 
/root
[root@k8s-master pod]# kubectl pwd pod httpd -n myns
/root/pod

(2)kubectl plugin list查看已安装插件列表

[root@k8s-master ~]# kubectl plugin list
/usr/local/bin/kubectl-pwd

(3)rm直接删除该文件即可卸载插件

[root@k8s-master ~]# rm -f /usr/local/bin/kubectl-pwd
[root@k8s-master ~]# kubectl plugin list
error: unable to find any kubectl plugins in your PATH

四.pod的yaml文件配置定义解析

[root@k8s-master ~]# kubectl explain pod.spec
#可以以此形式来一层一层获取可配置项

apiVersion: v1 
#必选项,版本号,如V1
kind: Pod 
#必选项,资源类型,pod等
metadata: 
#必选项,元数据部分
  name: xxx 
  #Pod名称
  namespace: xxx 
  #Pod所属的命名空间,默认为"default"
  labels: 
  #自定义标签列表
    - name: xxx   
    #自定义标签内容
spec: 
#必选项,Pod中容器的详细定义
  containers: 
  #必选项,Pod中容器列表
  - name: xxx 
  #必选项,容器名称
    image: xxx 
    #必选项,容器的镜像名称
    imagePullPolicy: [ Always|Never|IfNotPresent ] 
    #获取镜像的策略,tag为latest默认always,tag为具体版本号,默认IfNotPresent。always表示每次都尝试重新拉取镜像;ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错
    command: [xxx] 
    #容器的启动命令列表,如不指定则使用打包时使用的启动命令
    args: [xxx] 
    #容器的启动命令给定参数列表
    workingDir: xxx 
    #容器的工作目录
    volumeMounts: 
    #挂载到容器内部的存储卷配置
    - name: xxx
    #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: xxx 
      #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: xxx
      #布尔值,是否为只读模式
    ports: 
    #需要暴露的端口库号列表
    - name: xxx
    #端口的名称
      containerPort: xxx 
      #容器需要监听的端口号
      hostPort: xxx
      #容器所在主机需要监听的端口号,默认与Container相同
      protocol: xxx 
      #端口协议,支持TCP和UDP,默认TCP
    env: 
    #容器运行前需设置的环境变量列表
    - name: xxx 
    #环境变量名称
      value: xxx 
      #环境变量的值
    resources: 
    #资源限制和请求的设置
      limits: 
      #资源限制的设置
        cpu: xxx 
        #cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: xxx 
        #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests: 
      #资源请求的设置
        cpu: xxx 
        #cpu请求,容器启动的初始可用数量
        memory: xxx 
        #内存请求,容器启动的初始可用数量
    lifecycle: 
    #生命周期钩子
      postStart: 
      #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
      preStop: 
      #容器终止前执行此钩子,无论结果如何,容器都会终止
  livenessProbe: 
  #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
    exec: 
    #对Pod容器内检查方式设置为exec方式
      command: [xxx] 
      #exec方式需要制定的命令或脚本
    httpGet: 
    #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
      path: xxx
      port: xxx
      host: xxx
      scheme: xxx
      HttpHeaders:
        - name: xxx
          value: xxx
    tcpSocket: 
    #对Pod内个容器健康检查方式设置为tcpSocket方式
      port: number
    initialDelaySeconds: 0 
    #容器启动完成后首次探测的时间,单位为秒
    timeoutSeconds: 0 
    #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
    periodSeconds: 0 
    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
    successThreshold: 0
    failureThreshold: 0
  securityContext:
    privileged: false
restartPolicy: [Always | Never | OnFailure] 
#Pod的重启策略
nodeName: <xxx> 
#设置NodeName表示将该Pod调度到指定到名称的node节点上
nodeSelector: xxx 
#设置NodeSelector表示将该Pod调度到包含这个label的node上
imagePullSecrets: 
#Pull镜像时使用的secret名称,以key:secretkey格式指定
  - name: xxx
hostNetwork: false 
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: 
#在该pod上定义共享存储卷列表
  - name: string 
  #共享存储卷名称 (volumes类型有很多种)
    emptyDir: {} 
    #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
    hostPath: xxx 
    #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
      path: xxx 
      #Pod所在宿主机的目录,将被用于同期中mount的目录
    secret: 
    #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
      scretname: xxx
      items:
      - key: xxx
        path: xxx
    configMap: 
    #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
      name: xxx
      items:
      - key: xxx
        path: xxx

五.Pod对容器的封装

1.对单个容器的封装

apiVersion: v1
kind: Pod
metadata:
  name: httpd
  labels:
    run: httpd
  namespace: myns
spec:
  containers:
  - name: httpd
    image: httpd
    ports:
    - containerPort: 80

2.对多个容器封装并绑定为一个Pod

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
  namespace: myns
  labels:
    name: tc
spec:
  containers:
  - name: first-container
    image: nginx
    ports:
    - containerPort: 80
  - name: second-container
    image: busybox
    command: ["/bin/sh", "-c", "while true; do echo 'Hello from the second container' > /shared-data/index.html; sleep 10; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /shared-data
    ports:
    - containerPort: 8080
  volumes:
  - name: shared-data
    emptyDir: {}

六.静态Pod管理

1.配置文件方式

(1)首先找到你的kubelet的service位置

[root@k8s-master ~]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/usr/bin/kubelet
/usr/lib/systemd/system/kubelet.service   #

(2)到该目录下查看是否有conf文件

[root@k8s-master ~]# ll /usr/lib/systemd/system/kubelet.service.d/
total 4
-rw-r--r-- 1 root root 1009 Nov 11 11:03 10-kubeadm.conf
[root@k8s-master ~]# vim  /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

(3)旧版本应该会有,我的Kubernetes v1.28.2没有行命令,手动添加

Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"

这行命令中指定了mainifest-path为/etc/kubernetes/manifests,那么我们在这个目录中去创建一个pod的yaml文件,重启kubelet服务,不需要apply此文件就会自动创建该pod

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

(4)验证是否成功

[root@k8s-master ~]# cat /etc/kubernetes/manifests/static.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myweb
  namespace: myns
  labels:
    name: my-web
spec:
  containers:
  - name: myhttpd
    image: httpd
    ports:
    - name: web
      containerPort: 80

[root@k8s-master manifests]# systemctl daemon-reload   #重载并重启
[root@k8s-master manifests]# systemctl restart kubelet.service 

[root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   1/1     Running   0          2m41s

(5)删除时注意事项

直接删除该静态pod只会让其呈现为pending状态,需要删除该yaml文件

[root@k8s-master ~]# kubectl delete pod myweb-k8s-master -n myns
pod "myweb-k8s-master" deleted
[root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   0/1     Pending   0          3s
[root@k8s-master ~]# rm -rf /etc/kubernetes/manifests/static.yaml 
[root@k8s-master ~]# kubectl get pods -n myns
NAME               READY   STATUS      RESTARTS   AGE
myweb-k8s-master   0/1     Completed   0          80s
[root@k8s-master ~]# kubectl get pods -n myns
No resources found in myns namespace.

2.http方式

使用“--manifest-url”参数来指定1url地址(不常用的方式),但是可以配合第一种方式使用,就cd到启动配置的mainifest-path下,使用wget把url内的配置文件下载下来即立即创建(配置文件有误的情况不会创建)

[root@k8s-master manifests]# wget http://47.115.228.189/web.yaml
--2023-11-11 17:10:02--  http://47.115.228.189/web.yaml
Connecting to 47.115.228.189:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 185 [application/octet-stream]
Saving to: ‘web.yaml’

100%[========================================================================================>] 185         --.-K/s   in 0s      

2023-11-11 17:10:02 (50.0 MB/s) - ‘web.yaml’ saved [185/185]

[root@k8s-master manifests]# kubectl get pods -n myns
NAME               READY   STATUS              RESTARTS   AGE
myweb-k8s-master   0/1     ContainerCreating   0          7s
[root@k8s-master manifests]# kubectl get pods -n myns
NAME               READY   STATUS    RESTARTS   AGE
myweb-k8s-master   1/1     Running   0          2m45s

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

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

相关文章

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…

阿里云付费用户破100万 用户规模亚洲最大

导读阿里巴巴集团公布2018财年第一季度财报&#xff0c;阿里云达到一个重要里程碑&#xff0c;云计算付费用户数量首次超过100万&#xff0c;成为亚洲首家达到百万级用户规模的云计算公司。同时&#xff0c;企业级市场被云计算人工智能等新技术全面激活&#xff0c;推动该季度营…

Stable Diffusion:最先进的文本生成图像模型

稳定扩散 生成式 AI 技术正在迅速发展&#xff0c;现在可以简单地根据文本输入生成文本和图像。Stable Diffusion 是一种文本到图像模型&#xff0c;使您能够创建逼真的应用程序。 扩散模型通过学习去除添加到真实图像中的噪声进行训练。这种降噪过程会产生逼真的图像。这些模…

【研究】Splunk 字段是否被加工过

1: 背景: 最近用户有个疑问,就是有些字段的输出有点问题,不确定是否被加工过。 2: 查找问题: index=abc sourcetype=def123 发现字段: city_shanghai 的输出可能有点问题。 3: 排查问题: 先去这个splunk search head cluster 的页面: server 的查找如下: 登入so1 s…

【Linux系统概念】

Linux系统概念 1 用户1.1 su和sudo1.1.1 /etc/sudoers 1.21.3 2345 1 用户 1.1 su和sudo 为什么会有su和sudo命令&#xff1f; 在实际工作当中需要在Linux不同用户之间进行切换。 root用户权限最高很多时候需要root用户才能执行一些关键命令。所以需要临时切换为root用户。工…

【C++】智能指针(一)

这篇文章介绍下C的智能指针&#xff0c;当然&#xff0c;可能没有你想的那么智能。 为什么需要智能指针1 void remodel(string& str) {string* ps new string(str);str *ps;return; }这里不讨论这个函数有没有意义&#xff0c;在这段代码中&#xff0c;很明显&#xff…

数据分析实战 | SVM算法——病例自动诊断分析

目录 一、数据分析及对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型应用及评价 一、数据分析及对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/download/m0_70452407/88…

Linux操作系统下对c语言程序的编译和执行过程gcc,编译链接过程

目录 1.gcc,g,gdb安装 2.gcc分布编译链接 3.编译链接过程 4.执行 4.1 如何执行 4.2 两步执行与一步执行 4.3 多文件的编译执行 1.gcc,g,gdb安装 命令行写gcc,g,gdb根据提示安装:sudo apt install gcc/g/gdb 2.gcc分布编译链接 (1)预编译: gcc -E main.c -o main.i (2)…

关于el-table+el-input+el-propover的封装

一、先放图片便于理解 需求&#xff1a; 1、el-input触发focus事件&#xff0c;弹出el-table(当然也可以为其添加搜索功能、分页) 2、el-table中的复选共能转化成单选共能 3、选择或取消的数据在el-input中动态显示 4、勾选数据后&#xff0c;因为分页过多&#xff0c;原先选好…

VEINS_CARLA代码详解

VEINS_CARLA代码详解 examples/veins_carlaprotosrc/veins_carla/appveins_carla/src/veins_carla/mobilityveins_carla/src/veins_carla/nodesveins_carla/src/veins_carla/proto 基于GPT-3.5 examples/veins_carla 从examples/veins_carla开始&#xff1a; CarlaExampleS…

P5906 【模板】回滚莫队不删除莫队

这一题&#xff0c;虽说在洛谷标的是模板题&#xff0c;但可能没有“历史研究”那一题更加模板。 这一题相对于回滚莫队的模板题&#xff0c;可能在回滚的处理上稍微复杂了一点。对于回滚莫队就不多解释了&#xff0c;可以看一下 回滚莫队模板题 这一篇博客&#xff0c;稍微简单…

PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 服装销售管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php服装销售管理系统1 二、功能介绍 (1)员工管理&#xff1a;对员工信息…

第十八章 Swing 程序设计

目录 概述 Swing常用窗体 JFrame 窗体 JDialog 对话框 JOptionPane 小型对话框 1.自定义对话框 2.确认框 3.输入框 4.通知框 常用布局管理器 null绝对布局 FlowLayout 流布局管理器 BorderLayout 边界布局管理器 GridLayout 网络布局管理器 常用面板 JPa…

一文图解爬虫(spider)

—引导语 互联网&#xff08;Internet&#xff09;进化到今天&#xff0c;已然成为爬虫&#xff08;Spider&#xff09;编制的天下。从个体升级为组合、从组合联结为网络。因为有爬虫&#xff0c;我们可以更迅速地触达新鲜“网事”。 那么爬虫究竟如何工作的呢&#xff1f;允许…

lv11 嵌入式开发 ARM指令集上 5

1 导学 1.1 指令集 指令 能够指示处理器执行某种运算的命令称为指令&#xff08;如加、减、乘 ...&#xff09; 指令在内存中以机器码&#xff08;二进制&#xff09;的方式存在 每一条指令都对应一条汇编 程序是指令的有序集合 指令集 处理器能识别的指令…

翻转二叉树(C++解法)

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&…

Harbor了解及部署

Harbor 无论是使用Docker-distribution去自建仓库&#xff0c;还是通过官方镜像跑容器的方式去自建仓库&#xff0c;通过前面的演示我们可以发现其是非常的简陋的&#xff0c;还不如直接使用官方的Docker Hub去管理镜像来得方便&#xff0c;至少官方的Docker Hub能够通过web界…

openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库

文章目录 openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库120.1 密态等值查询概述120.2 使用gsql操作密态数据库 openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库 120.1 密态等值查询…

drawio连接线使用技巧和功能大全

drawio连接线使用技巧和功能大全 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了…

深入理解对象存储(OSD)

对象存储 1、对象存储的起源2、什么是对象存储3、对象存储与块存储、文件存储4、对象存储架构4.1、对象&#xff08;Object&#xff09;4.2、对象存储设备&#xff08;OSD&#xff09;4.3、元数据服务器&#xff08;MDS&#xff09;4.4、对象存储系统的客户端&#xff08;Clien…