kubernetes
kubernetes
常用对象管理命令
集群
kubectl cluster-info # 集群连接信息
kubectl cluster-info dump > dump.log # 集群详细信息
kubectl get events -A # 查看集群事件
kubectl delete events --all --all-namespaces # 删除全部事件
kubectl delete events --all -n <namespace>
# 查看 ns 中全部的资源对象
kubectl get all -n cwx
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n cwx节点
kubectl get node
kubectl get node h21 -o yaml # 详细信息下线节点
# 先标记 - 节点不可调度
kubectl cordon node02
# 驱逐 pod - 忽略不好驱逐的pod - 给 2 分钟时间; --force 强制驱逐
kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --timeout=120s
# remove node
kubectl delete nodes kk-node02
# 清理节点, 注意不要在集群的 master 节点执行, 否则会影响集群
kubeadm reset
# 恢复节点可用标签
kubectl uncordon node-161标签和污点
# label
kubectl label node <node-name> key=value # 增
kubectl label node <node-name> key- # 删
kubectl label node <node-name> key=value --overwrite # 改
kubectl get node <node-name> --show-labels111 # 查
# 污点 taint
kubectl taint node <node-name> key=value:NoSchedule
kubectl taint node <node-name> key=value:NoExecute
kubectl taint node <node-name> key- # 删
kubectl taint node s77 node-role.kubernetes.io/internet:NoSchedule # 标准一点的不调度标签services 服务
kubectl get service # 查看全部 Service 列表
kubectl describe service svc_name # 查看 Service 详细信息
kubectl get service svc_name -o yaml # 查看 Service 资源清单# 方法一:基于已有 Deployment 对象创建
kubectl expose deployment dp_name --type=svc_type --port=<port> --targetPort=<targetPort>
# 示例:
kubectl expose deployment demo-deployment --type=ClusterIP --port=80 --targetPort=80
# 方法二:命令行创建
kubectl create servcie svc_type <service-name> --tcp=<port>:<targetPort>
# 示例:
kubectl create servcie clusterip demo-servcie --tcp=80:80
kubectl delete service <service-name>workload 发布
deployment
看
kubectl get deployment <deployment-name> -o yaml
kubectl describe deployment <deployment-name>改
# 新增或修改 ENV 环境变量
kubectl set env deployment <deployment-name> key=value
# 删除 ENV 环境变量
kubectl set env deployment <deployment-name> key-
# 新增或修改资源限制
kubectl set resources deployment <deployment-name> --requests=cpu=100m,memory=256Mi --limits=cpu=100m,memory=256Mi
# 删除资源限制
kubectl set resources deployment <deployment-name> --requests=cpu=0,memory=0 --limits=cpu=0,memory=0
# 通过 patch 更新
## 新增 command 参数
kubectl patch deployment <deployment-name> --type json -p \
'[{"op":"add", "path":"/spec/template/spec/containers/0/command", "value":["sh","-c","sleep 3000"]}]'
## 删除 command 参数
kubectl patch deployment <deployment-name> --type json -p \
'[{"op":"remove", "path":"/spec/template/spec/containers/0/command"}]'
## 替换 command 参数
kubectl patch deployment <deployment-name> --type json -p \
'[{"op":"replace", "path":"/spec/template/spec/containers/0/command", "value":["sh","-c","sleep 3600"]}]'
kubectl patch 可以使用 --dry-run 进行格式检查, 追加 -oyaml 查看资源清单
# 通过 edit 更新
kubectl edit deployment <deployment-name>
# 更换镜像
kubectl set image deployment <deployment-name> <container-name>=<image-name>控制
kubectl delete deployment <deployment-name>
kubectl -n uat scale deployment me-x-x --replicas=0 # 调整副本数量
# 重启
kubectl rollout restart deployment dp_name
# 临时关闭 Daemonsets - 将其调度到一个不存在的 node 上
kubectl patch daemonsets dp_name \
-p '{"spec":{"template":{"spec":{"nodeSelector":{"project/xdp":"none"}}}}}'kustomize
kubectl kustomize overlays/dev # show 配置 - 不应用
kubectl apply -k overlays/dev # 部署 - 应用pod
查看
# 查看
kubectl get pods -A -o wide
kubectl get pod <pod-name> -o yaml
kubectl get pods --show-labels
kubectl get pods --show-labels --selector app=mysql # 过滤指定标签的
kubectl -n cwx get svc,pod -o wide # svc+pod
kubectl get pods -A | grep -v Running # 过滤不正常的
kubectl describe pod pod_name -n kube-system # 查看 pod 描述信息
# 查找 Pod 所在节点
kubectl -n cwx describe pod gatus-68cbd45f6c-p6tm6 | grep Node:
# 根据 pods 的重启次数进行排序
kubectl get pods -A --sort-by='.status.containerStatuses[0].restartCount'
# 根据启动时间降序(descending order)
kubectl get pods --sort-by=.metadata.creationTimestamp -A
# 根据启动时间升序(ascending order)
kubectl get pods --sort-by={metadata.creationTimestamp} --no-headers | tac
# 查看所有镜像
kubectl get pods -A -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'控制
# 拷贝文件出来
kubectl -n uat-1 cp pod_name:/me/xxxx.xlsx /tmp/xxxx.xlsx
kubectl delete po <pod-name>
kubectl exec -it <pod_name> bash # 进入 pod
# 通过 dp 进入 pod, 多副本时, 应该是随机进入一个
kubectl exec -it deployment/<deployment-name> bash
# 在某个容器内执行命令 - 测试 dns 解析
kubectl exec -n cwx pods/redis-sfs-0 -- nslookup mygoweb
kubectl exec -it <pod name> -- bash # 交互式执行
kubectl exec -it <pod-name> bash -c "<command>" # 非交互式执行命令
# 创建临时 pod
kubectl run --rm -it --image=busybox sh# 查看所有 pod 配置的 requests 和 limits cpu 值
kubectl get pod -A -o json \
| jq -r '.items[] | [.metadata.namespace,.metadata.name,
.spec.containers[].resources.requests.cpu,
.spec.containers[].resources.limits.cpu] | @tsv'日志
# 最新日志
kubectl -n dev logs app-6dcf664d86-jrnb2 --tail 500 -f
# 输出前一次停机前的日志
kubectl logs <pod-name> --previous证书
kubectl get csr # 查看最近的证书请求
kubectl certificate approve node-csr-xxxxxxxx # 批准证书请求存储
pv
# clean unused pv | 未使用的 pv
kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Used By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c 'kubectl -n ${1} delete pvc ${0}'
# 清理没有被绑定的 PVC
kubectl get pvc --all-namespaces | tail -n +2 | grep -v Bound | awk '{print $1,$2}' | xargs -L1 kubectl delete pvc -n
# 清理没有被绑定的 PV
kubectl get pv | tail -n +2 | grep -v Bound | awk '{print $1}' | xargs -L1 kubectl delete pv
# 配置默认storageclass
kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'secret
# 复制secret到其他namespace下, 方法一
kubectl get secret <SECRET-NAME> -n <SOURCE-NAMESPACE> -o yaml | sed "/namespace:/d" | kubectl apply --namespace=<TARGET-NAMESPACE> -f -
# 复制secret到其他namespace下, 方法二
kubectl get secrets -o json --namespace namespace-old | \
jq '.items[].metadata.namespace = "namespace-new"' | \
kubectl create-f -
# 获取K8s的token
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token客户端管理
kubectl config set-context --current --namespace=cwx
kubectl port-forward service/<service name> <localPort>:<servicePort>
kubectl port-forward <podName> <localPort>:<podPort> --namespace kube-system
# 测试 dns 解析
kubectl run dns-test --image=busybox:1.28 --rm -it --restart=Never -- nslookup kubernetes.default资源
# 查看资源总情况
kubectl get no -o=custom-columns="NODE:.metadata.name,ALLOCATABLE CPU:.status.allocatable.cpu,ALLOCATABLE MEMORY:.status.allocatable.memory"
# 查看CPU分配情况
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo -n "{}\t"|tr "\n" " " ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep cpu | awk '\''{print $2$3}'\'';'
# 查看内存分配
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo "{}\t"|tr "\n" " " ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep memory | awk '\''{print $2$3}'\'';'
# 查看资源使用情况 cpu+ram
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c "echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve --;"镜像管理
echo "当前镜像数量"
ctr --namespace k8s.io images list -q | wc -l
echo "清理未使用的镜像..."
ctr --namespace k8s.io images prune
echo "清理已停止的容器..."
ctr --namespace k8s.io containers list -q | xargs -r ctr --namespace k8s.io containers delete
echo "清理未使用的快照..."
ctr --namespace k8s.io snapshots list -q | xargs -r ctr --namespace k8s.io snapshots remove
# 导入镜像文件
ctr -n k8s.io image import registry-photon.tar
# 修改部署的镜像版本
kubectl set image deployment/nginx-deployment container_name=harbor.services.wait/registry.k8s.io/nginx:1.35.2
# 查看命名空间下所有部署的镜像地址,支持多容器的场景
kubectl -n argocd get deployment -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CONTAINER:.spec.template.spec.containers[*].name,IMAGE:.spec.template.spec.containers[*].image
kubectl -n argocd get statefulsets -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CONTAINER:.spec.template.spec.containers[*].name,IMAGE:.spec.template.spec.containers[*].image最后更新于