暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

小公司快速k8s cicd部署方案心得

运维入门时间 2021-12-02
1900

 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 构建流程图运作



欢迎您的关注 转发 点赞,是给我最大的动力!!


文章转载自运维入门时间,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论