0


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

kubectl基础操作命令详解

一、准备工作

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

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

1.1、Replication Controller

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

  1. vim myhello-rc.yaml

内容:

  1. apiVersion: v1
  2. kind: ReplicationController # 副本控制器 RC
  3. metadata:
  4. namespace: default
  5. name: myhello-rc # RC名称,全局唯一
  6. labels:
  7. name: myhello-rc
  8. spec:
  9. replicas: 5# Pod副本期待数量
  10. selector:
  11. name: myhello-rc-pod
  12. template: # pod的定义模板
  13. metadata:
  14. labels:
  15. name: myhello-rc-pod
  16. spec:
  17. containers: # Pod 内容的定义部分
  18. - name: myhello #容器的名称
  19. image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
  20. imagePullPolicy: IfNotPresent
  21. ports:
  22. - containerPort: 80
  23. env: # 注入到容器的环境变量
  24. - name: env1
  25. value: "k8s-env1"
  26. - name: env2
  27. value: "k8s-env2"

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

(2)为RC创建service。

  1. vim myhello-svc.yaml

内容:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: myhello-svc
  5. labels:
  6. name: myhello-svc
  7. spec:
  8. type: NodePort # 对外提供端口
  9. ports:
  10. - port: 80
  11. protocol: TCP
  12. targetPort: 80
  13. name: http
  14. nodePort: 30000
  15. selector:
  16. name: myhello-rc-pod

(3)应用配置。

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

1.2、Deployment

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

  1. vim myapp-deployment.yaml

内容:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: myapp-deployment
  5. labels:
  6. name: myapp-deploy
  7. spec:
  8. replicas: 5
  9. selector:
  10. matchLabels:
  11. name: myapp-deploy-pod
  12. template:
  13. metadata:
  14. labels:
  15. name: myapp-deploy-pod
  16. spec:
  17. #nodeSelector:#nodetype: worker
  18. containers: # Pod 内容的定义部分
  19. - name: myhello #容器的名称
  20. image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
  21. imagePullPolicy: IfNotPresent
  22. ports:
  23. - containerPort: 80
  24. env: # 注入到容器的环境变量
  25. - name: env1
  26. value: "k8s-env1"
  27. - name: env2
  28. value: "k8s-env2"
  29. resources:
  30. requests:
  31. cpu: 100m
  32. - name: myredis #容器的名称
  33. image: redis #容器对应的 Docker Image
  34. imagePullPolicy: IfNotPresent
  35. ports:
  36. - containerPort: 6379
  37. env: # 注入到容器的环境变量
  38. - name: env1
  39. value: "k8s-env1"
  40. - name: env2
  41. value: "k8s-env2"
  42. resources:
  43. requests:
  44. cpu: 100m

(2)为deployment创建service。

  1. vim myapp-svc.yaml

内容:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: myapp-svc
  5. labels:
  6. name: myapp-svc
  7. spec:
  8. type: NodePort # 对外提供端口
  9. ports:
  10. - port: 80
  11. protocol: TCP
  12. targetPort: 80
  13. name: http
  14. nodePort: 30001
  15. selector:
  16. name: myapp-deploy-pod

(3)应用配置。

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

1.3、DaemonSet

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

  1. vim myapp-ds.yaml

内容:

  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: myapp-ds
  5. namespace: default
  6. labels:
  7. app: myapp-ds
  8. spec:
  9. selector:
  10. matchLabels:
  11. app: myapp-ds
  12. template:
  13. metadata:
  14. labels:
  15. app: myapp-ds
  16. spec:
  17. tolerations:
  18. - key: node-role.kubernetes.io/control-plane
  19. operator: Exists
  20. effect: NoSchedule
  21. containers: # Pod 内容的定义部分
  22. - name: myhello #容器的名称
  23. image: nongtengfei/hello:1.0.0 #容器对应的 Docker Image
  24. imagePullPolicy: IfNotPresent
  25. ports:
  26. - containerPort: 80
  27. env: # 注入到容器的环境变量
  28. - name: env1
  29. value: "k8s-env1"
  30. - name: env2
  31. value: "k8s-env2"

(2)为DaemonSet创建service。

  1. vim myapp-ds-svc.yaml

内容:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: myapp-ds-svc
  5. labels:
  6. name: myapp-ds-svc
  7. spec:
  8. type: NodePort # 对外提供端口
  9. ports:
  10. - port: 8080
  11. protocol: TCP
  12. targetPort: 80
  13. name: http
  14. nodePort: 30002
  15. selector:
  16. app: myapp-ds

