k8s容器业务实践
内容概括
- k8s介绍
- k8s基本概念
- k8s架构
- k8s监控及控制台及部署工具
k8s介绍
k8s是一个容器(如docker但不限于docker)编排工具,它的目标是管理容器的整个生命周期,如 创建、修改、更改实例数量、销毁等等
k8s基本概念
基本概念
- namespace:资源隔离的一种手段
- node: node节点
- pod: 一组容器的一个“单一集合体”
- ReplicaSets:副本控制器,用于管理pod,对pod及其副本的集合的定义
- deployment:用于在滚动升级的过程中管理 rs
- service:对一组pod提供一个对外的统一ip及服务
- ingress:对外通过域名绑定的方式提供服务
开发常用命令
- 查看pod
kubectl get pods
- 进入pod
kubectl exec -it podname bash
- 查看标准标出
kubectl logs podname
k8s架构
k8s master
etcd
k8s存储,保存了整个集群的状态
apiserver
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- 如果该服务挂掉,集群不可接收任何操作请求,如kubectl操作失败,但是集群可正常提供服务
- 如果容器依赖于api,则不可提供服务
- apiserver停止服务后,scheduler及controller-manager自动停止服务
scheduler
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- 如果该服务挂掉,集群可正常提供服务,apiserver可正常接收请求,对集群的部分操作可正常完成,如delete pod;但是由于不可调度,所以无法将pod调度到相应的机器上,即pod可生成,但是无法在node上成功启动;scheduler正常后,pod会自动启动
controller manager
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- 如果controller manager挂掉,可对pod进行删除,但是不可对deployment进行删除操作
- 与scheduler的区别是停掉controller-manager无法生成pod,而停掉scheduler可生成pod,但是无法调整到某个node上
- 即contrller-manager是对集群pod deploy rs 等状态的维护,如 应启动多少pod;而scheduler是对pod的调度
即controller维护deploy等应该有的状态
k8s node
kubelet
- kubelet负责维护容器的生命周期
- 如果kubelet挂掉
- 该节点会展示异常;
- 无法对该节点上的pod进行操作,如果删除该node上的pod时,会在其它启动一个新的pod,但是该节点上的pod无法停止
- 该节点上的pod能够正常提供服务
- 由于节点不可用,所以会将对应的endpoint从service中移除,因此如果所有的容器均在该节点上,则无法通过service访问该服务
kube-proxy
- kube-proxy运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtables 来实现网络的转发
- 如果kube-proxy挂掉
- 集群可正常提供服务,service可正常访问
- 可正常对pod进行操作
- 当对pod出现变更时,由于kube-proxy挂掉无法对service转发规则进行调整,会出现问题
- 若发起请求的节点上的kube-proxy挂掉,若pod A的ip规则出现调整时,
- 节点上的pod通过service对A的访问,只会维持原规则;
- 即若调整前的pod A仍能提供访问,则服务正常,但是新的podA1不会收到请求;
- 但是若pod A停止服务,则该节点pod中发起的请求,无法访问 podA1;
- 其它kube-proxy正常的节点对pod的请求正常,新的podA1可正常访问
- 即新的podA1对kube-proxy正常的节点有效,对非正常节点无效
kubectl
- 用户可通过kubectl对集群进行操作
如果 k8s 服务均停掉,集群是否可正常提供服务
- 停掉所有的服务
- 服务正常
k8s控制台
- 查看node的使用情况
- 查看pod情况
k8s监控
- 监控pod内存及cpu使用情况
- 监控node内存及cpu使用情况
k8s部署工具
- 创建服务
curl -X POST -H "Content-Type: application/json" -d '{
"serviceName":"nginx",
"image":"registry.cn-beijing.aliyuncs.com/kevin-public/nginx:1.0.0",
"instanceNum":3,
"kubeType":"test"
}' "http://192.168.177.224:9000/deploy/service"
- 更改服务
curl -X PUT -H "Content-Type: application/json" -d '{
"serviceName":"nginx",
"image":"registry.cn-beijing.aliyuncs.com/kevin-public/nginx:1.0.0",
"instanceNum":3,
"kubeType":"test"
}' "http://192.168.177.224:9000/deploy/service"
- 删除服务
curl -X DELETE -H "Content-Type: application/json" -d '{
"serviceName":"nginx",
"kubeType":"test"
}' "http://192.168.177.224:9000/deploy/service"
- 重启服务
curl -X PATCH -H "Content-Type: application/json" -d '{
"serviceName":"nginx",
"kubeType":"test"
}' "http://192.168.177.224:9000/deploy/service"
- 操作腾讯云K8S
curl -X POST -H "Content-Type: application/json" -d '{
"serviceName":"nginx-test",
"image":"registry.cn-beijing.aliyuncs.com/kevin-public/nginx:1.0.0",
"instanceNum":3,
"kubeType":"tencent-test"
}' "http://192.168.177.224:9000/deploy/service"
总结
- k8s是一个docker容器的编排工具
- k8s提供了对容器的重启、滚动更新、网络访问、副本数量等一系列支持
- k8s服务停止并不影响服务提供功能(针对部分版本、部分服务)
- k8s常用的命令及基本的概念
- k8s的监控、控制台及部署工具