一次K8S实操相关的实用笔记,希望能帮助大家填点坑

前言

前段时间做了些 K8S 理论上的储备,也在测试的 K8S 集群上做了些简单的测试。虽然感觉收获颇丰,但是纸上得来终觉浅,没有经过生产环境的捶打和磨练,还是没办法掌握这种技术的精华,学到的东西更多的也只是流于表面,无法深入其中。

正巧最近有机会去客户现场实操一个200多节点的 K8S 集群,在运维大拿的帮助下,也算从公司业务流程的维度进行了完整的 K8S 操作以及运维。

虽然困难重重,但是仍然学到了很多东西,也填了很多坑,在这里记录下,方便后续查阅。如果也能为正在看文章的读者们避一些坑,少走一些弯路,那这篇文章也就功德圆满了。

废话不多说,直接开启捞干货的历程。另外,由于作者本身水平以及认知的限制,可能会有部分讲述有问题,欢迎大家纠正以及讲解。下面将从几个方面对实操 K8S 进行相关的总结。

工欲善其事必先利其器

搭建生产级别的 K8S 集群

要使用一个生产级别的 K8S 集群,首先先要搭建一套生产级别的K8S集群。

所以怎么能快速且简单的搭建生产级别K8S集群是K8S生产化所面临的的第一个问题。

当前安装 K8S 的方案有很多,但是不管是 yum 安装、二进制文件安装以及官方提供的 kubeadm 安装方式,都多多少少有一些门槛,而且安装过程也比较复杂。

这对于资深运维人员或者对 K8S 很熟悉的人来说可能还好,对于刚接触K8S不久经验不是很丰富的人来说,可能是一个艰巨的任务。

所以在这里推荐一个三方工具: Sealos。下面简单介绍下:

什么是 Sealos

Sealos 是一个 Go 语言开发的简单干净且轻量的 K8S 集群部署工具,Sealos 能很好的支持在生产环境中部署高可用的 K8S 集群。

Sealos 特性与优势

  • 支持离线安装,工具与部署资源包分离,方便不同版本间快速升级。

  • 证书有效期默认延期至99年。

  • 工具使用非常简单。

  • 支持使用自定义配置文件,可灵活完成集群环境定制。

  • 使用内核进行本地负载,稳定性极高,故障排查也极其简单。

这么个简单好用稳定性高,最重要还免费的工作谁不喜欢呢?所以强烈推荐大家试一试,至于搭建流程这里就不赘述了,网上很多,大家可以自己去学习下。

管理 K8S 集群

集群搭建完毕后,肯定是要进行管理的,而图形化的 K8S 管理工具显然是刚需的。毕竟能通过页面直接看,谁不也会想去打命令。

这方面作者使用过 kuboard 以及 KubeSphere,当然还有官方以及阿里提供的其他工具。作者没用过就不过多阐述了。功能都差不多,纯粹个人习惯和喜好。

下面就说说作者用过的两种的特点吧:

  • kuboard 相对于 KubeSphere 更简单明了,上手难度低,且将使用人员和运维人员切分的比较彻底。显然更适合纯 K8S 使用人员来监控和管理 K8S 集群。

  • KubeSphere 的复杂性体现在将部分 K8S 的创建和维护细节放到了图形界面中。虽然这样子功能变得更强大,但是功能也会显得鸡肋。毕竟使用人员不会关注和使用这些细节,而纯运维人员更喜欢和相信命令行。

所以综上,建议刚入K8S坑的小伙伴可以优先选择 kuboard,毕竟快速用起来才是王道。

配置文件管理

基础环境搭建起来后,下面就是搭建业务系统了。而业务系统的构建基本上依赖两类资源:

  • 以 configmap 为主的全局配置,用以在各种应用之间进行配置共享,类似于环境变量

  • 各种业务yaml配置文件,构建业务的具体逻辑都在这里

由于业务变更以及各种调优可能会导致多版本的配置,此时一定要做好配置的版本管理。尤其是开发人员在界面上修改配置,运维人员使用yaml更新配置,这样子肯定会造成各种配置不一致,进而造成很多不惜要的开销和麻烦。

如果是开发人员和运维人员共同使用这种场景下,建议共同维护一套配置入口。优先建议维护yaml配置文件,毕竟yaml配置文件的使用场景和便利性还是比界面修改好很多。

