K8S常用操作

kubectl命令行的语法如下:

kubectl [command] [TYPE] [NAME] [flags]
  • command: 子命令,用于操作k8s集群资源对象,例如 create,delete,describe,get,apply,logs,edit,config等

删除pod service namespace deployment

kubectl delete -f xxx.yaml
kubectl delete pod POD_NAME -n SPACE_NAME
kubectl delete pod POD_NAME --grace-period=0 -n SPACE_NAME	# 1.4以前的版本 强制删除
kubectl delete pod POD_NAME --grace-period=0 --force -n SPACE_NAME	# 1.5以后的版本 强制删除

有时会遇到一些Pod已经不需要了,但找不到当时部署的 .yaml文件或创建方法,删除pod会自动创建时,通过以下思路来进行删除

kubectl get deployment -n SPACE_NAME		# 查看对应命名空间下有哪些deployment 
kubectl delete deployment DEPLOYMENT_NAME	# 删除跟pod对应的deployment,pod就会自动删除

给node设置label

kubectl label nodes NODES_NAME_1 slave=test-01
kubectl label nodes NODES_NAME_2 zone=wuhan

kubectl get nodes --show-labels

删除node label,在label的键后面加一个减号即可

查看pod 日志, kubectl logs NAMESPACES PODNAME

手动扩容

kubectl edit

官方教程操作笔记

安全清空节点

  • '--ignore-daemonsets'忽略deamonset控制器的pod,不然会删除了pod也会自动重建导致死循环。

  • '--delete-local-data'参数,即使pod使用了emptyDir也删除

  • '–force' 不加force参数只会删除该NODE上由ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除’裸奔的pod’(没有绑定到任何replication controller)


批量删除容器日志

不进Pod执行命令

不进Pod打印容器中的环境变量


pod 开启特权模式,在containers下面加上securityContext: privileged: true


pod 使用nfs挂载volumes时,运行pod的NODE上需要安装nfs,否则会无法挂载成功


services 会话保持,在service 的yaml文件中的spec下增加如下配置


查看所有pod,以启动时间排序


查看api信息及CA证书


nodeport 80 # 节点端口,可以通过节点IP访问服务 port 80 # 服务(service)端口,clusterIP:80 集群内可以通过clusterIP:port 访问服务 targetport 80 # 容器(pod)端口,nodePort 和 port 最终将服务转发到targetport,由Pod提供服务


Deployment滚动升级和回滚


一个pod中有多个容器时,如何操作指定容器


Init容器

Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。

使用 Init 容器的示例 下面的例子定义了一个具有 2 个 Init 容器的简单 Pod。 第一个等待 myservice 启动, 第二个等待 mydb 启动。 一旦这两个 Init 容器都启动完成,Pod 将启动 spec 节中的应用容器。


临时容器

临时容器与其他容器的不同之处在于,它们缺少对资源或执行的保证,并且永远不会自动重启, 因此不适用于构建应用程序。 临时容器使用与常规容器相同的 ContainerSpec 节来描述,但许多字段是不兼容和不允许的。

  • 临时容器没有端口配置,因此像 portslivenessProbereadinessProbe 这样的字段是不允许的。

  • Pod 资源分配是不可变的,因此 resources 配置是不允许的。

  • 有关允许字段的完整列表,请参见 EphemeralContainer 参考文档。

临时容器是使用 API 中的一种特殊的 ephemeralcontainers 处理器进行创建的, 而不是直接添加到 pod.spec 段,因此无法使用 kubectl edit 来添加一个临时容器。

与常规容器一样,将临时容器添加到 Pod 后,将不能更改或删除临时容器。

当由于容器崩溃或容器镜像不包含调试工具而导致 kubectl exec 无用时, 临时容器对于交互式故障排查很有用。

使用临时容器来调试的例子

你可以使用 kubectl debug 命令来给正在运行中的 Pod 增加一个临时容器。 首先,像示例一样创建一个 pod:

本节示例中使用 pause 容器镜像,因为它不包含调试程序,但是这个方法适用于所有容器镜像。

如果你尝试使用 kubectl exec 来创建一个 shell,你将会看到一个错误,因为这个容器镜像中没有 shell。

你可以改为使用 kubectl debug 添加调试容器。 如果你指定 -i 或者 --interactive 参数,kubectl 将自动挂接到临时容器的控制台。

此命令添加一个新的 busybox 容器并将其挂接到该容器。--target 参数指定另一个容器的进程命名空间。 这个指定进程命名空间的操作是必需的,因为 kubectl run 不能在它创建的 Pod 中启用共享进程命名空间。

说明: 容器运行时必须支持 --target 参数。 如果不支持,则临时容器可能不会启动,或者可能使用隔离的进程命名空间启动, 以便 ps 不显示其他容器内的进程。

最后更新于