【云原生】k8s集群命令行工具kubectl基础操作命令实践详解

kubectl基础操作命令详解

  • 一、准备工作
    • 1.1、Replication Controller
    • 1.2、Deployment
    • 1.3、DaemonSet
    • 1.4、查看创建的svc和pod
    • 1.5、kubectl 命令自动补全设置
  • 二、kubectl语法
  • 三、基础操作命令
    • 3.1、api-resources
    • 3.2、api-versions
    • 3.3、create
    • 3.4、expose
    • 3.5、run
    • 3.6、set
      • 3.6.1、env
      • 3.6.2、image
      • 3.6.3、resources
      • 3.6.4、selector
    • 3.7、explain(重点)
    • 3.8、get
    • 3.9、edit
    • 3.10、delete
    • 3.11、label
    • 3.12、annotate
  • 总结

一、准备工作

Kubernetes提供的集群控制平面(master节点)与Kubernetes APIServer通信的命令行工具——kubectl。kubectl默认配置文件目录$HOME/.kube/config。可以通过 --kubeconfig 参数来指定kubectl的配置文件。

以下操作如果已经做过了,就可以跳过。

1.1、Replication Controller

(1)创建myhello-rc.yaml并写入如下内容:

vim myhello-rc.yaml

内容:

apiVersion: v1
kind: ReplicationController # 副本控制器 RC
metadata:
  namespace: default
  name: myhello-rc # RC名称,全局唯一
  labels:
    name: myhello-rc
spec:
  replicas: 5 # Pod副本期待数量
  selector:
    name: myhello-rc-pod
  template: # pod的定义模板
    metadata:
      labels:
        name: myhello-rc-pod
    spec:
      containers: # Pod 内容的定义部分
      - name: myhello #容器的名称
        image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        env: # 注入到容器的环境变量
        - name: env1
          value: "k8s-env1"
        - name: env2
          value: "k8s-env2"

通常不会去单独的配置pod,都是通过某一类副本控制器资源去部署pod。原因:如果单独配置pod,当集群升级时需要将当前节点上的所有pod排空,那么会产生问题,因为pod没有任何副本控制器在控制它,集群对他没有预期,当节点排空后,pod将不会被调度和重生。

(2)为RC创建service。

vim myhello-svc.yaml

内容:

apiVersion: v1
kind: Service
metadata:
  name: myhello-svc
  labels:
    name: myhello-svc
spec:
  type: NodePort # 对外提供端口
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
    nodePort: 30000
  selector:
    name: myhello-rc-pod

(3)应用配置。

kubectl apply -f myhello-svc.yaml -f myhello-rc.yaml

1.2、Deployment

(1)创建myapp-deployment.yaml并写入如下内容:

vim myapp-deployment.yaml

内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    name: myapp-deploy
spec:
  replicas: 5
  selector:
    matchLabels:
      name: myapp-deploy-pod
  template:
    metadata:
      labels:
        name: myapp-deploy-pod
    spec:
     #nodeSelector:
       #nodetype: worker
      containers: # Pod 内容的定义部分
      - name: myhello #容器的名称
        image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        env: # 注入到容器的环境变量
        - name: env1
          value: "k8s-env1"
        - name: env2
          value: "k8s-env2"
        resources:
          requests:
            cpu: 100m
      - name: myredis #容器的名称
        image: redis #容器对应的 Docker Image
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
        env: # 注入到容器的环境变量
        - name: env1
          value: "k8s-env1"
        - name: env2
          value: "k8s-env2"
        resources:
          requests:
            cpu: 100m

(2)为deployment创建service。

vim myapp-svc.yaml

内容:

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  labels:
    name: myapp-svc
spec:
  type: NodePort # 对外提供端口
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
    nodePort: 30001
  selector:
    name: myapp-deploy-pod

(3)应用配置。

kubectl apply -f myapp-svc.yaml -f myapp-deployment.yaml

