k8s是什么

k8s全称:Kubernetes

1、k8s是什么

Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,是 Google 开源的一个容器集群管理系统,Kubernetes 简称 K8S。

Kubernetes 是一个一站式的完备的分布式系统开发和支撑平台,更是一个开放平台,对现有的编程语言、编程框架、中间件没有任何侵入性。

Kubernetes 提供了完善的管理工具,这些工具涵盖了开发、部署测试、运维监控在内的各个环节。

Kubernetes 具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制、多粒度的资源配额管理能力。

Kubernetes 官方文档:Kubernetes

 2、k8s发布之后,pod一直在重启原因分析

 现象:running的pod,短时间内重启次数太多

k8s 查询pod中运行的容器 k8s查看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