(3)应用配置:

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

1.4、查看创建的svc和pod

  1. $ kubectl get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none>443/TCP 45h
  4. myapp-ds-svc NodePort 10.96.41.180 <none>8080:30002/TCP 4m3s
  5. myapp-svc NodePort 10.98.20.127 <none>80:30001/TCP 6m32s
  6. myhello-svc NodePort 10.106.252.61 <none>80:30000/TCP 14m
  1. $ kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. myapp-deployment-5659dbddd8-l6m87 0/2 Pending 0 6m41s
  4. myapp-deployment-5659dbddd8-lxxls 0/2 Pending 0 6m41s
  5. myapp-deployment-5659dbddd8-pqqlx 0/2 Pending 0 6m41s
  6. myapp-deployment-5659dbddd8-xb8xp 0/2 Pending 0 6m41s
  7. myapp-deployment-5659dbddd8-zjgsx 0/2 Pending 0 6m41s
  8. myapp-ds-2zqf9 1/1 Running 0 2m43s
  9. myhello-rc-2tjmr 0/1 Pending 0 12m
  10. myhello-rc-44ksd 0/1 Pending 0 12m
  11. myhello-rc-86g79 0/1 Pending 0 12m
  12. myhello-rc-df225 0/1 Pending 0 12m
  13. myhello-rc-lfbzb 0/1 Pending 0 12m

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

1.5、kubectl 命令自动补全设置

  1. # 安装自动补全插件sudoapt-getinstall -y bash-completion
  2. # 添加.bashrc文件内容echo"source <(kubectl completion bash)">> ~/.bashrc
  3. # 加载最新的.bashrcsource ~/.bashrc

二、kubectl语法

  1. kubectl [command][TYPE][NAME][flags]

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

  1. kubectl get pod pod1
  2. kubectl get pods pod1
  3. kubectl get po pod1

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

  1. kubectl get pods

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

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

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

  1. kubectl get pod pod1 pod2 pod3

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

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

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

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

三、基础操作命令

3.1、api-resources

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

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

作用:

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

示例:

  1. $ kubectl api-resources
  2. NAME SHORTNAMES APIVERSION NAMESPACED KIND
  3. bindings v1 true Binding
  4. componentstatuses cs v1 false ComponentStatus
  5. configmaps cm v1 true ConfigMap
  6. endpoints ep v1 true Endpoints
  7. events ev v1 true Event
  8. limitranges limits v1 true LimitRange
  9. namespaces ns v1 false Namespace
  10. nodes no v1 false Node
  11. persistentvolumeclaims pvc v1 true PersistentVolumeClaim
  12. persistentvolumes pv v1 false PersistentVolume
  13. pods po v1 true Pod
  14. podtemplates v1 true PodTemplate
  15. replicationcontrollers rc v1 true ReplicationController
  16. resourcequotas quota v1 true ResourceQuota
  17. secrets v1 true Secret
  18. serviceaccounts sa v1 true ServiceAccount
  19. services svc v1 true Service
  20. mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
  21. validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
  22. customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
  23. apiservices apiregistration.k8s.io/v1 false APIService
  24. controllerrevisions apps/v1 true ControllerRevision
  25. daemonsets ds apps/v1 true DaemonSet
  26. deployments deploy apps/v1 true Deployment
  27. replicasets rs apps/v1 true ReplicaSet
  28. statefulsets sts apps/v1 true StatefulSet
  29. tokenreviews authentication.k8s.io/v1 false TokenReview
  30. localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
  31. selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
  32. selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
  33. subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
  34. horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler
  35. cronjobs cj batch/v1 true CronJob
  36. jobs batch/v1 true Job
  37. certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
  38. leases coordination.k8s.io/v1 true Lease
  39. endpointslices discovery.k8s.io/v1 true EndpointSlice
  40. events ev events.k8s.io/v1 true Event
  41. flowschemas flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchema
  42. prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfiguration
  43. ingressclasses networking.k8s.io/v1 false IngressClass
  44. ingresses ing networking.k8s.io/v1 true Ingress
  45. networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
  46. runtimeclasses node.k8s.io/v1 false RuntimeClass
  47. poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
  48. clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
  49. clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
  50. rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
  51. roles rbac.authorization.k8s.io/v1 true Role
  52. priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
  53. csidrivers storage.k8s.io/v1 false CSIDriver
  54. csinodes storage.k8s.io/v1 false CSINode
  55. csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity
  56. storageclasses sc storage.k8s.io/v1 false StorageClass
  57. volumeattachments storage.k8s.io/v1 false VolumeAttachment
  58. fly@k8s-master1:~/k8sCtlConfig$

