kubernetes中的资源管理

news2024/11/15 17:29:03

目录

1 资源管理介绍

2 资源管理的方式

2.1 kubectl命令介绍及格式

2.2 资源类型

2.3 kubectl 常见操作指令

2.3.1 CREATE 示例:

2.3.1.1 指定资源类型创建

2.3.1.2 查看创建的资源类型

2.3.1.3 查看pods是否正确被创建并且被调度 

2.3.1.4 查看名为shuyan  的 Deployment 的详细信息

2.3.1.5 查看信息以yaml格式输出

2.3.1.6 以不同格式查看信息

2.3.2 查看帮助指令explain

2.3.2.1 如何查询

2.3.3 修改配置文件指令

2.3.3.1 使用edit修改

2.3.3.2 使用打补丁的方式修改

2.3.4 删除资源delete

2.3.5 查看 资源日志指令logs

2.3.6 进入容器指令exec

2.3.7 文件复制指令cp

3 使用高级命令实例yaml

3.1 使用 命令生成 Pod 的 YAML 配置

3.2 生成deployment 资源类型的yaml格式 示例

4 k8s中的标签


1 资源管理介绍

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。

学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作

  • 命令式对象管理:直接使用命令去操作kubernetes资源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80

  • 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源

    kubectl create/patch -f nginx-pod.yaml

  • 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源

    kubectl apply -f nginx-pod.yaml

类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试

2 资源管理的方式

2.1 kubectl命令介绍及格式

kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

 kubectl [command] [type] [name] [flags]

comand指定要对资源执行的操作,例如create、get、delete

type:指定资源类型,比如deployment、pod、service

name:指定资源的名称,名称大小写敏感

flags:指定额外的可选参数

# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

2.2 资源类型

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

经常使用的资源有下面这些:

资源分类资源名称缩写资源作用
集群级别资源nodesno集群组成部分
namespacesns隔离Pod
pod资源podspo装载容器
pod资源控制器replicationcontrollersrc控制pod资源
replicasetsrs控制pod资源
deploymentsdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontalpodautoscalershpa控制pod资源
statefulsetssts控制pod资源
服务发现资源servicessvc统一pod对外接口
ingressing统一pod对外接口
存储资源volumeattachments存储
persistentvolumespv存储
persistentvolumeclaimspvc存储
配置资源configmapscm配置
secrets配置

2.3 kubectl 常见操作指令

kubernetes允许对资源进行多种操作,可以通过--help查看详细的操作命令

[root@k8s-master ~]# kubectl create --help

经常使用的操作有下面这些:

命令分类命令翻译命令作用
基本命令create创建创建一个资源
edit编辑编辑一个资源
get获取获取一个资源
patch更新更新一个资源
delete删除删除一个资源
explain解释展示资源文档
运行和调试run运行在集群中运行一个指定的镜像
expose暴露暴露资源为Service
describe描述显示资源内部信息
logs日志输出容器在 pod 中的日志
attach缠绕进入运行中的容器
exec执行执行容器中的一个命令
cp复制在Pod内外复制文件
rollout首次展示管理资源的发布
scale规模扩(缩)容Pod的数量
autoscale自动调整自动调整Pod的数量
高级命令applyrc通过文件对资源进行配置
label标签更新资源上的标签
其他命令cluster-info集群信息显示集群信息
version版本显示当前Server和Client的版本

语法

 kubectl [command] [type] [name] [flags]

2.3.1 CREATE 示例:

