k8s常用指令
查看资源对象简写
kubectl api-resources
查看集群信息
kubectl cluster-info
节点标签查看 创建 删除
#查看标签
kubectl get nodes --show-labels #查看所有主机
kubectl describe nodes node2 #查看某一节点标签
#只查看主机和标签
kubectl get nodes -o=custom-columns=NAME:.metadata.name,LABEL:.metadata.labels
# -o参数用于指定输出格式,custom-columuns指定了自定义的列名和列值,其中NAME:.metadata.name表示输出,metadata.name字段作为NAME列,LABEL:.metadata.labels标签名
表示输出节点的标签名标签值作为LABEL列。
#创建标签
kubectl label nodes 【节点名】 【标签键】=【标签值】
kubectl label nodes node2 mem=big
#删除标签
kubectl label nodes 【节点名】 【标签键】- #输入标签键名即可,-代表删除
kubectl label nodes node1 mem-
#修改标签
kubectl label nodes node1 mem=ceshi --overwrite #需要加上--overwrite参数
节点污点
#1.查看节点上的污点 kubectl describe node <node_name> | grep Taint #2.添加自定义污点,key-value可以和污点容忍度结合使用 kubectl taint nodes <node_name> <key>=<value>:<effect> kubectl taint node k8s-node2 gpu=yes:NoSchedule --<effect>可取值NoSchedule:一定不能被调度(已有pod不受影响);PreferNoSchedule:尽量不要被调度,非必须;NoExecute:不仅不会调度,还会驱逐节点上已有的Pod。
#3.预定义污点为系统自定义,系统自动检测状态触发此污点。预定义污点只有在触发后才显示。下面命令可对其进行操作
kubectl taint nodes <node-name> node.kubernetes.io/not-ready=:NoSchedule #节点处于 "NotReady" 状态,触发此污点,效果为NoSchedule
kubectl taint nodes <node-name> node.kubernetes.io/unreachable=:NoSchedule #节点无法在网络上访问,触发此污点
kubectl taint nodes <node-name> node.kubernetes.io/unschedulable=:NoSchedule #节点被标记为不可调度
kubectl taint nodes <node-name> node.kubernetes.io/oom=:NoSchedule #节点上的容器经历了 OutOfMemory(OOM)事件
kubectl taint nodes <node-name> node.kubernetes.io/memory-pressure=:NoSchedule #节点处于内存压力状态,即节点内存资源紧张
kubectl taint nodes <node-name> node.kubernetes.io/disk-pressure=:NoSchedule #此污点表示节点处于磁盘压力状态,即节点磁盘资源紧张
#4.删除污点
kubectl taint nodes <node_name> <key>-
kubectl taint node k8s-node2 gpu-
#添加或删除节点上的污点可能会影响 Pod 的调度行为。根据污点的效果,Pod 可能会被调度到带有匹配的容忍度(Tolerations)或不带污点的节点上
主机调度
#将主机设置不可调度 kubectl cordon <node-name> #将主机恢复调度 kubectl uncordon <node-name>
查看pod环境变量
kubectl exec <pod-name> -n namespace env #查询所有变量
快速生成yaml文件
##使用kubectl create 命令生成depolyment的yaml文件
kubectl create deployment web -n cloud2 --image=nginx --dry-run -o yaml > web.yaml
--image=nginx:这个为对应镜像是nginx,
-o yaml :会把这个操作用yaml的格式生成出来,
--dty-run :尝试运行,并不正在运行(空跑)
# 基于已创建的deployment生成service的yaml配置
kubectl expose deployment web -n cloud2 --port=80 --target-port=80 --dry-run=client -o yaml > nginx-service.yaml
kubectl expose deployment web -n cloud2 --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > nginx-service.yaml #nodeport类型,只能自己随机端口
--port为service port
--target-port为容器port
#生成nodeport类型文件后,增加nodePort: 30000参数可指定端口
导出yaml文件
##适用于部署好的项目,可以把部署好的项目中的yaml文件导出出来 [root@k8s-master ~]# kubectl get deployment nginx -n <namespace> -o yaml > web2.yaml 查看depolyment里的pod,选择pod:nginx -o yaml 指定输出为yaml格式 输出到web2.yaml文件中
查看节点最大pod数和可分配资源
##pod数默认为110个,可在kubelet/config.yaml中修改maxPods值
kubectl describe node <节点名>| grep -i "Capacity\|Allocatable" -A 6
滚动重启deplayment
##beta-nginx命名空间下的(deploy-a、deploy-b、deploy-c)进行滚动更新 kubectl rollout restart deployment -n beta-nginx deploy-a deploy-b deploy-c
#若不指定deployment,则重启整个命名空间的
kubectl rollout restart deployment -n beta-net
deplayment升级pod
kubectl set image deployment test-ab-ui -n cloud2 test-ab-ui=harbor:5000/wecloud/ab-ui:2.2.2 #test-ab-ui(容器名)=harbor:5000/wecloud/ab-ui:2.2.2
deplayment调整副本数
kubectl scale deployment web -n cloud --replicas=3
deplayment自定义部署变更原因
kubectl apply -f deployment.yaml --record --change-cause="更新后端服务版本" #--record标志,自定义部署更改原因
kubectl annotate deployment test-ab-ui -n cloud2 kubernetes.io/change-cause="测试记录" #只能定义上一次变更的原因,无法与升级绑定
查看deplayment升级历史
kubectl rollout history deployment test-ab-ui -n cloud2 #查看历史记录
kubectl rollout history deployment test-ab-ui -n cloud2 --revision=6 #序号为6的变更具体信息
deplayment版本回滚
kubectl rollout undo deployment test-ab-ui -n cloud2 #默认回滚到上一版本
kubectl rollout undo deployment test-ab-ui -n cloud2 --to-revision=2 #回滚到指定版本
deplayment查看升级状态
[root@master1 spdb-yaml]# kubectl rollout status deployment test-ab-ui -n cloud2 deployment "test-ab-ui" successfully rolled out
edit在线修改
#不建议使用
kubectl edit cm configmap -n cloud2 #在线修改configmap,pod引用也即使刷新
kubectl edit deployment tmc -n cloud2
kubectl edit pod tmc-5787845bc4-kw7dr -n cloud2
kubectl edit svc tmc -n cloud2
#kubectl edit不应该用于修改资源对象的重要字段(如名称、命名空间等)。它更适合用于修改资源对象的配置细节或进行临时调试
base64编码加密
#Secrets 只支持 base64 编码
echo -n "123456" | base64
echo -n "MTIzNDU2" | base64 --decode #解密
kubectl config详解
kubectl config 是 Kubernetes 命令行工具中的一个子命令,用于管理和操作 Kubernetes 配置文件。 Kubernetes 配置文件默认在 ~/.kube/config,基本是kubectl,Dashboard,API客户端使用,它包含了连接到 Kubernetes 集群所需的信息,如集群的地址、认证凭据、上下文等。
也可以在/etc/profile增加变量export KUBECONFIG=/root/.kube/config更改文件路径,source变量即时生效。
kubectl config用于任一配置文件创建修改,不限于~/.kube/config。 以下是 kubectl config 命令中一些常用的子命令和功能: kubectl config view:查看当前配置文件的内容。可以显示当前使用的上下文、集群、用户等信息。 kubectl config get-contexts:获取所有的上下文列表,显示当前可用的上下文及其所关联的集群和用户。 kubectl config use-context <context-name>:设置当前使用的上下文。通过指定上下文名称,可以切换到不同的 Kubernetes 集群。 kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace>:创建或修改上下文。可以设置不同的集群、用户和命名空间来定位到特定的环境。 kubectl config delete-context <context-name>:删除指定的上下文。 kubectl config set-cluster <cluster-name> --server=<server-url> --certificate-authority=<ca-file>:设置集群连接信息,包括集群名称、服务器地址和证书等。 kubectl config set-credentials <user-name> --username=<username> --password=<password>:设置用户认证凭据,包括用户名和密码。 kubectl config set-credentials <user-name> --client-certificate=<cert-file> --client-key=<key-file>:设置用户认证凭据,使用客户端证书和密钥。
范例
KUBE_CONFIG="/root/.kube/config" KUBE_APISERVER="https://192.168.242.51:6443" #设置集群连接信息,名称为kubernetes,包括集群名称,服务器地址和证书 kubectl config set-cluster kubernetes \ --certificate-authority=/opt/kubernetes/ssl/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=${KUBE_CONFIG} #指定使用${KUBE_CONFIG}文件进行修改查看等
#设置用户认证凭据,名称为cluster-admin,使用客户端证书和密钥 kubectl config set-credentials cluster-admin \ --client-certificate=./admin.pem \ --client-key=./admin-key.pem \ --embed-certs=true \ --kubeconfig=${KUBE_CONFIG}
#创建或者修改上下文名称为default, 此上下文使用名为kubernetes的集群连接信息,使用名为cluster-admin的用户 kubectl config set-context default \ --cluster=kubernetes \ --user=cluster-admin \ --kubeconfig=${KUBE_CONFIG}
#设置${KUBE_CONFIG}文件使用名为default的上下文 kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
备注:同一配置文件中可创建多个集群连接信息,用户,上下文。但是只有一个当前使用的上下文,使用kubectl config use-context进行切换。
auth验证权限
#验证用户权限
kubectl auth can-i <verb> <resource> -n <namespace> --as=<username> <verb> 验证的操作,例如 get、list、create、delete 等。 <resource> 验证的资源类型,例如 pods、services、deployments 等。 <username> 验证权限的用户名
#验证用户组权限
kubectl auth can-i <verb> <resource> -n <namespace> --as-group=<groupname>
#验证serviceaccount权限
kubectl auth can-i get pods --as=system:serviceaccount:<namespace>:<serviceaccount-name> --namespace=<desired-namespace>
<namespace> 是 ServiceAccount 所在的命名空间,用于指定 ServiceAccount 的命名空间。
<serviceaccount-name> 是要测试权限的 ServiceAccount 的名称
<desired-namespace> 是要检查权限的目标命名空间。
kubectl top
kubectl top node <nodename> #查看节点使用情况 kubectl top pod --namespace=NAMESPACE #查看pod资源使用情况 kubectl top pod POD_NAME --containers #特定 Pod 中每个容器的资源使用情况 kubectl top pod -l name=myLabel #按标签筛选查看 Pod 的资源使用情况
kubectl top pod --sort-by=<resource> #按资源使用情况排序查看 Pod。将<resource>
替换为要排序的资源,例如cpu
或memory
kubetail
Kubetail 项目其实是一个简单 Shell
脚本,它可以将多个 Pod
中的日志信息聚合到一起进行展示,并支持彩色输出和条件过滤。
wget https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail chmod +x kubetail kubetail app2 #app2为pod标签名,查看app2的所有pod日志 kubetail app1,app2 #查看app1,app2的日志 kubetail app2 -c container1 -c container2 #指定app2中的容器 # 使用正则表达式 $ kubetail "^app1|.*my-demo.*" --regex
#通过使用-k
参数,可以指定kubetail
如何使用颜色# pod: 只有Pod名称着色且其他输出均使用终端默认颜色
# line: 整行是彩色的(默认)
# false: 所有输出都不着色
$ kubetail app2 -k pod
$ kubetail app2 -k line
$ kubetail app2 -k false
查看证书有效期
[root@localhost ~]# openssl x509 -noout -text -in /opt/etcd1/ssl/server.pem | grep 'Not' Not Before: Oct 2 14:30:00 2023 GMT #生效日期 Not After : Sep 29 14:30:00 2033 GMT #失效日期
[root@localhost ~]# openssl x509 -in /opt/etcd1/ssl/server.pem -noout -dates
notBefore=Oct 2 14:30:00 2023 GMT
notAfter=Sep 29 14:30:00 2033 GMT
cfssl certinfo -cert /opt/etcd1/ssl/server.pem |grep not
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)