k8s常用命令
常用命令行
# 查看master组件状态
kubectl get cs
# 查看集群节点
kubectl get nodes
# 查看pod信息
kubectl get pods
# 获取发布信息
kubectl get deployments
# 查看集群信息
kubectl cluster-info
# 删除节点
kubectl delete node node42.vpclub.io
# 删除 pod
kubectl delete pod nginx-3654852276-2dt73
# 删除deployment
kubectl delete deployment nginx
# 详细日志调试工具
kubectl describe pods
# 进入容器
kubectl exec -it <nginx-webapp-2067515279-1z0lb> /bin/bash
# 查看已经部署的yml配置信息
kubectl get deploy NAME -o yaml
# 强行删除
kubectl delete pod <pod名> --grace-period=0 --force
# 为node增加label
kubectl label nodes 190.vpclub.io <label>
# 删除node的label,既在label后面加 -
kubectl label nodes 190.vpclub.io <label>-
# 修改一个label ,需要增加参数 --overwrite
kubectl label nodes 190.vpclub.io role=apache --overwrite
# 节点不参与调度,同理,恢复标记为在 label后面加 -
# 节点不参与调度并立即驱离已经存在的POD
kubectl taint nodes 190.vpclub.io node-role.kubernetes.io/master=:NoExecute
# 节点不参与调度,已经被调度的不受影响
kubectl taint nodes 190.vpclub.io node-role.kubernetes.io/master=:NoSchedule
# 重新调度一组POD
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
# 标记为维护
kubectl cordon 17.vpclub.io
# 取消维护状态
kubectl uncordon 5-16.vpclub.io
# 删除nginx-ingress后的报错
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
# 获取不正常的POD
kubectl get pods --all-namespaces| grep "Terminating\|OutOfpods\|CrashLoopBackOff\|Evicted\|ContainerStatusUnknown\|Error"
# 强制删除全部不正常的POD
kubectl get pods -n trade | grep "Terminating\|OutOfpods\|CrashLoopBackOff\|Evicted\|ContainerStatusUnknown\|Error" | awk '{print $1}' | xargs kubectl delete pod -n trade --force --grace-period=0
# 使用环境变量删除所有不正常的PO
_opns=kube-system && kubectl get pods -n ${_opns} | grep "Terminating\|OutOfpods\|CrashLoopBackOff\|Evicted\|ContainerStatusUnknown\|Error" | awk '{print $1}' | xargs kubectl delete pod -n ${_opns} --force --grace-period=0
# 缩放实例
kubectl scale -n devops-default --replicas=0 deployment/devops-admin-api
# 把某个NS下面的部署全部缩放为0
kubectl scale deploy --replicas=0 --all -n park-zjy
# 最近有活动d部署
kubectl get deploy --all-namespaces --sort-by=.metadata.creationTimestamp
# 查看节点cpu内存使用情况,需要先安装metrics-server
kubectl top node --sort-by memory
# 查看pod内存使用情况,需要先安装metrics-server
#kubectl top pods --sort-by memory
删除master节点
# 先安装删除node节点的方式删除节点
kubectl delete node 01.vpclub.io
# 随便找一个etcd容器,进入到容器内
kubectl exec -it etcd-00 sh -n kube-system
# 在Pod 中设置登录 ETCD 的命令(临时设置别名,退出后失效)
export ETCDCTL_API=3
alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
# 查看集群节点列表
etcdctl member list
# 示例:
669bc6472fb13679, started, master1, https://192.168.1.19:2380, https://192.168.1.19:2379, false
959c93e3261aadcb, started, master2, https://192.168.1.20:2380, https://192.168.1.20:2379, false
ca5f1f6f780545ba, started, master3, https://192.168.1.23:2380, https://192.168.1.23:2379, false
# 删除master3节点
etcdctl member remove ca5f1f6f780545ba
让pod可以运行在每一台不受污点影响
# 加在与volumes同级
tolerations:
- effect: NoSchedule
operator: Exists
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists
将服务名解析到外部IP地址
# 服务定义
apiVersion: v1
kind: Service
metadata:
name: mysql # 与端点名一致
spec:
clusterIP: None # headless
ports:
- name: default
protocol: TCP
port: 42
targetPort: 42
---
# 端点定义
apiVersion: v1
kind: Endpoints
metadata:
name: mysql # 与服务名一致
subsets:
- addresses:
- ip: 192.168.0.46 # 外部地址
ports:
- name: default
port: 42
protocol: TCP