1.3、DaemonSet

(1)创建myapp-deployment.yaml并写入如下内容:

vim myapp-ds.yaml

内容:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-ds
  namespace: default
  labels:
    app: myapp-ds
spec:
  selector:
    matchLabels:
      app: myapp-ds
  template:
    metadata:
      labels:
        app: myapp-ds
    spec:
      tolerations:
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      containers: # Pod 内容的定义部分
      - name: myhello #容器的名称
        image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        env: # 注入到容器的环境变量
        - name: env1
          value: "k8s-env1"
        - name: env2
          value: "k8s-env2"

(2)为DaemonSet创建service。

vim myapp-ds-svc.yaml

内容:

apiVersion: v1
kind: Service
metadata:
  name: myapp-ds-svc
  labels:
    name: myapp-ds-svc
spec:
  type: NodePort # 对外提供端口
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80
    name: http
    nodePort: 30002
  selector:
    app: myapp-ds

(3)应用配置:

kubectl apply -f myapp-ds-svc.yaml -f myapp-ds.yaml

1.4、查看创建的svc和pod

$ kubectl get svc
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP          45h
myapp-ds-svc   NodePort    10.96.41.180    <none>        8080:30002/TCP   4m3s
myapp-svc      NodePort    10.98.20.127    <none>        80:30001/TCP     6m32s
myhello-svc    NodePort    10.106.252.61   <none>        80:30000/TCP     14m

$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
myapp-deployment-5659dbddd8-l6m87   0/2     Pending   0          6m41s
myapp-deployment-5659dbddd8-lxxls   0/2     Pending   0          6m41s
myapp-deployment-5659dbddd8-pqqlx   0/2     Pending   0          6m41s
myapp-deployment-5659dbddd8-xb8xp   0/2     Pending   0          6m41s
myapp-deployment-5659dbddd8-zjgsx   0/2     Pending   0          6m41s
myapp-ds-2zqf9                      1/1     Running   0          2m43s
myhello-rc-2tjmr                    0/1     Pending   0          12m
myhello-rc-44ksd                    0/1     Pending   0          12m
myhello-rc-86g79                    0/1     Pending   0          12m
myhello-rc-df225                    0/1     Pending   0          12m
myhello-rc-lfbzb                    0/1     Pending   0          12m

这里只建立了一个节点,所有只有一个pod。

1.5、kubectl 命令自动补全设置

# 安装自动补全插件
sudo apt-get install -y bash-completion
# 添加.bashrc文件内容
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 加载最新的.bashrc
source ~/.bashrc

二、kubectl语法

kubectl [command] [TYPE] [NAME] [flags]

(1)command:指定要对一个或多个资源执行的操作,例如:create、get、describe、delete等。
(2)TYPE:指定 资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如:以下命令输出相同的结果:

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

(3)NAME:指定资源名称。名称区分大小写。如果省略名称,这显示所有资源的详细信息。例如:

kubectl get pods

(4)在对多个资源执行操作时,可以按类型和名称指定每个资源,或指定一个或多个文件:

  • 按类型和名称指定资源:

a) 对所有类型相同的资源进行分组,TYPE1 name1 name2 name<#>。

kubectl get pod pod1 pod2 pod3

b) 分别指定多个资源类型:TYPE1/name1 TYPE2/name2 TYPE3/name3 TYPE<#>/name<#>。

kubectl get pod/pod1 pod/pod2 rc/rc1 svc/svc1
  • 用一个或多个文件指定资源:-f file1 -f file2 -f file<#>
kubectl get -f myhello-rc.yaml -f myhello-svc.yaml

(5) flags:指定可选的参数。例如:可以使用 -o 或 --output 参数来指定 输出格式。

kubectl get -f myhello-rc.yaml -f myhello-svc.yaml -o wide
kubectl get -f myhello-rc.yaml -f myhello-svc.yaml --output json

三、基础操作命令

3.1、api-resources