2.3.1.1 指定资源类型创建
master yaml]# kubectl create deployment shuyan --image myapp:v1 --replicas 2
2.3.1.2 查看创建的资源类型
[root@k8s-master yaml]# kubectl get deployments shuyan 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
shuyan   2/2     2            2           8m6s
[root@k8s-master yaml]# kubectl get deployments shuyan -o wide
NAME     READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES     SELECTOR
shuyan   2/2     2            2           8m12s   myapp        myapp:v1   app=shuyan
2.3.1.3 查看pods是否正确被创建并且被调度 
[root@k8s-master yaml]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan-6b475bf845-d2c29   1/1     Running   0          11m   10.244.1.18   k8s-node1   <none>           <none>
shuyan-6b475bf845-lcwgx   1/1     Running   0          11m   10.244.2.16   k8s-node2   <none>           <none>
2.3.1.4 查看名为shuyan  的 Deployment 的详细信息
[root@k8s-master yaml]# kubectl describe deployments.apps shuyan 
Name:                   shuyan
Namespace:              default
CreationTimestamp:      Tue, 03 Sep 2024 20:34:53 +0800
Labels:                 app=shuyan
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=shuyan
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=shuyan
  Containers:
   myapp:
    Image:         myapp:v1
    Port:          <none>
    Host Port:     <none>
    Environment:   <none>
    Mounts:        <none>
  Volumes:         <none>
  Node-Selectors:  <none>
  Tolerations:     <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   shuyan-6b475bf845 (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set shuyan-6b475bf845 to 2
2.3.1.5 查看信息以yaml格式输出
[root@k8s-master yaml]# kubectl get deployments.apps shuyan -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2024-09-03T12:34:53Z"
  generation: 1
  labels:
    app: shuyan
  name: shuyan
  namespace: default
  resourceVersion: "98480"
  uid: e52303a9-6234-4653-ac61-86c5c73e215a
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: shuyan
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: shuyan
    spec:
      containers:
      - image: myapp:v1
        imagePullPolicy: IfNotPresent
        name: myapp
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 2
  conditions:
  - lastTransitionTime: "2024-09-03T12:34:54Z"
    lastUpdateTime: "2024-09-03T12:34:54Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2024-09-03T12:34:53Z"
    lastUpdateTime: "2024-09-03T12:34:54Z"
    message: ReplicaSet "shuyan-6b475bf845" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 2
  replicas: 2
  updatedReplicas: 2
2.3.1.6 以不同格式查看信息
[root@k8s-master yaml]# kubectl get deployments.apps shuyan -o json
[root@k8s-master yaml]# kubectl get deployments.apps shuyan -o yaml

2.3.2 查看帮助指令explain

2.3.2.1 如何查询

kubectl explain 查看资源记录类型

格式 kubectl explain deployment.spec.xxx.xxx

只要是类型不是string类型都可以往下查询

2.3.3 修改配置文件指令

2.3.3.1 使用edit修改

编辑器中修改现有的 Deployment 配置

使用 kubectl edit deployment shuyan 命令可以直接在编辑器中修改现有的 Deployment 配置。这个命令会打开默认的文本编辑器

[root@k8s-master yaml]# kubectl edit deployment shuyan 

 

# 查看是否开启了
[root@k8s-master yaml]# kubectl get deployments.apps shuyan 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
shuyan   4/4     4            4           82m

# 查看调度到哪里去了
[root@k8s-master yaml]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan-6b475bf845-d2c29   1/1     Running   0          83m   10.244.1.18   k8s-node1   <none>           <none>
shuyan-6b475bf845-lcwgx   1/1     Running   0          83m   10.244.2.16   k8s-node2   <none>           <none>
shuyan-6b475bf845-lxg7d   1/1     Running   0          77s   10.244.1.19   k8s-node1   <none>           <none>
shuyan-6b475bf845-rtwxv   1/1     Running   0          77s   10.244.2.17   k8s-node2   <none>           <none>
2.3.3.2 使用打补丁的方式修改

JSONPatch 是一种简单的补丁格式,适用于较小的更改。例如,如果想减少或者增加 Deployment 的副本数量,可以使用以下命令:

[root@k8s-master yaml]# kubectl patch deployments.apps shuyan \
-p '{"spec":{"replicas":2}}'

[root@k8s-master yaml]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan-6b475bf845-d2c29   1/1     Running   0          87m   10.244.1.18   k8s-node1   <none>           <none>
shuyan-6b475bf845-lcwgx   1/1     Running   0          87m   10.244.2.16   k8s-node2   <none>           <none>

[root@k8s-master yaml]# kubectl get deployment shuyan -o wide 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES     SELECTOR
shuyan   2/2     2            2           87m   myapp        myapp:v1   app=shuyan

2.3.4 删除资源delete

[root@k8s-master yaml]# kubectl delete deployments shuyan
deployment.apps "shuyan" deleted
[root@k8s-master yaml]# kubectl get deployments.apps 
No resources found in default namespace.
[root@k8s-master yaml]# kubectl get pods 
No resources found in default namespace.

运行和调试命令示例

在 Kubernetes (k8s) 中,Service 是一种 API 对象(资源),它定义了一种抽象,用来暴露一组 Pods 提供的应用程序的网络服务。Service 并不是 DNS 中的资源记录类型,而是 Kubernetes 自身的一个核心概念,用于网络服务发现和负载均衡

# 使用run去启动的话默认资源类型为pod
[root@k8s-master yaml]# kubectl run nginxpod --image nginx
pod/nginxpod created

# 查看pod 是否被正确创建
[root@k8s-master yaml]# kubectl get pods nginxpod 
NAME       READY   STATUS    RESTARTS   AGE
nginxpod   1/1     Running   0          13s

# 同样也可以被编辑
[root@k8s-master yaml]# kubectl edit pods nginxpod 
Edit cancelled, no changes made.

[root@k8s-master yaml]# kubectl get services 
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   20h

# 使用export指令命令来创建一个 Service,以暴露 Pod 资源类型的的端口
[root@k8s-master yaml]# kubectl expose pod nginxpod \
--port 80 \
--target-port 80 

# 查看所有service资源类型
[root@k8s-master yaml]# kubectl get service 
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   20h
nginxpod     ClusterIP   10.103.61.192   <none>        80/TCP    2m8s

# 精准查找
[root@k8s-master yaml]# kubectl get service nginxpod 
NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nginxpod   ClusterIP   10.103.61.192   <none>        80/TCP    17s

# 查看详细信息
[root@k8s-master yaml]# kubectl describe pods nginxpod 

2.3.5 查看 资源日志指令logs

查看pod日志信息

[root@k8s-master yaml]# kubectl logs pods/nginxpod 
/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
2024/09/03 14:14:29 [notice] 1#1: using the "epoll" event method
2024/09/03 14:14:29 [notice] 1#1: nginx/1.27.1
2024/09/03 14:14:29 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2024/09/03 14:14:29 [notice] 1#1: OS: Linux 5.14.0-427.13.1.el9_4.x86_64
2024/09/03 14:14:29 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1073741816:1073741816
2024/09/03 14:14:29 [notice] 1#1: start worker processes
2024/09/03 14:14:29 [notice] 1#1: start worker process 29
2024/09/03 14:14:29 [notice] 1#1: start worker process 30
10.244.0.0 - - [03/Sep/2024:14:21:03 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.76.1" "-"

访问测试

2.3.6 进入容器指令exec

[root@k8s-master yaml]# kubectl exec services/nginxpod -it /bin/bash
root@nginxpod:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@nginxpod:/# echo this is servise nginx > /usr/share/nginx/html/index.html


[root@k8s-master yaml]# kubectl get service -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE   SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   39h   <none>
nginxpod     ClusterIP   10.103.61.192   <none>        80/TCP    18h   run=nginxpod

[root@k8s-master yaml]# kubectl get pods -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginxpod   1/1     Running   0          19h   10.244.1.20   k8s-node1   <none>           <none>

[root@k8s-master yaml]# curl 10.244.1.20
this is servise nginx

[root@k8s-master yaml]# curl 10.103.61.192
this is servise nginx


为什么可以访问两个 IP 地址
Pod 的 IP 地址:
当直接访问 Pod 的 IP 地址时,实际上是在直接访问 Pod 本身。
由于 Pod 在集群内部有一个固定的 IP 地址,因此可以通过这个 IP 地址直接访问 Pod 上运行的服务。

Service 的 ClusterIP:
当访问 Service 的 ClusterIP 时,Service 
会将请求代理到它所选择的后端 Pod。在这种情况下,
请求最终也会到达 Pod,并且 Pod 会响应请求。

通过访问宿主机IP也可以访问 pod 的NGINX

[root@k8s-master yaml]# kubectl edit service
  selector:
    run: nginxpod
  sessionAffinity: None
  type: NodePort

[root@k8s-master yaml]# curl 192.168.239.110
curl: (7) Failed to connect to 192.168.239.110 port 80: 拒绝连接
[root@k8s-master yaml]# kubectl get service -o wide 
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        39h   <none>
nginxpod     NodePort    10.103.61.192   <none>        80:32093/TCP   19h   run=nginxpod
[root@k8s-master yaml]# curl 192.168.239.110:32093
this is servise nginx

2.3.7 文件复制指令cp

# 宿主机拷贝到pod
[root@k8s-master yaml]# touch /root/shuyanfile
[root@k8s-master yaml]# kubectl cp /root/shuyanfile nginxpod:/

[root@k8s-master yaml]# kubectl exec -it pods/nginxpod /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.

root@nginxpod:/# ls 
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   shuyanfile  sys  usr
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  srv         tmp  var

# pod 拷贝到 宿主机

[root@k8s-master yaml]# kubectl cp nginxpod:/shuyanfile /root/yaml/shuyanfile

[root@k8s-master yaml]# kubectl cp nginxpod:/shuyanfile shuyanfile
[root@k8s-master yaml]# ls 
shuyanfile  shuyan.yml

删除pod和服务

[root@k8s-master yaml]# kubectl get pods 
NAME       READY   STATUS    RESTARTS   AGE
nginxpod   1/1     Running   0          20h

[root@k8s-master yaml]# kubectl delete pods nginxpod 
pod "nginxpod" deleted

[root@k8s-master yaml]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        40h
nginxpod     NodePort    10.103.61.192   <none>        80:32093/TCP   19h

[root@k8s-master yaml]# kubectl delete service nginxpod 
service "nginxpod" deleted

3 使用高级命令实例yaml

3.1 使用 命令生成 Pod 的 YAML 配置

# 生成pod类型的YAML格式
 yaml]# kubectl run shuyan --image myapp:v1 --dry-run=client -o yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


# 生成deployment资源类型的YAML格式
 yaml]# kubectl create deployment shuyan --image myapp:v1 --dry-run=client -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: shuyan
  name: shuyan
