k8s(基础篇一)
https://www.yuque.com/leifengyang/oncloud
http://devops.phodal.com/home
Pods:Daemon sets : 守护进程集、Deployments : 无状态副本集、Stateful Sets : 有状态副本集
ingress :负载均衡,将流量转发对应的Services
Services:
config Maps:配置文件
Secrets:账户密码
Persistent Volume Claims(PVC):存储申明
kubectl top nodes :查看nodes的cpu和内存使用率
kubectl top pods -A : 查看pods的cpu和内存使用,不加-A查看默认的pod
kubectl describe pod -n kubesphere-moitoring-system alertmanger-main-01 :检查pod创建过程
维护node 与 驱逐pod :
驱逐:是指分配给节点的pod被要求终止的过程,k8s中最常见的情况是抢占,在资源有限的节点上调度新的pod,需要终止另一个pod,将资源留给第一个pod,此外,k8s会不断的检查资源,并在需要时驱逐pod,这一过程被称为节点压力驱逐。
POD优先级:
为了防止特定的pod被驱逐,可以设置数字优先级值映射到特定的pod,
- 查询当前优先级: kubectl get priorityclasses / kubectl get pc (value 值为优先级数值)
- trueberry (值=1000000) falseberry (值=5000)
服务质量等级驱逐:
如果节点中的资源(cpu和内存)消耗达到某个阈值,kubelet将驱逐pod释放资源,将考虑服务质量QoS来确定驱逐顺序
-
Guaranteed 有保证的,Burstable 可爆发的 ,BestEffort 尽最大努力的
- Guaranteed :正常情况下不会被驱逐
- pod中所有容器都为CPU和内存设置了limits 和requests
- pod中所有容器都有相同的cpulimits和requests
- pod中所有容器都有相同的memory limit和memory request值
- Burstable :可能被驱逐
- 他没有Guaranteed QoS等级
- 已为Pod中的容器设置了limits或Requests
- BestEffort : 驱逐的可能性最大
- pod中任何容器都没有设置限制和请求
- Guaranteed :正常情况下不会被驱逐
-
limits 限制:容器可以使用的最大资源量,Requests 请求: 容器运行所需的小资源量
-
设置node为不可调度状态:kubectl cordon k8s-node01
-
驱逐pod : kubectl drain k8s-node01 --ignore-daemonsets --delete-local-data
- –ignore-daemonsets : 忽略Daemonset类型的pod,Daemonset 时k8s 集群的每一个节点上运行的pod的控制器
- –delete-local-data :驱逐节点前删除该节点上的pod本地数据,包括pod日志、镜像、和其他本地数据
-
删除pod: kuebctl delete pod podname -n namespacename
- 此时被删除的pod就会调度到新的node节点上
-
可调度:kubectl uncordon k8s-node01
-
删除evicted状态的pod:kubectl -n kube-system get pods|grep -i evicted |awk ‘{print $1}’ |xargs kubectl -n kube-system delete pods
重启集群
- 登陆kubernetes 控制节点,备份数据(重点)
- 停止所有节点
- nodes=$(kubectl get nodes -o name |awk -F ‘/’ ‘{print $2}’)
- ssh root@node systemctl stop kubelet ## kubelet 停止后,集群中的所有pod都会停止
- ssh root@node systemctl stop etcd
- ssh root@node systemctl stop docker
- 恢复所有节点
- nodes=$(kubectl get nodes -o name |awk -F ‘/’ ‘{print $2}’)
- ssh root@node systemctl stop kubelet ## kubelet 停止后,集群中的所有pod都会停止
- ssh root@node systemctl stop etcd
- ssh root@node systemctl stop docker
- 检查集群状态
- kubectl get nodes #查看nodes 状态status
- source /etc/etcd.env # 检查etcd的状态
- 常见问题排查
- etcd集群启动失败 》 先检查docker服务状态 〉 检查etcd 状态
- 部分节点无法加入集群 》 先检查节点的服务器状态 〉 服务器(网络状态,防火墙规则)〉 节点docker服务 〉 kubelet状态
- 部分pod不断重启,集群重启后,集群内的所有pod都会重启,如果pod重启依赖其他pod就会出现不断重启情况,可以通过查看pod日志定位重启原因。
ConfigMap :配置集
创建配置集: kubectl create cm redis-conf --from-file=redis.conf
获取yaml中内容: kubectl get cm redis-conf -oyaml
Kubekey :
查看集群证书是否到期: ./kk certs check-expiration
集群证书位置: /etc/kubernetes/pki/
执行命令更新证书: ./kk certs renew -f config.yaml