打印服务器上所支持的 API 资源。
用法:

# 打印支持的API Resource
kubectl api-resources
# 打印更多信息
kubectl api-resources -o wide
# 根据name 排序
kubectl api-resources --sort-by=name
# 仅打印支持命名空间的资源
kubectl api-resources --namespaced=true
# 打印不支持命名空间的资源
kubectl api-resources --namespaced=false
# 根据分组打印该分组的资源,例如:apps、authorization.k8s.io 等
kubectl api-resources --api-group=apps

作用:

  1. 可以帮助写pod的定义,比如apiversion。
  2. 做角色权限分配。

示例:

$ kubectl api-resources 
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
pods                              po           v1                                     true         Pod
podtemplates                                   v1                                     true         PodTemplate
replicationcontrollers            rc           v1                                     true         ReplicationController
resourcequotas                    quota        v1                                     true         ResourceQuota
secrets                                        v1                                     true         Secret
serviceaccounts                   sa           v1                                     true         ServiceAccount
services                          svc          v1                                     true         Service
mutatingwebhookconfigurations                  admissionregistration.k8s.io/v1        false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io/v1        false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io/v1                false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io/v1              false        APIService
controllerrevisions                            apps/v1                                true         ControllerRevision
daemonsets                        ds           apps/v1                                true         DaemonSet
deployments                       deploy       apps/v1                                true         Deployment
replicasets                       rs           apps/v1                                true         ReplicaSet
statefulsets                      sts          apps/v1                                true         StatefulSet
tokenreviews                                   authentication.k8s.io/v1               false        TokenReview
localsubjectaccessreviews                      authorization.k8s.io/v1                true         LocalSubjectAccessReview
selfsubjectaccessreviews                       authorization.k8s.io/v1                false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io/v1                false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io/v1                false        SubjectAccessReview
horizontalpodautoscalers          hpa          autoscaling/v2                         true         HorizontalPodAutoscaler
cronjobs                          cj           batch/v1                               true         CronJob
jobs                                           batch/v1                               true         Job
certificatesigningrequests        csr          certificates.k8s.io/v1                 false        CertificateSigningRequest
leases                                         coordination.k8s.io/v1                 true         Lease
endpointslices                                 discovery.k8s.io/v1                    true         EndpointSlice
events                            ev           events.k8s.io/v1                       true         Event
flowschemas                                    flowcontrol.apiserver.k8s.io/v1beta2   false        FlowSchema
prioritylevelconfigurations                    flowcontrol.apiserver.k8s.io/v1beta2   false        PriorityLevelConfiguration
ingressclasses                                 networking.k8s.io/v1                   false        IngressClass
ingresses                         ing          networking.k8s.io/v1                   true         Ingress
networkpolicies                   netpol       networking.k8s.io/v1                   true         NetworkPolicy
runtimeclasses                                 node.k8s.io/v1                         false        RuntimeClass
poddisruptionbudgets              pdb          policy/v1                              true         PodDisruptionBudget
clusterrolebindings                            rbac.authorization.k8s.io/v1           false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRole
rolebindings                                   rbac.authorization.k8s.io/v1           true         RoleBinding
roles                                          rbac.authorization.k8s.io/v1           true         Role
priorityclasses                   pc           scheduling.k8s.io/v1                   false        PriorityClass
csidrivers                                     storage.k8s.io/v1                      false        CSIDriver
csinodes                                       storage.k8s.io/v1                      false        CSINode
csistoragecapacities                           storage.k8s.io/v1                      true         CSIStorageCapacity
storageclasses                    sc           storage.k8s.io/v1                      false        StorageClass
volumeattachments                              storage.k8s.io/v1                      false        VolumeAttachment
fly@k8s-master1:~/k8sCtlConfig$ 

3.2、api-versions

打印支持的API Versions。

kubectl api-versions 

示例:

$ kubectl api-versions 
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta2
batch/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

