— 1 —
kubenetes产生背景
kubernetes —— 工业级的容器编排平台,简称K8S(“k-s之间有8个字母),因为有了这个编排工具之后,不仅在给运维大大提升了运维的效率,也给应用稳定性提供了有力的保障。解决了出现容器时 、容器 网络 及运维管理成本。
— 2 —
快速给公司应用赋能
2.1、自动调度(调度)
通过 k8s 中的调度器这个组件来实现的,当你提交了容器镜像之后,k8s 通过调度器来观察这个容器所需要的资源(eg:cup、mem),然后根据这些条件(过滤、筛选)将容器放置在集群中一个合适的节点上,完成自动部署!
并且它会通过调度机制混合 关键性应用和非关键性应用的工作负载于同一节点上,以便提高资源利用率。调度过程:等待调度 —— 正在调度 —— 调度完成!
2.2、自动恢复(自愈)
容器(探针方式livenessProbe、readinessProbe)故障后的自动重启、节点故障后重新调度容器!以及集群内节点的的健康状态检查!
livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success。
readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。
2.2.1 探针三种方式
使用exec方式检查
使用httpGet方式检查
使用tcpSocket方式检查
pod的重启策略restartpolicy:Always OnFailure Never
2.3、水平扩展(水平伸缩)
k8s有业务负载检查的功能,它会检测这个业务所承担的负载,如果这个业务对CPU 内存 ,利用率太高或响应时间太长 自定义扩容方式 ,它可以对这个业务进行自动HPA 扩容!!
另外引入一个新型概念,在云厂商的基础上,解决好资源池 、网络的问题,可以直接引入auto scale,定义好池子进行node节点扩容。注意购买机器付费模式。
2.4、服务发现 与 负载均衡
k8s 通过其附加组件之一的 kubeDNS(CoreDNS)为系统内置了服务发现功能!
它会为每个 service 配置 DNS 名称,并且允许集群内的客户端可以直接使用此名称发出访问请求!
而 service 则通过 iptables 或 ipvs 内建了负载均衡机制!
2.5、自动发布 和 回滚
k8s 支持 “灰度” 更新应用程序或配置信息。
它会监控 更新过程中应用程序的健康状态!以确保他不会在同一时刻杀死所有的实例,而此过程一旦有故障发生,则 立刻自动执行 回滚 操作!
回滚(RollBack) —— 指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为!
发布这个动作可以结合jenkins pipeline 或者 手工 组装yaml文件方式从而达到业务的预期效果。
2.6、密钥 和 配置管理
k8s的 ConfigMap 实现了 配置数据和 docker镜像解耦。需要时,仅对配置做出变更而无须重新构建 docker镜像。对于用户所依赖的一些敏感数据(eg:用户名、密码、连接配置中心),k8s 专门提供了 Secret对象 为其解耦!既便利了应用的快速开发和交付,又提高了安全保障!
2.7、存储编排
k8s 支持 pod对象 按需 自动挂载不同类型的存储系统。在有状态的情况下 挂载你需要的磁盘及方式,目前最好的方式 推荐无状态情况用k8s 有状态还是先私有化部署 尤其是数据库之类的 目前来看 问题还是相对比较多的。具体不展开 可以探讨
— 3 —
运作K8S的基础组件
3.1、镜像仓库
不同云厂商采用不同的云镜像仓库产品,自建harbor也是可以的。设计的时候主要提供2个想法,方法一、尽量使用内网pull push镜像 这样会加速部署的时间和网络问题 方法二、在全球化部署的过程中,尽量支持镜像可以多region 分发的
3.2、jenkins
自建或者k8s继承都可以,注意接入ldap之后的权限控制及最新的api使用
3.3、maven仓库
java项目需要
3.4、gitlab仓库
代码仓库需要,以group方式命令,以名字+时间+分支功能点命名分支名
3.5、dockerfile
注意选用合适的基础操作系统和dockerefile编写的点,减少容器大小问题
3.6、kubectl 客户端
注意选择跟自己k8s版本合适的kubectl 客户端
3.7、kubenetes 集群
推荐使用v1.18以上的版本,不同的云厂商有不同的问题 。自己做选择
对你没有看错 除了一个K8S的集群 和 镜像仓库,其他该有的基础架构在没有上K8S的时候 ,还是有的。所以上K8S大家不要觉得有多难。你们需要的只是一个懂K8S的人 和 跟大家能解释清楚的一个人而已。
— 4 —
CICD 构建流程图运作