前言
在云原生领域,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
第三步,就可以启动各个组件了:
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都由将部署到云中,等价于将繁重的运维工作转移给了云平台供应商, 但这也得益于云计算的基础设施更加廉价。详细来说一下个人认为的以下三个优势:
快速迭代 利用云原生应用程序开发,使得交付团队可以使用重复的自动化和编排来快速迭代,让开发人员有更多的精力聚焦于业务开发上。
自动部署 云原生方法远优于传统的面向虚拟化的业务流程,传统方法需要投入大量的精力来构建开发环境,以及软件交付过程中的其他不同环境。而云原生架构具备自动化和组合功能,并且依赖于可靠、经过验证和审核的已知良好流程的基础,交付十分敏捷,而不再需要人工干预重复执行。
独立高效 云原生带来了微服务化架构,一个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发、甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。
“未来的软件一定是生长于云上的”这是云原生理念的最核心假设。而所谓“云原生”,实际上就是在定义一条能够让应用最大程度利用云的能力、发挥云的价值的最佳路径。在这条路径上,脱离了“应用”这个载体,“云原生”就无从谈起;容器技术,则是将这个理念落地、将软件交付的革命持续进行下去的重要手段之一。
infoq原文链接:https://xie.infoq.cn/article/193b213ed857301b141633c6f