3.3、create

通过文件或标准输入来创建资源。crete 和 apply -f 的功能是一样的,但是create只能创建一次,而apply可以多次应用,apply可以将新的属性应用到线上而不会改变原有已经存在的内容。
用法:

kubectl create -f FILENAME

示例:

# 基于文件创建资源
kubectl create -f myhello-rc.yaml -f myhello-svc.yaml -f myapp-deployment.yaml -f
myapp-svc.yaml -f myapp-ds.yaml
# 将文件内容以标准输入,传入kubectl create
cat myhello-rc.yaml | kubectl create -f -
# 编辑文件,以编辑结果为输入参数
kubectl create -f myhello-rc.yaml --edit -o json

3.4、expose

给定副本控制器、服务、Deployment 或 Pod,将其暴露为新的 kubernetes Service,其本质是通过现有资源对象的配置信息将新的Service与原有资源背后的Pod做关联

用法:

kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

示例:

# 为副本控制器myhello-rc 创建service,端口为8000,容器端口为80
kubectl expose rc myhello-rc --port=8000 --target-port=80 --name=myhello-svc-8000
# 通过replication controller 定义文件来创建service
kubectl expose -f myhello-rc.yaml --port=8000 --target-port=80 --name=myhellosvc-8000-file
# 根据指定的pod 创建service,并指定service名称
kubectl expose pod <podname> --port=444 --name=myhello-svc-444
# 通过service 创建新的service
kubectl expose service myhello-svc --port=8080 --target-port=80 --name=myhello-svc-8080
# 查看所有service
kubectl get svc
# 查看某个service详情
kubectl describe svc <svcname>

3.5、run

在集群中使用指定镜像启动容器。

用法:

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

示例:

# 通过镜像运行一个名为 nginx 的pod
kubectl run nginx --image=nginx
# 通过镜像运行一个名为myhello 的pod
kubectl run myhello --image=nongtengfei/hello:1.0.0
# 指定端口号、环境变量、labels
kubectl run redis --image=redis --port=6379 --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default" --labels="app=redis,env=prod"
# 只打印命令执行的结果,而不做实际操作
kubectl run nginx --image=nginx --dry-run=client
# 运行一个busybox容器,并进入交互,同时设置其重启策略为Never
kubectl run -i -t busybox --image=busybox --restart=Never
# 启动nginx pod 采用自定义启动命令和启动参数
# kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
kubectl run nginx2 --image=nginx --command -- echo 123456
# 查看默认命名空间下所有pod
kubectl get pod
# 获取单个pod并以yaml格式输出
kubectl get pod <podname> -o yaml
# 输出某个pod内所有容器的日志
kubectl logs pod/<podname> --all-containers=true
# 输出 pod/myhello-rc-dtshm 内 myhello容器的日志
kubectl logs pod/myhello-rc-dtshm -c myhello

3.6、set

为对象设置功能特性(环境变量、镜像等)。

用法:

kubectl set SUBCOMMAND

以下是SUBCOMMAND。

3.6.1、env

更新资源环境变量,支持pod(po)、replicationcontroller(rc)、部署(deploy)、守护程序集(ds)、状态集(sts)、cronjob(cj)、ReplicateSet(rs)等资源对象的更新

用法:

kubectl set env RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N

示例:

# 为rc/myhello-rc 添加环境变量 STORAGE_DIR=/local
kubectl set env rc/myhello-rc STORAGE_DIR=/local
# 查看 rc/myhello-rc 环境变量列表
kubectl set env rc/myhello-rc --list
# 列出所有pod的环境变量列表
kubectl set env pods --all --list
# 设置环境变量,并以yaml格式打印出来
kubectl set env rc/myhello-rc STORAGE_DIR=/data1 -o yaml
# 为所有rc设置环境变量为 EVN=prod
kubectl set env rc --all ENV=prod
# 将所有rc上环境变量 ENV移除
kubectl set env rc --all ENV-
# 移除 deployments/myapp-deployment 对象中,容器名为 myhello 的环境变量 env1
kubectl set env deployments/myapp-deployment --containers="myhello" env1-
# 根据文件,移除资源上的环境变量
kubectl set env -f myhello-rc.yaml env1-

