您现在的位置是:亿华云 > 系统运维
从Go程序第一行代码,到在 K8s 上运行,要经历多少步?
亿华云2025-10-03 06:28:16【系统运维】7人已围观
简介大家好,我是网管。咱们的 K8s 入门和实践,在经历了三篇理论知识的后,相信各位都已经期待许久可能的吧),就差私信我:“你整着理论整半天有啥用,本大人写的程序怎么能放到 K8s 上运行”。别急,今天这
大家好,从Go程我是序第行代行经网管。咱们的上运少步 K8s 入门和实践,在经历了三篇理论知识的历多后,相信各位都已经期待许久(可能的从Go程吧),就差私信我:“你整着理论整半天有啥用,序第行代行经本大人写的上运少步程序怎么能放到 K8s 上运行”。
别急,历多今天这篇文章就带你从写第一行代码开始,从Go程一步步教你把程序放到 K8s 跑起来。序第行代行经这次咱们先用 Go 做个例子,上运少步后面再写一篇怎么把 Spring Boot 应用放到 K8s 上运行。历多
本文的从Go程重点,不在于那种语言写的序第行代行经程序,而是上运少步先学会应用 上到 K8s 的步骤,所以编程部分的演示非常简单,恨不能写一行代码就带你进入后面的 K8s 部署环节,不过要部署咱们得先有个环境,这里不需要你有啥云服务器,电脑上安装就行了。
K8s 本机环境安装
在个人电脑上安装 K8s 可选的软件,主要有这么几种:
minikube。云服务器Kind。Docker 桌面应用自带的 K8s 集群。其中 minikube、DockerDesktop 内嵌K8s 这两种,咱们之前都写文章介绍过,不过两年过去了,我不再推荐各位安装 minikube,原因很简单我的 2021款 "诶嘛姨麦克斯,迈步可”都扛不住他造。还是用后两者吧,如果图省事Docker桌面应用自带的 K8s 集群完全就够用。
一个 Go 应用,想在 K8s 上运行
怎么把一个 Go 开发的 Web 应用部署到 K8s 集群上运行,有哪几个步骤要完成的呢,这里我们先归纳一下,后面依次对每一步进行演示。
因为 K8s 是基于容器技术的分布式架构方案,所以首先我们需要把要部署的应用程序打包到容器镜像里,当然,在那之前我们得先写好应用代码。
这里会把我们上面理论部分的知识点再串一遍,主要有这么几个步骤:
把 Web 程序打包成容器镜像使用上一步打包的镜像,服务器托管创建应用的Pod用 Deployment 调度应用使用 Service 暴露应用通过 Ingress 代理应用好了,这五步大家一定要记住,下面我们逐一展开,详细说说。
把 Web 程序打包成容器镜像首先看下面这个简单的程序;
Go HTTP Server
这里是用 Go 程序起了一个特别简单的 HTTP Server,访问 "/" 路径后向页面上打印一行文字,告诉访问者他正在访问的网页的主机地址。
下面是打包镜像用的 Dockerfile
打包 Go 应用镜像的 Dockerfile
接下来,我们使用下面的命令打包应用镜像:
docker build -t registry.cn-hangzhou.aliyuncs.com/docker-study-lab/simple-app-go:v0.2 .打包好后,就是上传啦,这样各位就能用啦。
docker push registry.cn-hangzhou.aliyuncs.com/docker-study-lab/simple-app-go:v0.2这个镜像仓库是阿里云上的,不知道哪位好心人创建的,貌似谁都可以传,不过前提是你得在阿里云上开个镜像云的账号,然后用 docker login 命令配置下自己的客户端。站群服务器
配置 Pod 和 Deployment还记得我在上面文章 -- K8s 面向对象里说过
Deployment 是一个复合型的控制器,它包装了一个叫做 ReplicaSet -- 副本集的控制器。ReplicaSet 管理正在运行的Pod数量,Deployment 在其之上实现 Pod 滚动更新,对Pod的运行状况进行健康检查以及回滚更新的能力
所以,这里我们直接把步骤2、3合起来一起说。其实也没啥好说的,直接上-- Deployment 的 YAML 配置
Deployment 对象声明文件
拿到这个配置后,直接用 kubectl -f xxx.yaml 命令把 Deployment 提交给 K8s集群,让它帮助我们创建好,Deployment、ReplicaSet、Pod 这些对象就好。
这里我们只是使用了 Deployment 最基本的功能,想了解更多关于滚动更新配置和健康检查等进阶功能的。
用 Service 暴露服务创建好上面这几个对象后,我们的应用只能在 K8s 集群的内部使用,想能从外部访问就得把应用暴露出来,这个时候就需要 Service 这个对象了。Service 对象具体的概念解释,咱们还是看上一篇文章,这里不再赘述了。
下面是一个 NodePort 型的 Service,它把咱们的服务暴露在 30088 这个端口。
Service 对象声明
这样在电脑上通过 127.0.0.1:30088 就能访问到我们的服务啦。
用 Ingress 代理服务Node Port 类型的 Service 对象的缺点,咱们上一篇文章提到过,所以实际操作的时候,咱们可以把上面那个例子里的 type 字段去掉,创建一个默认的只能在集群内使用的 ClusterIp类型的 Service 对象,再用 Ingress 代理 Service,完成服务的向外暴露,这样更优雅也更好管理一些。
使用 Ingress 前需要先安装 Ingress Controller ,这里我们使用开源的 Ingress-Nginx
安装参考这个,非常简单 :https://kubernetes.github.io/ingress-nginx/deploy/然后就是声明代理我们的 Go Web 应用的 Ingress 对象。
Ingress YAML
通过 kubctl apply -f 命令把它提交给 K8s 集群,创建 Ingress 对象。
Ingress 对象创建好后,我们就能通过 app.example.com 访问咱们的服务啦,当然前提是在电脑上配置一下咱们的 hosts 文件,添加一下这个域名到127.0.0.1 的绑定。
总结
这里总结了一下 K8s 常用的入门知识以及相关的实践操作,只能算是一个非常初级的入门,还有其他很多非常高级的特性能让我们控制 K8s 对应用的各种调度动作。
很赞哦!(27917)
相关文章
- 亚马逊推出新 AI 量子芯片 Trainium2 及 Graviton4 处理器,以应对微软竞争
- 2、根据用户基础选择访问提供程序。由于互联问题的存在,接入商的选择也非常重要,如果用户群主要在联通,尽量选择联通接入较好的接入商,如果用户群主要在电信,那么选择电信接入较好的接入商。如果用户组位于国家/地区,则选择更好的访问提供程序进行交互。
- 公司和个人选域名方法一样吗?有什么不同?
- tk域名是什么域名?新手对tk域名有什么看法?
- 戴尔科技存储产品持续创新 被评为企业级Kubernetes数据存储领导者
- 4、club娱乐
- 为什么现在中文域名觉得好?使用中文域名有什么好处?
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 五大边缘数据中心趋势
- 5、使用企业名称的英文名称作为域名也是国内许多企业选择域名的一种方式,特别适合一些与计算机、网络和通信相关的行业。