kubernetes中的资源管理

目录

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值