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> 替换为要排序的资源,例如 cpumemory

 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 

复制代码

 

 

 

 

 
 
posted @   阿锋888  阅读(103)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示