k8s是什么
k8s全称:Kubernetes
1、k8s是什么
Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,是 Google 开源的一个容器集群管理系统,Kubernetes 简称 K8S。
Kubernetes 是一个一站式的完备的分布式系统开发和支撑平台,更是一个开放平台,对现有的编程语言、编程框架、中间件没有任何侵入性。
Kubernetes 提供了完善的管理工具,这些工具涵盖了开发、部署测试、运维监控在内的各个环节。
Kubernetes 具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Kubernetes 官方文档:Kubernetes
2、k8s发布之后,pod一直在重启原因分析
现象:running的pod,短时间内重启次数太多
如图,3天内已经重启了八百多次,一直就是在running和crashloopbackoff之间反复横跳
定位问题方法:查看pod日志
kubectl get event #查看当前环境一个小时内的日志
kubectl describe pod pod_name #查看当前pod的日志
kubectl logs -f pod_name --previous #查看重启之前的那一次pod的日志,从那一刻开始计算
###############
一般用以上的三个命令就行
在日志中可以清晰的看到整个pod的生命周期,从pull到kill,翻到最上面可以看到kill掉的原因
如果修改了配置文件,需要delete -f ???.yaml,再apply -f ???.yaml
修改的哪个,就delete掉哪个,然后apply
kubectl delete -f ???.yaml
kubectl apply -f ???.yaml
附:
k8s中pod的
重启策略
pod中一共有以下三个重启策略(restartPolicy)
1、Always:当容器终止退出后,总是重启容器,默认策略。
2、OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
3、Never:当容器终止退出,从不重启容器。
三种重启策略中,Always是默认策略,即当用户在配置文件中未配置关于重启的策略,则默认为Always.
kubectl get pods pod1 -o yaml l grep restartPolicy
执行以上命令即可看到当前环境配置的重启策略
几种策略也按实际情况修改,即常驻容器肯定采用Always,例如nginx与mysql等
而一些预期终止的程序
1、失败重新执行,例如定时任务,则适用于OnFailure
2、失败不重新执行,例如一次性任务Never
健康检查:
健康检查是在pod中,可能容器进程存在,pod状态也为runing,但容器内部无法提供服务了(可能是因为堆内存溢出等)这种k8s自身无法判断,需要用户来提供检查方式从情况下使用的
健康检查类型
1、livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod 的restartPolicy来操作。
2、readinessProbe(就绪检查):如果检查失败,Kubernetes会把 Pod从service endpoints中剔除。(可以理解为提出k8s的负载均衡)
3、startupProbe(启动检查):检查成功才由存活检查接手,用于保护 慢启动容器
支持的检查方法:
• httpGet:发送HTTP请求,返回200-400范围状态码为成功。
• exec:执行Shell命令返回状态码是0为成功。
• tcpSocket:发起TCP Socket建立成功。
3、导出日志
docker导出日志
docker logs ${docker id} > ${导出的文件名}
k8s导出节点日志
kubectl logs ${pod_id} > ${导出日志的文件名}
例
kubectl logs xxx > xxx.txt
pod_id查看命令
kubectl get pod
kubectl get pod | grep xxx
4、删除某个pod节点
kubectl delete pod ${pod_id} --force --grace-period=0 -n default