云原生课程总结

301 阅读3分钟

在参加云原生课程之前,我已经完成了张磊老师《深入剖析 Kubernetes》专栏的第一遍阅读学习,并将公司生产系统全部迁移到k8s集群上。回想当时报名的想法,主要有三个目的:

  1. 完善云原生知识体系,加深对云原生技术的理解;
  2. 对照,借鉴课程的k8s迁移方案和生产应用、运维方案,完善、改进公司的方案;
  3. 技术学习和工作方法的学习交流,期待更多的可能性。 课程学习下来,感觉这三个方面都有所收获,仍从这三方面做总结。

云原生知识

golang

golang具有支持高并发、面向垃圾回收、编译高效等特点,同时因k8s等很多云原生应用使用go开发,所以有必要学习使用,这个需要自己多实践了,比如查阅参考k8s源码,写crd与控制器模型等。

docker与容器

容器本质是操作系统上一个或一组做了隔离的进程,docker使得容器操作变得简单,并且它带来了联合挂载文件系统方面的创新。 namespace: linux内核提供的资源隔离技术,重点关注network、mount、usr等。 cgroup:内核提供的资源控制和监控技术,重点关注cpu和内存子系统。 联合挂载:容器镜像为rootfs层,容器启动时以readonly方式首先挂载,注意联合挂载的写时复制特性,一般情况下,容器的持久化及写不要放在多层文件系统。 同时关注容器镜像的制作(最佳实践)及容器的网络等。

k8s

k8s是容器集群管理系统,它是声明式的,声明资源对象的属性,通过控制器,使得资源的实际情况与声明一致。它的核心对象包括node、pod、namespace、servcie等,同时它还支持用户自定义资源对象(CRD)和控制器,以实现扩展。

k8s控制面组件

控制面组件包括etcd、apiserver、controller-manager和scheduler

k8s工作面组件

包括kubelet和proxy

add-on

重要的组件网络插件、kube-dns、metrics-server等。

k8s集群迁移方案及应用运维方案

要实现生产环境业务系统从传统部署模式迁移到k8s,主要从以下三个步骤及方面考虑:

应用容器化

需要考虑镜像、容器的安全问题,镜像的分层、大小,容器主进程的选择,应用的配置和数据的分离等。

应用迁移到k8s集群

根据应用的有状态与无状态,考虑应用实例的高可用,资源分配与控制,网络模式等

k8s集群应用运维

考虑应用CICD的自动化,监控与日志,安全。

学习方法

坚持学习,坚持实践,要格局打开,深入细节,多思考一些为什么,同时站在更高层面看待技术,形成整体的认识。