写点什么

云原生之旅:一年的变革、成长与启示

  • 2023-12-12
    北京
  • 本文字数:2560 字

    阅读完需:约 8 分钟

前言

在云原生领域,Kubernetes 已经成为了一个无处不在的平台,用于构建和管理云原生应用程序。以下是我对 Kubernetes 的学习总结和趋势预测,以及我参与云原生项目的一些经验分享。

Kubernetes 学习总结和趋势预测

Kubernetes 是一个开源的容器编排系统,它提供了自动化部署、弹性扩展、自我修复等功能,帮助开发者更好地管理容器化应用程序。Kubernetes 的核心概念包括节点、Pod、Service、Deployment 等,通过这些概念可以构建和管理一个可扩展的容器化应用程序。



学习 Kubernetes 需要掌握以下几个关键概念:


(1)节点:节点是运行容器化应用程序的物理或虚拟机。


(2)Pod:Pod 是 Kubernetes 最基本的资源,它包含一个或多个容器,共享一些网络和存储资源。


(3)Service:Service 为 Pod 提供负载均衡和可持续性,它可以将多个 Pod 映射到一个公共 IP 地址上。


(4)Deployment:Deployment 是用于部署和管理 Pod 的控制器,它提供了声明式 API 和滚动更新功能。

趋势预测

随着云原生技术的不断发展,Kubernetes 将会有以下几个发展趋势:


(1)更强的可扩展性和灵活性:Kubernetes 将会支持更多的容器编排场景,例如批处理任务、批处理作业等。同时,Kubernetes 将会提供更多的插件和扩展接口,以满足不同用户的需求。


(2)更安全的开发环境:Kubernetes 以容器为重要组成部分,而容器的安全性如今越来越受到挑战。所幸,我们可以看到越来越多的开发者在云原生的领域应用 DevSecOps 模式作为 GitOps 的一部分,在整个开发周期中显式地强调安全,并利用 CI/CD 来持续追踪测试,保证软件服务在任何时期和任何版本的安全性。


(3)更灵活的边缘环境:Kubernetes on Edge 是一个越来越火热的话题。事实上,边缘环境相对于云环境对于资源的利用效率、扩展性、灵活性、稳定性和跨平台有着更高的要求。而这些需求恰恰都是 Kubernetes 可以提供的;首当其冲的收益者就是边缘计算最重要的领域 —— 物联网。

参与云原生项目的经验分享


依赖安装:


git clone https://github.com/GoogleCloudPlatform/kubernetes.git cd kubernetes/build ./release.sh
复制代码


第二步,我们还需要 etcd 的二进制可执行文件,通过如下方式获取:


wget https://github.com/coreos/etcd/releases/download/v0.4.6/etcd-v0.4.6-linux-amd64.tar.gz tar xvf etcd-v0.4.6-linux-amd64.tar.gz
复制代码


第三步,就可以启动各个组件了:


etcdcd etcd-v0.4.6-linux-amd64 ./etcd
apiserver
./apiserver \ -address=127.0.0.1 \ -port=8080 \ -portal_net="172.0.0.0/16" \ -etcd_servers=http://127.0.0.1:4001 \ -machines=127.0.0.1 \ -v=3 \ -logtostderr=flse \ -log_dir=./log
scheduler./scheduler -master 127.0.0.1:8080 \ -v=3 \ -logtostderr=false \ -log_dir=./log
controller-manager./controller-manager -master 127.0.0.1:8080 \ -v=3 \ -logtostderr=false \ -log_dir=./log
kubelet./kubelet \ -address=127.0.0.1 \ -port=10250 \ -hostname_override=127.0.0.1 \ -etcd_servers=http://127.0.0.1:4001 \ -v=3 \ -logtostderr=false \ -log_dir=./log
复制代码


搭好了运行环境后,就可以提交 pod 了。首先编写 pod 描述文件,保存为 redis.json: 


{  "id": "redis",  "desiredState": {    "manifest": {      "version": "v1beta1",      "id": "redis",      "containers": [        {          "name": "redis",          "image": "dockerfile/redis",          "imagePullPolicy": "PullIfNotPresent",          "ports": [            {              "containerPort": 6379,              "hostPort": 6379            }          ]        }      ]    }  },  "labels": {    "name": "redis"  }}
复制代码


然后,通过命令行工具 kubecfg 提交:


./kubecfg -c redis.json create /pods
复制代码


提交完后,通过 kubecfg 查看 pod 状态:


#./kubecfg list /pods ID Image(s) Host Labels Status ---------- ---------- ---------- ---------- ---------- redis dockerfile/redis 127.0.0.1/ name=redis Running
复制代码


在参与云原生项目的过程中,我积累了一些经验,以下是其中的一些分享:


选择合适的工具和技术栈在参与云原生项目时,选择合适的工具和技术栈非常重要。对于容器编排和容器管理,Kubernetes 已经成为了行业标准。在选择其他工具和技术栈时,需要考虑它们的生态系统、社区支持、文档完善度等因素,以确保项目能够顺利推进。


重视基础设置建设


(1)网络规划:在云原生项目中,网络规划非常重要。需要考虑南北向流量和东西向流量的隔离、网络安全等问题。同时,还需要考虑 Service 负载均衡、Service 发现等问题。


(2)存储规划:在云原生项目中,存储规划也非常重要。需要考虑如何为 Pod 提供共享存储资源,以及如何为 Service 提供稳定的 IP 地址和域名等。同时还需要考虑持久化存储、缓存等问题。

云原生到底哪里好?

综合来说云原生可以打通微服务开发、测试、部署、发布的整个流程环节,在云原生架构下,底层的服务或者是 API 都由将部署到云中,等价于将繁重的运维工作转移给了云平台供应商, 但这也得益于云计算的基础设施更加廉价。详细来说一下个人认为的以下三个优势:



快速迭代利用云原生应用程序开发,使得交付团队可以使用重复的自动化和编排来快速迭代,让开发人员有更多的精力聚焦于业务开发上。


自动部署云原生方法远优于传统的面向虚拟化的业务流程,传统方法需要投入大量的精力来构建开发环境,以及软件交付过程中的其他不同环境。而云原生架构具备自动化和组合功能,并且依赖于可靠、经过验证和审核的已知良好流程的基础,交付十分敏捷,而不再需要人工干预重复执行。


独立高效云原生带来了微服务化架构,一个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发、甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。

总结

“未来的软件一定是生长于云上的”这是云原生理念的最核心假设。而所谓“云原生”,实际上就是在定义一条能够让应用最大程度利用云的能力、发挥云的价值的最佳路径。在这条路径上,脱离了“应用”这个载体,“云原生”就无从谈起;容器技术,则是将这个理念落地、将软件交付的革命持续进行下去的重要手段之一。


发布于: 刚刚阅读数: 6
用户头像

还未添加个人签名 2022-08-08 加入

还未添加个人简介

评论

发布
暂无评论
云原生之旅:一年的变革、成长与启示_熬夜磕代码、_InfoQ写作社区