注意:rc上修改环境变量,并不会及时反映到Pod;而deployment修改环境变量则会及时反映到Pod。

3.6.2、image

更新现有资源容器镜像,支持pod(po)、replicationcontroller(rc)、部署(deploy)、守护程序集(ds)、状态集(sts)、cronjob(cj)、ReplicatSet(rs)等资源

用法:

kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

示例:

# 将deployment/myapp-deployment 中myhello 容器的镜像更改为 nongtengfei/hello:1.0.1
kubectl set image deployment/myapp-deployment myhello=nongtengfei/hello:1.0.1
# 根据文件修改镜像,--local表示不向apiserver发送请求,仅本地修改并输出yaml格式内容
kubectl set image -f myapp-deployment.yaml myhello=nongtengfei/hello:1.0.1 --local -o yaml
# 修改 deployment/myapp-deployment myhello 容器和myredis容器的镜像
kubectl set image deployment/myapp-deployment myhello=nongtengfei/hello:1.0.1 myredis=redis:alpine
# 修改ds/myapp-ds myhello 容器镜像
kubectl set image ds/myapp-ds myhello=nongtengfei/hello:1.0.2

注意:修改RC的image不会及时反映到Pod;而修改deployment的image则会及时反映到Pod。

3.6.3、resources

为Pod模板资源对象指定计算资源需求(CPU,内存等)支持pod(po)、replicationcontroller(rc)、部署(deploy)、守护程序集(ds)、状态集(sts)、cronjob(cj)、ReplicatSet(rs)等资源。

用法:

kubectl set resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

示例:

# 设置单个容器的资源
kubectl set resources deployment myapp-deployment -c=myhello --limits=cpu=200m,memory=512Mi
# 设置myapp-deployment部署下所有容器资源
kubectl set resources deployment myapp-deployment --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
# 移除资源限制,设置为0即不限制
kubectl set resources deployment myapp-deployment --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
# 根据文件设置资源,打印出结果,且不向apiserver发送请求
kubectl set resources -f myapp-deployment.yaml --limits=cpu=200m,memory=512Mi --local -o yaml

3.6.4、selector

在资源上设置选择器。如果资源在调用“set selector”之前有一个选择器,则新选择器将覆盖旧选择器。
如果指定了–resource version,则更新将使用此资源版本,否则将使用现有资源版本。目前只支持
Service资源对象

用法:

kubectl set selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resourceversion=version]

示例:

# 将service myhello-svc 的label selector 修改为 env=proc
kubectl set selector svc myapp-svc env=proc
kubectl set selector svc myapp-svc name=myapp-deploy-pod
# 查看service 对象明细
kubectl describe svc myapp-svc

3.7、explain(重点)

显示资源文档说明。
用法:

kubectl explain RESOURCE

作用:可以帮助定义资源。

示例:

# 获取资源及其字段的文档
kubectl explain pods
# 获取资源特定字段的文档
kubectl explain pods.spec.containers

3.8、get

显示一个或者多个资源信息。
用法:

kubectl get [(-o|--output=)json|yaml|name|go-template|go-templatefile|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|customcolumns|custom-columns-file|wide] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]

示例:

# 获取默认命名空间下所有Pod
kubectl get pods
# 获取更多Pod信息
kubectl get pods -o wide
# 获取副本控制器 myhello-rc
kubectl get replicationcontroller myhello-rc
# 获取处于apps.v1 api组下所有 deployment,并以json格式答应
kubectl get deployments.v1.apps -o json
# 获取单个Pod,以json格式数据
kubectl get -o json pod myhello-rc-278jg
# 根据文件获取对象
kubectl get -f myapp-deployment.yaml -o json
# 返回对象指定的值
kubectl get -o template deployment/myapp-deployment --template={{.status.readyReplicas}}
# 自定义返回字段,分别指定了列名为:CONTAINER 和 IMAGE
kubectl get pod -o customcolumns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
# 获取 所有rc 和 service
kubectl get rc,services
# 获取一个或多个资源
kubectl get rc/myhello-rc service/myhello-svc deployment/myapp-deployment

3.9、edit

修改服务器上的某资源。
用法:

kubectl edit (RESOURCE/NAME | -f FILENAME)

示例:

# 修改myhello-svc service
kubectl edit svc/myhello-svc
# 以打开为json文件的方式修改
kubectl edit svc/myhello-svc -o json
# 修改资源配置,并将修改后的内容添加到注解
kubectl edit deployment/myapp-deployment -o yaml --save-config

3.10、delete

通过文件名、标准输入、资源和名字删除资源,或者通过资源和标签选择器来删除资源。
示例:

# 通过定义文件删除资源
kubectl delete -f myhello-rc.yaml
# 指定所有后缀名为yaml的文件,删除这些文件定义的资源
kubectl delete -f '*.yaml'
# 以文件内容为参数,删除资源
cat myhello-rc.yaml | kubectl delete -f -
# 删除名称为 myhello-pod 或 myhello-svc 的pod 和 service
kubectl delete pod,service myhello-pod myhello-svc
# 删除标签为 myhello-pod的pod和service
kubectl delete pods,services -l name=myhello-rc-pod
# 最小延迟删除Pod
kubectl delete pod <podname> --now
# 强制删除 Pod
kubectl delete pod <podname> --force
# 删除所有Pod
kubectl delete pods --all

3.11、label

更新资源的标签。
用法:

kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

示例:

# 为pod/nginx添加标签
kubectl label pods nginx status=unhealthy
# 修改已存在的label
kubectl label --overwrite pods nginx status=healthy
# 为当前命名空间下所有pod添加标签
kubectl label pods --all status=unhealthy
# 根据资源定义文件添加标签
kubectl label -f myapp-deployment.yaml status=unhealthy
# 删除当前命名空间下所有Pod的status标签
kubectl label pods --all status-
# 删除指定label
kubectl label pods nginx status-
# 根据资源定义文件删除资源标签
kubectl label -f myapp-deployment.yaml status-
# 为节点添加标签
kubectl label node k8s-master1 nodetype=master
kubectl label node k8s-node1 nodetype=worker
kubectl label node k8s-node2 nodetype=worker
kubectl label nodes k8s-node2 nodetype-
# 为pod指定部署的节点
nodeSelector:
nodetype: worker

3.12、annotate

更新资源所关联的注解。
用法:

kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

示例:

# 为资源类型为 rc 的 myhello-rc 添加注解 description='my hello rc'
kubectl annotate rc myhello-rc description='my hello rc'
# 为文件myhello-rc.yaml所定义的资源 添加注解 description1='my hello rc1'
kubectl annotate -f myhello-rc.yaml description1='my hello rc1'
# 重写 myhello-rc 的description 注解
kubectl annotate --overwrite rc myhello-rc description='this a replication
controller'
# 为当前命名空间下所有pod 添加注解
kubectl annotate pods --all description='myhello running golang program'
# 更新指定resourceVersion 的单一资源对象
kubectl annotate rc myhello-rc description3='my hello rc3' --resourceversion=10564
# 删除注解
kubectl annotate pods --all description

总结

通常不会去单独的配置pod,都是通过某一类副本控制器资源去部署pod。原因:如果单独配置pod,当集群升级时需要将当前节点上的所有pod排空,那么会产生问题,因为pod没有任何副本控制器在控制它,集群对他没有预期,当节点排空后,pod将不会被调度和重生。
在这里插入图片描述

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

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

相关文章

