在参加云原生课程之前,我已经完成了张磊老师《深入剖析 Kubernetes》专栏的第一遍阅读学习,并将公司生产系统全部迁移到k8s集群上。回想当时报名的想法,主要有三个目的:
- 完善云原生知识体系,加深对云原生技术的理解;
- 对照,借鉴课程的k8s迁移方案和生产应用、运维方案,完善、改进公司的方案;
- 技术学习和工作方法的学习交流,期待更多的可能性。 课程学习下来,感觉这三个方面都有所收获,仍从这三方面做总结。
云原生知识
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的自动化,监控与日志,安全。
学习方法
坚持学习,坚持实践,要格局打开,深入细节,多思考一些为什么,同时站在更高层面看待技术,形成整体的认识。