spec:
  replicas: 1
  selector:
    matchLabels:
      app: shuyan
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: shuyan
    spec:
      containers:
      - image: myapp:v1
        name: myapp
        resources: {}
status: {}

3.2 生成deployment 资源类型的yaml格式 示例

将生成的yaml格式重定向导入到yml文件中去

[root@k8s-master yaml]# kubectl create deployment shuyan \
--image myapp:v1 --dry-run=client -o yaml > shuyan.yml


# 运行yaml文件中的规则
[root@k8s-master yaml]# kubectl apply -f shuyan.yml 
deployment.apps/shuyan created


[root@k8s-master yaml]# kubectl get pods -o wide 
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan-6b475bf845-jsghm   1/1     Running   0          9s    10.244.1.22   k8s-node1   <none>           <none>
shuyan-6b475bf845-qw8hc   1/1     Running   0          9s    10.244.2.19   k8s-node2   <none>           <none>


[root@k8s-master yaml]# kubectl get deployment -o wide 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES     SELECTOR
shuyan   2/2     2            2           25s   myapp        myapp:v1   app=shuyan

# 测试均可访问没有问题
[root@k8s-master yaml]# curl 10.244.1.22
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master yaml]# curl 10.244.2.19
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

4 k8s中的标签

如上的实验基础上查看这两个pod的标签分别是什么