filebrowser的权限实现RBAC效果

filebrowser安装和支持定制化&#xff0c;建议参考我这一篇文章filebrowser安装言归正传&#xff0c;目前发现客户需要有文件权限管理功能&#xff0c;我一开始也没仔细研究这块&#xff0c;我以为不支持呢&#xff0c;我今天就认真的了研究 下这个存储服务&#xff0c;其实是支…

前端网络安全

什么是同源策略同源指的是&#xff1a;协议、端口号、域名必须一致。他是浏览器的一个用于隔离潜在恶意文件的重要安全机制。限制了从同一个源加载的文档或脚本&#xff0c;与另一个源的资源进行交互。同源策略主要限制了三个方面&#xff1a;当前域下的js脚本不能够访问其他域…

jsoup 框架的使用指南

概述 参考&#xff1a; 官方文档jsoup的使用JSoup教程jsoup 在 GitHub 的开源代码 概念简介 jsoup 是一款基于 Java 的 HTML 解析器&#xff0c;它提供了一套非常省力的 API&#xff0c;不但能直接解析某个 URL 地址、HTML 文本内容&#xff0c;而且还能通过类似于 DOM、CS…

【Java进阶篇】——反射机制

一、反射的概念 1.1 反射出现的背景 Java程序中&#xff0c;所有对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致 Object obj new String("hello")、obj.getClass(); 如果某些变量或形参的声明类型…

1、Linux初级——linux命令

下载镜像&#xff1a;http://cn.ubuntu.com/dowload 一、基本命令 1、alias&#xff08;给命令取别名&#xff09; 例如&#xff1a;alias clls -la&#xff08;只是临时的&#xff09; 2、配置文件$ vim ~/.bashrc $ vim ~/.bashrc // 使用vim打开配置文件 (1)在配置文件…

初识STM32单片机

目录 一、单片机基本认知 二、STM系列单片机命名规则 三、标准库与HAL库区别 四、通用输入输出端口GPIO 五、推挽输出与开漏输出 六、复位和时钟控制&#xff08;RCC&#xff09; 七、时钟控制 八、中断和事件 九、定时器介绍 一、单片机基本认知 单片机和PC电脑相比…

搜索系统(二)

term weight 如何衡量一个词在一篇文档中的重要性 词频率&#xff08;tf&#xff09;&#xff1a;term在文档中出现了多少次&#xff0c;tf越大说明越重要 逆文档频率&#xff08;idf&#xff09;&#xff1a;有多少文档包含了这个term&#xff0c;idf越大表明越不重要 综合…

Unity --- 游戏案例 --- 英雄无敌与Ruby

1.如何在场景中标识出一个空游戏物体&#xff08;对象集群&#xff09; 1.选中该空游戏物体&#xff0c;然后在Inspector面板处的物体名旁边添加想要的颜色的图标即可&#xff0c;最终效果如下图 2.这个图标只在场景中能开到&#xff0c;在游戏画面中是看不到的&#xff0c;其存…

Vulnhub项目:Web Machine(N7)

靶机地址&#xff1a;Web Machine(N7)渗透过程&#xff1a;kali ip&#xff1a;192.168.56.104&#xff0c;靶机ip&#xff0c;使用arp-scan进行查看靶机地址&#xff1a;192.168.56.128收集靶机开放端口&#xff1a;nmap -sS -sV -T5 -A 192.168.56.128开放了80端口&#xff0…

索尼mxf变成rsv的修复方法

索尼的影视级摄像机一般是用MXF文件结构&#xff0c;在一些极端情况下(如断电)会生成RSV文件&#xff0c;遇到这种情况我们应该如何处理&#xff1f;下面来看看今天这个案例。故障文件:12.51G RSV文件故障现象:断电后仅生成了一个扩展名为rsv的文件&#xff0c;使用播放器可以播…

python+django+vue全家桶鲜花商城售卖系统

