【k8s 系列】k8s 学习七,在 K8S 中部署一个应用 上

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 本身在 K8S 中部署一个应用是需要写 yaml 文件的,我们这次简单部署,通过拉取网络上的镜像来部署应用,会用图解的方式来分享一下,过程中都发生了什么

「这是我参与11月更文挑战的第 22 天,活动详情查看:2021最后一次更文挑战

image.png

本身在 K8S 中部署一个应用是需要写 yaml 文件的,我们这次简单部署,通过拉取网络上的镜像来部署应用,会用图解的方式来分享一下,过程中都发生了什么

简单部署一个程序

我们可以通过 kubectl run 的方式来简单部署一个应用,现在我们先不关心里面的 yaml 结构和具体的配置,先运行起来,看看效果

kubectl run mykubia --image=luksa/kubia --port=9999 --generator=run/v1,执行该命令,就可以创建一个容器,并运行起来

shell

复制代码

$ kubectl get podsNAME      READY   STATUS    RESTARTS   AGEmykubia   1/1     Running   0          63s

可以看到 我们的 mykubia 应用已经运行起来的,我们可以通过命令 kubectl logs -f  mykubia  查看日志

image.png

在上命令中,解释一下:

  • --image=luksa/kubia

指定一个要运行的容器镜像

  • --port=9999

指的是我们指定服务运行的端口号是 9999

  • --generator=run/v1

加上这个标志指的是 让 k8s 集群创建一个 ReplicationController  ,而不是一个 Deployment

pod 是什么

在 K8S 中,一个 pod 是一组紧密相关的容器,它们总是运行在同一个工作节点上面,他们有着同样的 Linux 命名空间

image.png

每一个 pod 就像是一个独立的逻辑机器,他有这些资源:

  • 自己的 IP
  • 主机名
  • 进程
  • 能够运行一个独立的应用程序

这里面运行的应用程序可以是单进程的,运行在单个容器中,每一个进程都会在自己的容器运行

如上图,每一个 pod 都会有自己的 IP,一个 pod 会包含 1 个或者多个 容器,多个 pod 也会分布在不同的工作节点上面

从执行命令到容器运行背后都发生了哪些动作?

image.png

从程序员敲入命令到实际服务运行可以简单的分成 8 个步骤,如上图:

  • 1

构建镜像,必须先要把 镜像推送到 Docker Hub 上面,这一步是 执行 docker push luksa/kubia

  • 2

docker 服务器将镜像推送到 docker hub 中

  • 3

kubectl 收到指令,kubectl run mykubia --image=lukia/kubia --port=9999

  • 4

kubectl 想 REST API 服务器发送请求,请求调度

  • 5

主节点收到请求后,创建 Pod ,并调度到工作节点

  • 6

工作节点收到主节点的调度通知

  • 7

工作节点 使用 kubelet 指令告诉自己环境中 docker 要运行镜像了

  • 8

工作节点的 docker 于是就向 Docker Hub 拉取镜像,运行

最终,呈现出来的就是,我们通过指令 kubectl get pods 的时候,就可以看到我们的 pod 在运行了

外部如何访问 pod 中的服务?

我们如何在外部访问在 pod 运行中的服务呢?

我们可以通过指令:kubectl get pods -o wide 查看更多详细信息

image.png

虽然说每一个 pod 都有一个自己的 IP,但是这个 IP 只有在集群内部才可以访问的,在外部是没有办法访问的

我们在内部访问内部肯定是没有问题的

image.png

curl 一下 这个 ip 例如,curl 172.18.0.6:8080

要从外部访问内部的 pod 中的服务,我们可以创建一个特殊的 LoadBalancer 类型的服务(service)

创建一个服务对象

我们创建的这个服务对象,外部就可以访问到内部 pod 中的服务了

我们必须是要创建 LoadBalancer  类型的服务才可以,如果我们创建 ClusterIP 类型的服务也是不行的,

ClusterIP 类型的服务 是 K8S 内部默认的类型,默认只能在内部互相访问,外部是无法访问的

我们可以执行如下指令:

kubectl expose rc mykubia  --type=LoadBalancer --name kubia-http

  • rc mykubia

指的是要告诉 k8s 我们之前创建的 ReplicationController

此处的 rc 是  ReplicationController 的缩写

  • --type=LoadBalancer

执行类型为 LoadBalancer ,指定为 LoadBalancer 类型后,将会创建一个外部的负载均衡服务,外部可以通过这个服务的 ip 来访问到内部的 pod

查看服务

我们可以通过 kubectl get services 来查看服务列表

image.png

查看服务列表的时候,我们可以看到 EXTERNAL-IP 部分,刚开始是显示  ,不过不要着急,我们稍微等 1 分钟的样子, K8S 就会给我们分配好这个服务的 外部 IP 了

当有了明确的外部 IP, 那么外部就可以通过该 IP 来访问我们的内部服务了

当然,如果你现在在使用的还是 minikube ,也是可以这样来玩的

因为 minikube 上面是单节点集群的,我们可以敲入指令:minikube service kubia-http

image.png

就可以看到如上信息,我们就可以通过这个 ip 来访问这个服务了

今天就到这里,学习所得,若有偏差,还请斧正


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
300 0
|
5月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
6月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
597 33
|
6月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
341 19
|
6月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
7月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
295 12
|
6月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
143 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
7月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
114 1
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2690 0
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
154 9

推荐镜像

更多