使用--show-labels

[root@k8s-master yaml]# kubectl -n default get pods --show-labels 
NAME                      READY   STATUS    RESTARTS   AGE    LABELS
shuyan-6b475bf845-jsghm   1/1     Running   0          109s   app=shuyan,pod-template-hash=6b475bf845
shuyan-6b475bf845-qw8hc   1/1     Running   0          109s   app=shuyan,pod-template-hash=6b475bf845

[root@k8s-master yaml]# vim shuyan.yml 

尝试修改查看状态

# 查看原生的ID与标签是什么
[root@k8s-master yaml]# kubectl -n default get pods --show-labels 
NAME                      READY   STATUS    RESTARTS   AGE   LABELS
shuyan-6b475bf845-jsghm   1/1     Running   0          11m   app=shuyan,pod-template-hash=6b475bf845
shuyan-6b475bf845-qw8hc   1/1     Running   0          11m   app=shuyan,pod-template-hash=6b475bf845

# 修改指定的标签为 wawa
[root@k8s-master yaml]# kubectl label pods shuyan-6b475bf845-jsghm app=wawa --overwrite
pod/shuyan-6b475bf845-jsghm labeled

# 系统发现指定ID的标签并不是shuyan会再起一个
[root@k8s-master yaml]# kubectl -n default get pods --show-labels 
NAME                      READY   STATUS    RESTARTS   AGE   LABELS
shuyan-6b475bf845-jsghm   1/1     Running   0          12m   app=wawa,pod-template-hash=6b475bf845
shuyan-6b475bf845-qw8hc   1/1     Running   0          12m   app=shuyan,pod-template-hash=6b475bf845
shuyan-6b475bf845-srw48   1/1     Running   0          12s   app=shuyan,pod-template-hash=6b475bf845