其他有用的记录

  • configmap 相关的yaml文件修改后直接使用 kubectl apply -f xxx.yaml 即可以生效。但是依赖或者引用该 configmap 的 application 需要重新启动才能加载最新配置。

  • application 的重启需要考虑该 application 是否依赖于其他的 application,如果有多重依赖关系,重启时需要使用kubectl rollout restart -f xxx.yaml,该命令会将当前的 application 以及 该 application 关联的 application一并重启;反之使用kubectl restart -f xxx.yaml即可。

  • 如果 application 重启时需要使用新的镜像,在不确保没问题的前提下,建议先删除旧的 application,再 apply 生成新的application。否则在极端情况下,新的镜像报错,重试一定次数后 K8S 会加载旧的镜像,导致各种问题。

  • 如果 application 依赖于主机名的映射,如HBase以及kafka等应用,可以通过

  • 探活机制是个很有用的机制,健康检查以及 POD 状态管理和重启管理还是需要依赖于这个机制的。对于高可用性的系统这个机制还是不可或缺的。详细可以参考下图:

  • K8S 有个比较尴尬的问题,如果将程序运行放在 POD 启动的时候,如果程序报错,那么 POD 中的很多信息由于 POD 未能启动而无法获得,给错误定位带来很多困难。所以建议在调试阶段加上部分机制保证调试的便利性。

如下图所示:

正常情况下可以通过docker_run.sh写在docker镜像的启动脚本中来直接启用镜像。

如果需要调试则可以打开注释,使用command命令使用tail命令先保证 POD 启动起来,然后再手动执行docker_run.sh来启动服务,此时的 POD 已经启动完毕,不会因为启动报错而关闭,相关排错的任务就可以进行了。

这里也需要注意下上面提到的探活机制,如果有该机制且探活周期比较短,建议暂时关闭探活机制,否则 POD 会因为探活机制而频繁重启。

总结

以上就是我这次去客户现场操作生产环境 K8S 的一点心得和经验,后续有新的内容我还会继续分享。这次的经历再次印证了只有在生产环境下真实的分析和解决问题,才会更深刻的学习知识并积累相关的经验。

