云原生之旅:一年的变革、成长与启示|社区征文

2023总结

前言

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

Kubernetes学习总结和趋势预测

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

picture.image

学习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可以提供的;首当其冲的收益者就是边缘计算最重要的领域 —— 物联网。

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

picture.image 依赖安装:

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

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

etcd
cd 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都由将部署到云中,等价于将繁重的运维工作转移给了云平台供应商, 但这也得益于云计算的基础设施更加廉价。详细来说一下个人认为的以下三个优势:

picture.image

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

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

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

总结

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

infoq原文链接:https://xie.infoq.cn/article/193b213ed857301b141633c6f

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论