openssl genrsa -out /tmp/serviceaccount.ket 2048
在/etc/kubernetes/apiserver修改KUBE_API_ARGS="--service_account_key_file=/tmp/serviceaccount.key"
在/etc/kubernetes/controller-manager修改KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/tmp/serviceaccount.key"
重启kube-apiserver和kube-controller-manager资源清单:掌握资源清单的语法、编写Pod、掌握Pod的生命周期
Pod控制器:掌握各种控制器的特点以及使用定义方式
服务分类:有状态服务、无状态服务
服务发现:掌握SVC远原理及其构建方式
存储:掌握多种存储类型的特点、在不同环境中选择合适的存储方案
调度器:掌握调度器原理、根据要求把Pod定义到想要的节点运行
安全:集群的认证、鉴权、访问控制原理及其流程
HELM:掌握HELM原理、HELM模版自定义、HELM部署常用插件
运维:修改Kubeadm达到延长证书可用期限、构建高可用的Kubernetes集群
APIserver:服务访问统一入口
CrontrollerManager:维持副本期望数目
Scheduler:介绍任务、选择合适节点分配任务
etcd:持久化存储K8S集群信息
Kubelet:直接和容器引擎交互实现容器生命周期管理
Kube-proxy:写入规则至IPTABLES、IPVS实现服务映射访问
COREDNS:为集群中SVC创建域名IP对应关系解析
DASHBOARD:给K8S集群提供一个B/S结构访问体系
FEDETATION:跨集群中心多K8S统一管理功能
PROMETHEUS:K8S集群的监控
ELK:K8S集群日志统一分析接入平台
各Pod之间的通讯:同一个Pod内部使用localhost、不同之间的Pod将Pod IP和Node IP关联通过Flannel网桥、同一台机器的不同Pod使用Docker网桥转发请求
ETCD Flannel提供说明:存储管理Flannel可分配的IP地址段资源、监控ETCD中每个Pod的实际地址建立维护Pod节点路由表
Pod至Service的网络:为ipables维护转发(LVS负载均衡器维护转发)
Pod到外网:转发数据包到宿主机的网卡,宿主机网卡路由选择,iptables执行Masquerade源IP转换为宿主网卡IP,向外网发送请求
外网访问Pod:service node port
工作负载型:Pod、RS、Deployment、StatefulSet、DaemonSet、Job、CronJob
服务发现以及负载均衡型:Service、Ingress
配置与存储型:Volume、CSI
特殊类型存储:ConfigMap、Secret、DownwardAPI
Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
HPA、PodTemplate、LimitRange
apiVersion String、kind String、metadata Object(name、namespace)、Spec Object(containers[](name、image、imagePullPoicy、command[]、args[]、workingDir、volume、port[](name、containerPort、hostPort、protocol)、env(name、value)、resource)、nodeSelector、imagePullSecrets、hostNetwork)
总是运行到成功为止,每个Init必须在下一个Init容器启动之前完成。
具有与应用容器分离的单独镜像,它们包含并运行实用工具,包含使用工具和定制化代码安装,使用Linux Namespace(具有Secret访问权限),在应用容器启动之前运行完成。
按顺序在网络和数据卷初始化之后启动,在下一个容器启动之前退出,更改Init容器的Image等价于重启Pod。
由kubelet对容器执行的定期诊断,调用容器实现的Handler,三种类型处理处理程序(ExecAction容器内执行指定命令、TCPSocketAction对指定端口容器的IP地址进行TCP检查、HTTPGetAction对执行端口和容器IP地址执行HTTPGet请求)
livenessProbe:指示容器是否在运行,存活探测
readinessProbe:指示容器是否准备好服务请求
lifecycle:postStart preStop
Pending挂起、Running运行中、Succeeded成功、Failed失败、Unknown未知
Pod(自主式Pod、控制器管理Pod)
RS相较于RC支持Selector标签,命令式create。
声明式apply,包含RS,支持滚动升级、回滚、扩容缩容、暂停继续Deloyment。
确保Node运行一个Pod的副本,例子(日志、监控代理)。
批处理任务,仅执行一次的任务,保证批处理任务的一个或多个Pod成功结束。
基于时间,给定时间点运行一次,周期性在给定时间点运行
保证部署和scale的顺序,稳定化持久存储(基于PVC),稳定网络标识(Headless Service),有序部署有序扩展(init C),有序收缩有序删除。
Pod水平自动缩放,提升集群整体资源利用率
通过Lable Selector选择一组Pod(微服务),轮询访问。
提供四层负载均衡能力。
APIserver:监听服务和端点
kube-proxy:监控的工具,写入iptables规则,重定位代理端口
iptables:客户端访问Pod节点
必须经过kube-proxy进行网络通信
不需要经过kube-proxy,直接经过iptables通信
kube-proxy监控kubenetes的Service对象和Endpoints,调用netlink接口相应创建ipvs规则并定期同步。
外部HTTPS的访问媒介,使用nginx进行中介。
configMap API提供向容器中注入配置信息的机制,用来保存单个属性、整个配置文件或者JSON二进制大对象。
创建方式:目录创建、使用文件创建、使用字面值创建。
热更新特性,configMap更新后滚动更新Pod。
更新configMap后,使用该configMap挂载的Env不会更新,Volume中的数据需要一段时间后才会更新。
Secret解决了密码、token、密钥等敏感数据的配置问题,不需要把敏感数据暴露到镜像或者Pod Spec中,Secret以Volume或者环境变量方式使用。
类型:Service Acount(访问Kubernetes API)、Opaque(base64编码格式)、kubernetes.io(存储私有仓库的认证信息)
共享文件、存储持久。
Scheduler作为调度器,将定义的Pod分配到集群的节点上,作为单独程序运行,一直监听API server获取NodeName为空的Pod,对每个Pod创建一个binding表明分配的节点。
过滤掉不满足条件的节点(predicate),对节点按照优先级排序(priority),选择优先级最高的节点
predicate算法:剩余资源是否满足、节点名称是否匹配、节点使用port和pod申请port是否冲突、指定lable是否匹配、已经挂载的volume和pod指定的volume不冲突(除只读外)
无合适节点,Pod一直处于pending状态。优先级由键值对表示(优先级名称:权重)。
软策略和硬策略
Taint污点使得Node排斥一类特定的Pod,Toleration容忍存在于Pod之上则说明可以被调度到有相应Taint的节点。
kubectl taint
设置污点
容忍Taint的存在,不排斥调度到该Node上,key、value、effect与Taint保持一致,tolerationSecond描述Pod需要被驱逐时可以继续保留运行的时间。
强制匹配,跳过Scheduler调度,根据节点名称选择、根据标签选择
安全机制围绕保护API Server设计。认证->鉴权->准入控制。
两种类型:Kubernetes组件对API Server的访问(kubectl、Controller Manager、Scheduler、kubelet、kube-proxy)、Kubernetes管理的Pod对容器的访问。
安全性说明:Master上的组件使用本地非安全端口地址访问API Server、其余节点组件使用HTTPS双向认证。
证书签发:手动签发(通过k8s集群的根CA签发HTTPS证书)、自动签发(kubelet首次访问API Server使用token做认证,认证通过后Controller Manager为kubelet生成证书,之后访问采用证书认证)
认证确认通信双方可信,鉴权确定请求方的资源权限
API Server的插件集合,通过添加不同的插件实现额外的准入控制规则。
包管理工具,安装服务,通过打包的方式支持版本管理和控制,很大程度简化了Kubernetes应用的部署和管理。
本质是K8S的应用管理(Deployment、Service等)可配置,能动态生成,通过动态生成yaml资源清单文件,然后调用kubectl自动执行K8S资源部署。
是部署环境的流程封装。chart(创建一个应用的信息集合,包括各种Kubernetes对象的配置模版、参数定义、依赖关系、文档说明等,是应用部署的自包含逻辑单元,类别apt、yum软件安装包)、release(是chart的运行实例,代表了一个正在运行的应用,chart被安装到Kubernetes集群后生成一个release,可以多次安装到同一个集群,chart每次安装都是一个release)
包含两个组件(Helm客户端和Tiller服务器),通过gRPC协议交互,Helm客户端负责chart和release的创建和管理以及和Tiller的交互。Tiller服务器运行在Kubernetes集群中,它会处理Helm客户端的请求,与Kubernetes API Server进行交互。
使用virtual IP代理,API server结合Nginx形成负载均衡分发器,反向代理API Server,集群自动配置高可用ETCD,scheduler和controller manager休眠机制(一个工作、其余休眠),kubelet和proxy不做高可用维护。