# 再次修改回来成 shuyan
[root@k8s-master yaml]# kubectl label pods shuyan-6b475bf845-jsghm app=shuyan --overwrite
pod/shuyan-6b475bf845-jsghm labeled

# 发现会自动删除 保持平衡
[root@k8s-master yaml]# kubectl -n default get pods --show-labels 
NAME                      READY   STATUS    RESTARTS   AGE   LABELS
shuyan-6b475bf845-jsghm   1/1     Running   0          12m   app=shuyan,pod-template-hash=6b475bf845
shuyan-6b475bf845-qw8hc   1/1     Running   0          12m   app=shuyan,pod-template-hash=6b475bf845

做完实验删除

[root@k8s-master yaml]# kubectl -n default get deployment -o wide
NAME     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES     SELECTOR
shuyan   2/2     2            2           70m   myapp        myapp:v1   app=shuyan

[root@k8s-master yaml]# kubectl -n default delete deployments.apps shuyan 
deployment.apps "shuyan" deleted

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

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

相关文章

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…

我写了个ffmpeg-spring-boot-starter 使得Java能剪辑视频!!

最近工作中在使用FFmpeg&#xff0c;加上之前写过较多的SpringBoot的Starter&#xff0c;所以干脆再写一个FFmpeg的Starter出来给大家使用。 首先我们来了解一下FFmpeg能干什么&#xff0c;FFmpeg 是一个强大的命令行工具和库集合&#xff0c;用于处理多媒体数据。它可以用来做…

【redis】redis编译和redis.conf配置

下载源码 reids 解压编译 # 解压 tar -zxvf redis-5.0.14.tar.gz cd redis-5.0.14/ make PREFIX/opt/redis install# requirepass root # 开启远程访问 bind 0.0.0.0 protected-mode no # 修改日志打印路径&#xff0c;修改redis.conf daemonize yes logfile /var/log/redis.…

[深度学习][LLM]:浮点数怎么表示,什么是混合精度训练?

混合精度训练 混合精度训练1. 浮点表示法&#xff1a;[IEEE](https://zh.wikipedia.org/wiki/电气电子工程师协会)二进制浮点数算术标准&#xff08;IEEE 754&#xff09;1.1 浮点数剖析1.2 举例说明例子 1:例子 2: 1.3 浮点数比较1.4 浮点数的舍入 2. 混合精度训练2.1 为什么需…

网络编程day01(IP地址、Socket、端口号)

目录 【1】IP地址 1》基本概念 IP地址 NAT设备&#xff08;网络地址转换&#xff09; DHCP服务器&#xff08;动态主机配置协议&#xff09; 2》网络号/主机号&#xff08;二级划分&#xff09; 3》IP地址分类 特殊地址 4》子网掩码 5》三级划分 【2】socket 1》socke…

浅谈人工智能之基于AutoGen Studio+litellm+ollama构建model

浅谈人工智能之基于AutoGen Studiolitellmollama构建model 摘要 随着自然语言处理技术的飞速发展&#xff0c;基于大型语言模型&#xff08;Large Language Models, LLMs&#xff09;的应用越来越广泛。本指南旨在介绍如何利用AutoGen Studio、litellm和ollama这三大工具&…

【数据结果-二维前缀和】力扣221. 最大正方形

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”…

8月刷题笔记

