K8s 笔记
组件
- 节点分为master和node, 一个节点可以是一台机器
- master上跑的程序: kube-api-server、kube-controller-manager、kube-scheduler、etcd
- node上跑的程序: kubelet、kube-proxy、container-runtime
- kube-api-server:restful api的入口, 连接etcd, 其他组件对资源的操作都通过这里. http端口是8080, https是6443
- kube-controller-manager: 自动化功能的核心,比如replicateset, deployment等的controller
- kube-scheduler: 用于调度,对于某个pod, 要把它放到哪个node上面,是根据打分算法(优先队列)实现
- etcd: 分布式key-value数据库, 存储各种状态数据
- kubelet: 运行在每个node节点上,接收master下发的命令,管理本node里面的pod, 并定时向api-server更新信息
- kube-proxy: 负载均衡的实现,网络层负载均衡,即service —> pod
- container-runtime: 比如docker, 还有k8s推荐的containerd
Pod:
一个pod里面有多个容器,除了业务容器,还有一些管理用途的容器,比如pause容器
重启策略: Always, On Failure, Never
镜像拉取策略: IfNotPresent, Always, Never
存活探针, 即health check方法:
- Http Get: 返回 200 ~ 400表示健康
- exec: 执行shell 命令,返回 0表示健康
- TCPSocket: 应该是通过telnet的方式,能建立就说明健康
创建Pod涉及到底层组件的运作过程
- apiserver做处理,交将pod信息存入etcd, 返回给调用方
- 其他组件通过watch机制监听到apiserver的变动
- scheduler发现有新pod, 经过分配的算法,决定将该pod放入哪个node, 并告诉apiserver
- kubelet发现有pod要分到我这个node, 就去启动docker容器,并反馈给apiserver
- apiserver同步pod状态等信息到etcd Service:
类型
- ClusterIP: 供集群内部使用
- NodePort: 可以对外访问的应用,会在每个节点暴露一个port
- LoadBalancer:
- ExternalName: 将集群外部服务引入集群内部
题目
- namespace,主要用来实现多套环境, dev, sit, uat