重点&#xff1a; &#xff08;1&#xff09; 网上花店网站中各模块功能之间的的串联。 &#xff08;2&#xff09; 网上花店网站前台与后台的连接与同步。 &#xff08;3&#xff09; 鲜花信息管理模块中鲜花的发布、更新与删除。 &#xff08;4&#xff09; 订单…

java多线程之线程的六种状态

线程的六种状态(1) NEW(初始状态)(2) TERMINATED(终止状态 / 死亡状态)(3) RUNNABLE(运行时状态)(4) TIMED_WAITING(超时等待状态)(5) WAITING(等待状态)(6) BLOCK(阻塞状态)sleep和wait的区别:操作系统里的线程自身是有一个状态的,但是java Thread 是对系统线程的封装,把这里的…

基于C++的AI五子棋游戏项目开发教程

项目资源下载 基于C的AI五子棋游戏项目源码压缩包下载地址基于C的AI五子棋游戏项目源码Github下载地址基于C的AI五子棋游戏项目所需素材基于C的AI五子棋游戏项目所需要的EasyX 项目简介 本项目基于C开发&#xff0c;整体来说比较简单&#xff0c;实现了人与AI之间的五子棋对弈…

Java实习生------Redis常见面试题汇总(AOF持久化、RDB快照、分布式锁、缓存一致性)⭐⭐⭐

“年轻人&#xff0c;就要勇敢追梦”&#x1f339; 参考资料&#xff1a;图解redis 目录 谈谈你对AOF持久化的理解&#xff1f; redis的三种写回策略是什么&#xff1f; 谈谈你对AOF重写机制的理解&#xff1f;AOF重写机制的具体过程&#xff1f; 谈谈你对RDB快照的理解&a…

面试官:说一下MySQL中的锁机制吧

5. 1MySQL有哪些锁&#xff1f; 为保证数据的一致性&#xff0c;需要对并发操作进行控制&#xff0c;因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。 锁冲突 也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要&#xff0c;也更加…

seata服务搭建

它支持两种存储模式&#xff0c;一个是文件&#xff0c;一个是数据库&#xff0c;下面我们分别介绍一下这两种配置nacos存储配置&#xff0c;注意如果registry.conf中注册和配置使用的是file&#xff0c;就会去读取file.config的配置&#xff0c;如果是nacos则通过nacos动态读取…

Kafka和RabbitMQ有哪些区别,各自适合什么场景?

目录标题1. 消息的顺序2. 消息的匹配3. 消息的超时4. 消息的保持5. 消息的错误处理6. 消息的吞吐量总结1. 消息的顺序 有这样一个需求&#xff1a;当订单状态变化的时候&#xff0c;把订单状态变化的消息发送给所有关心订单变化的系统。 订单会有创建成功、待付款、已支付、已…

Cookie和Session详解

目录 前言&#xff1a; Session详解 Cookie和Session区别和关联 服务器组织会话的方式 使用Tomcat实现登录成功跳转到欢迎页面 登录前端页面 登录成功后端服务器 重定向到欢迎页面 抓包分析交互过程 小结&#xff1a; 前言&#xff1a; Cookie之前博客有介绍过&#x…

音视频技术开发周刊 | 285

每周一期&#xff0c;纵览音视频技术领域的干货。新闻投稿&#xff1a;contributelivevideostack.com。GPT-4 Office全家桶发布谷歌前脚刚宣布AI工具整合进Workspace&#xff0c;微软后脚就急匆匆召开了发布会&#xff0c;人狠话不多地祭出了办公软件王炸——Microsoft 365 Cop…

使用GPT-4生成QT代码

一、概述最近ChatGPT火爆起来了&#xff0c;ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;可以用于生成自然语言文本&#xff0c;例如对话、文章等。最近又发现了一个优秀且免费的代码生成工具Cursor.so &#xff0c;Cursor.so集成了 GPT-4 &#xff0c;可以帮助你快速编…