刷题笔记—8月 LCP40.心算挑战(贪心、排序) class Solution { public:int maxmiumScore(vector<int>& cards, int cnt) {//24.8.1ranges::sort(cards, greater()); //从大到小排序int s reduce(cards.begin(), cards.begin()cnt, 0);if(s%2 0) return s;auto rep…

Java毕业设计 基于SpringBoot vue社区养老服务管理系统

Java毕业设计 基于SpringBoot vue社区养老服务管理系统 SpringBoot 社区养老服务管理系统 功能介绍 护工: 登录 主页 老人管理 健康记录管理 管理员: 登录 主页 用户管理 床位类型管理 床位管理 护工管理 老人管理 预约记录管理 来访记录管理 健康记录管理 费用管理…

网络编程套接字(Socket)详解 V✪ω✪V

目录 &#x1f348;一.什么是网络编程 1.1什么是网络编程&#xff1f; 1.2网络通信中的基本概念&#xff1a; &#x1f347;二.Soket&#xff08;套接字&#xff09;→网络编程的基础 2.1概念&#xff1a; 2.2Socket套接字分类: 数据包套接字&#xff1a;使用传输层UDP协…

Leetcode JAVA刷刷站(111)二叉树的最小深度

一、题目概述 二、思路方向 在Java中&#xff0c;要找出二叉树的最小深度&#xff0c;我们可以使用递归的方法。基本思路是&#xff0c;对于给定的根节点&#xff0c;如果它是空的&#xff0c;那么最小深度为0&#xff08;但实际上&#xff0c;空树没有深度&#xff0c;但在…

ARM 工业计算机搭载 FUXA 组态软件:开启智能制造新时代

工业自动化已经成为提高生产效率、保证产品质量以及提升企业竞争力的关键因素。而在工业自动化的舞台上&#xff0c;FUXA 组态软件与 ARM 工业计算机的组合正发挥着越来越重要的作用&#xff0c;以其高效稳定、数据可视化、实时监控等优势&#xff0c;在复杂场景应用中展现出卓…

MySQL——基础操作(1)

一、数据库的创建 1.1 库的创建 在使用数据库时&#xff0c;最先操作的是创建一个数据库。使用语法如下&#xff1a; CREATE DATABASE [IF NOT EXISTS] database_name [[DEFAULT] CHARSETcharset_name] [[DEFAULT] COLLATEcollation_name]; 对上述语句进行简单说明&#xf…

最佳视频编辑软件,适合专业人士和初学者

如果你想利用视频编辑软件&#xff0c;即使你没有很多专业知识。一段精彩的视频可能有助于你公司的成功。然而&#xff0c;出色的视频镜头只能在编辑工具的帮助下创建。有许多免费程序可供选择&#xff0c;有许多不同的需求和理由需要编辑。在编辑方面&#xff0c;无论你是专业…

【接入指南】快手API

快手小店自2018年上线以来&#xff0c;业务发展迅速&#xff0c;2年时间GMV增长1000倍&#xff0c;活跃商家达到100万&#xff0c;已经成为主流的电商平台&#xff0c;为支撑广大商家的业务处理需求&#xff0c;快手API成为快手平台业务处理软件高效、便捷的开发工具&#xff0…

C++学习笔记----6、内存管理(一)---- 使用动态内存(4)

3.6、多维自由内存空间上的数组 如果需要在运行时决定多维数组的维度&#xff0c;可以使用在自由内存空间上的数组。与一维动态分配的数组通过指针访问一样&#xff0c;多维动态分配的数组也可以通过指针访问。不同的地方在于在二维数组中&#xff0c;需要用一个指向指针的指针…

『功能项目』项目优化【21】

我们打开上一篇20主角身旁召唤/隐藏坐骑的项目&#xff0c; 本章要做的事情如以下几点&#xff1a; 1.优化资源包Resources下的层级分类 2.优化脚本包Scripts下的脚本分类 3.地形Terrain的优化&#xff08;只让主角点击地面移动跳过其他石头山树等其他物体&#xff09; 首…

笔记整理—uboot番外(3)环境变量的作用

环境变量的最大一个作用就是&#xff0c;能够在不修改代码的情况下去影响应用的运行情况。 环境变量的优先级问题&#xff1a;有环境变量的情况下优先使用环境变量&#xff0c;没有环境变量则使用代码中的值&#xff08;全局变量一类的变量&#xff09;。 例如&#xff0c;mach…

随身WiFi实测,真相让你大跌眼镜!随身携带的随身wifi哪个比较好?什么品牌的随身wifi好用?

都说随身wifi坑多&#xff0c;谁买谁是冤大头&#xff01;我还真不信这个邪&#xff01;本次我们对格行、京东云、迅优三款热门随身WiFi进行了开箱测试&#xff0c;实测周期为2个月。今天从外观、网速、续航、售后、适合人群及整体评价等方面进行全面剖析。 一、京东云随身WiFi…

Qt 杨帆起航

这里写自定义目录标题 引入1、Qt安装1.1 OSX1.1.1 HomeBrew 方式安装1.1.2 自己编译 1.2 Windows x、IDEx.1 Clionx.1.1 ui 文件到Qt设计师x.1.2 ui文件更新&#xff0c;为及时调用uiCompile生成或更新cpp文件x.1.3 qt资源文件创建x.1.4 帮助文档的配置 引入 机缘巧合&#xf…