内容概括

  • k8s介绍
  • k8s基本概念
  • k8s架构
  • k8s监控及控制台及部署工具

k8s介绍

k8s是一个容器(如docker但不限于docker)编排工具,它的目标是管理容器的整个生命周期,如 创建、修改、更改实例数量、销毁等等

k8s架构图

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无法停止
      WX20190119-172045@2x
    • 该节点上的pod能够正常提供服务
      1547889978727
    • 由于节点不可用,所以会将对应的endpoint从service中移除,因此如果所有的容器均在该节点上,则无法通过service访问该服务
      WX20190119-173430@2x

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 服务均停掉,集群是否可正常提供服务

  • 停掉所有的服务
    WX20190120-115506@2x
  • 服务正常
    WX20190120-115602@2x

k8s控制台

  • 查看node的使用情况
    WX20190122-104452@2x
  • 查看pod情况
    WX20190122-104700@2x

k8s监控

  • 监控pod内存及cpu使用情况
    WX20190122-104843@2x
  • 监控node内存及cpu使用情况
    WX20190122-104947@2x

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的监控、控制台及部署工具

k8s社区文档
k8s部署服务文档
k8s监控
k8s控制台