3.2、api-versions

打印支持的API Versions。

  1. kubectl api-versions

示例:

  1. $ kubectl api-versions
  2. admissionregistration.k8s.io/v1
  3. apiextensions.k8s.io/v1
  4. apiregistration.k8s.io/v1
  5. apps/v1
  6. authentication.k8s.io/v1
  7. authorization.k8s.io/v1
  8. autoscaling/v1
  9. autoscaling/v2
  10. autoscaling/v2beta2
  11. batch/v1
  12. certificates.k8s.io/v1
  13. coordination.k8s.io/v1
  14. discovery.k8s.io/v1
  15. events.k8s.io/v1
  16. flowcontrol.apiserver.k8s.io/v1beta1
  17. flowcontrol.apiserver.k8s.io/v1beta2
  18. networking.k8s.io/v1
  19. node.k8s.io/v1
  20. policy/v1
  21. rbac.authorization.k8s.io/v1
  22. scheduling.k8s.io/v1
  23. storage.k8s.io/v1
  24. storage.k8s.io/v1beta1
  25. v1

3.3、create

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

  1. kubectl create -f FILENAME

示例:

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

3.4、expose

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

用法:

  1. 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]

示例:

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

3.5、run

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

用法:

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

示例:

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

3.6、set

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

用法:

  1. kubectl set SUBCOMMAND

以下是SUBCOMMAND。

3.6.1、env

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

用法:

  1. kubectl setenv RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N

示例:

  1. # 为rc/myhello-rc 添加环境变量 STORAGE_DIR=/local
  2. kubectl setenv rc/myhello-rc STORAGE_DIR=/local
  3. # 查看 rc/myhello-rc 环境变量列表
  4. kubectl setenv rc/myhello-rc --list
  5. # 列出所有pod的环境变量列表
  6. kubectl setenv pods --all --list
  7. # 设置环境变量,并以yaml格式打印出来
  8. kubectl setenv rc/myhello-rc STORAGE_DIR=/data1 -o yaml
  9. # 为所有rc设置环境变量为 EVN=prod
  10. kubectl setenv rc --all ENV=prod
  11. # 将所有rc上环境变量 ENV移除
  12. kubectl setenv rc --all ENV-
  13. # 移除 deployments/myapp-deployment 对象中,容器名为 myhello 的环境变量 env1
  14. kubectl setenv deployments/myapp-deployment --containers="myhello" env1-
  15. # 根据文件,移除资源上的环境变量
  16. kubectl setenv -f myhello-rc.yaml env1-

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

3.6.2、image

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

用法:

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

示例:

  1. # 将deployment/myapp-deployment 中myhello 容器的镜像更改为 nongtengfei/hello:1.0.1
  2. kubectl set image deployment/myapp-deployment myhello=nongtengfei/hello:1.0.1
  3. # 根据文件修改镜像,--local表示不向apiserver发送请求,仅本地修改并输出yaml格式内容
  4. kubectl set image -f myapp-deployment.yaml myhello=nongtengfei/hello:1.0.1 --local -o yaml
  5. # 修改 deployment/myapp-deployment myhello 容器和myredis容器的镜像
  6. kubectl set image deployment/myapp-deployment myhello=nongtengfei/hello:1.0.1 myredis=redis:alpine
  7. # 修改ds/myapp-ds myhello 容器镜像
  8. 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)等资源。

用法:

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

示例:

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

3.6.4、selector

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

用法:

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

示例:

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

3.7、explain(重点)

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

  1. kubectl explain RESOURCE

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

示例:

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

3.8、get

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

  1. 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]

示例:

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

3.9、edit

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

  1. kubectl edit (RESOURCE/NAME | -f FILENAME)

示例:

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

3.10、delete

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

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

3.11、label

更新资源的标签。
用法:

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

示例:

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

3.12、annotate

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

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

示例:

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

总结

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


本文转载自: https://blog.csdn.net/Long_xu/article/details/129682647
版权归原作者 Lion Long 所有, 如有侵权,请联系我们删除。

“【云原生】k8s集群命令行工具kubectl基础操作命令实践详解”的评论:

还没有评论