文章到这里就结束了,最后路漫漫其修远兮,大数据之路还很漫长。如果想一起云原生以及大数据的小伙伴,欢迎点赞转发加关注,下次学习不迷路,我们在大数据的路上共同前进!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: k8sKubernetes)是一个开源的容器编排平台,用于自动化容器部署、扩展和管理。下面是一些与k8s相关的重要知识点运维笔记。 1. 容器化技术:k8s基于容器化技术,可以将应用程序及其依赖项封装到容器中,实现隔离和轻量级部署。熟悉Docker等容器化工具是使用k8s的先决条件。 2. 集群架构:k8s由Master和Worker节点组成,Master节点负责管理和控制集群,而Worker节点负责承载应用程序容器。了解集群架构和组件的功能是进行k8s运维的重要基础。 3. 资源管理:k8s通过Pod、Deployment、ReplicaSet等资源对象实现应用程序的管理。Pod是最小的可部署单元,可以包含一个或多个容器。Deployment用于定义和控制Pod的副本数和版本更新等。 4. 服务发现和负载均衡:k8s提供了Service对象用于服务发现和负载均衡。Service定义了一组Pod的访问入口,并通过ClusterIP、NodePort或LoadBalancer等方式实现内部和外部的访问。 5. 存储管理:k8s支持各种存储卷插件,包括本地存储、NFS、AWS EBS等。使用存储卷可以将应用程序中的数据持久化,并实现数据的共享和迁移。 6. 配置管理:k8s提供了ConfigMap和Secret等对象用于管理应用程序的配置和敏感信息。ConfigMap用于存储配置数据,而Secret用于存储敏感信息如密码和API密钥。 7. 监控和日志:k8s集成了多种监控和日志工具,如Prometheus、Grafana和EFK(Elasticsearch、Fluentd、Kibana)等。通过这些工具可以实时监控和分析应用程序的性能和日志信息。 8. 自动扩展:k8s可以根据应用程序的负载情况自动进行扩展。通过Horizontal Pod Autoscaler(HPA)等机制,可以根据CPU利用率或其他指标自动调整Pod的副本数。 9. 更新和回滚:k8s支持应用程序的版本更新和回滚。通过Deployment的滚动升级策略,可以实现应用程序的无缝更新,并在出现问题时快速回滚到之前的版本。 10. 故障排除和调试:k8s提供了一些工具和命令行工具,如kubectl、kubectl logs等,用于进行故障排查和调试。掌握这些工具的使用方法对于运维k8s集群是必要的。 以上是一些与k8s相关的重要知识点和运维笔记,对于熟练掌握k8s运维人员来说,这些知识点是必备的。当然,k8s是一个非常广泛且庞大的平台,还有很多其他方面的知识和技能需要进一步学习和掌握。 ### 回答2: Kubernetes(简称K8s)是一种用于自动化容器化应用程序部署、扩展和管理的开源容器编排工具。以下是关于Kubernetes相关重要知识点的运维笔记: 1. 集群架构:Kubernetes由Master和Node组成。Master负责集群管理,包括调度、监控、管理配置等,而Node是运行容器的主机。 2. Pod:Pod是Kubernetes最小的可调度和管理的单元,它可以包含一个或多个容器。Pod共享网络和存储资源,可以通过共享文件和通信进行协作。 3. 命名空间(Namespace):命名空间用于将集群内的资源进行隔离,可以避免不同应用程序之间的冲突。 4. 控制器(Controller):控制器用于实现自动化操作和管理,如应用部署、副本数监控、故障恢复等。常见的控制器包括ReplicaSet、Deployment、StatefulSet等。 5. 服务(Service):Service是一种抽象,用于定义一组Pod的访问方式。它为一组Pod分配固定的虚拟IP,并提供负载均衡和服务发现功能。 6. 存储卷(Volume):存储卷用于持久化数据,确保数据在容器重启或迁移时不丢失。Kubernetes支持多种存储类型,如本地存储、网络存储、云存储等。 7. 扩展机制:Kubernetes提供了多种扩展机制,如水平Pod自动伸缩(HPA)、自定义资源定义(CRD)、自定义控制器等,可以根据需求灵活扩展和定制。 8. 监控和日志:Kubernetes提供了丰富的监控和日志功能,可以通过Prometheus、Elasticsearch等工具对集群中的资源和应用进行监视和记录。 9. 网络和服务发现:Kubernetes为容器提供了多种网络模型,并集成了服务发现机制。可以通过Ingress、LoadBalancer等方式将容器暴露到集群外部。 10. 安全和认证授权:Kubernetes提供了多种安全机制,如RBAC、TLS等,用于认证和授权用户的访问权限,确保集群的安全性。 这些是Kubernetes运维中的重要知识点,掌握了这些知识对于有效管理和运维Kubernetes集群至关重要。 ### 回答3: 1. k8s是一种开源的容器编排和管理平台,用于自动化应用程序的部署、扩展和管理。 2. k8s中的基本组件包括Master节点和Worker节点。Master节点负责管理整个集群的状态和配置信息,Worker节点负责运行容器。 3. k8s中的最小调度单位为Pod,一个Pod是一个或多个相关容器的组合,它们共享存储、网络和名称空间。 4. Replication Controller是k8s中用于复制和扩展Pod的机制,它可以确保指定数量的Pod在任何时间都运行在集群中。 5. Service是k8s中用于将Pod组织成服务的机制,提供一个稳定的IP地址和DNS名称,使得其他Pod或外部用户可以访问服务。 6. Volume是k8s中用于持久化数据的机制,允许容器访问与它们的生命周期无关的存储。 7. k8s支持多种网络插件,如Flannel、Calico和Weave等,用于在集群中实现容器之间的网络通信。 8. k8s可以通过Horizontal Pod Autoscaler实现根据负载自动进行Pod的扩缩容。它根据定义的指标监控集群的负载,并在负载过高或过低时自动调整Pod数量。 9. k8s支持滚动更新,可以在不中断服务的情况下逐步更新应用程序的版本。 10. k8s提供了丰富的监控和日志收集机制,如Heapster和ELK Stack等,帮助用户监控和分析集群的状态和性能。 11. k8s还支持命名空间的概念,可以将集群划分为多个逻辑上独立的区域,以实现更好的资源隔离和管理。 12. k8s支持灵活的部署方式,可以在公有云、私有云或裸机上部署,同时支持自建集群和托管集群。 13. k8s有丰富的命令行工具和API,方便用户进行集群的管理和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值