在 K8S 中部署一个应用 上

2023-06-18  本文已影响0人  阿兵云原生

[图片上传失败...(image-b936d9-1687186002049)]

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

简单部署一个程序

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

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

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mykubia   1/1     Running   0          63s

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

[图片上传失败...(image-509771-1687186002049)]

在上命令中,解释一下:

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

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

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

pod 是什么

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

[图片上传失败...(image-80e8e8-1687186002049)]

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

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

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

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

[图片上传失败...(image-fc6a2c-1687186002049)]

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

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

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

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

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

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

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

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

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

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

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

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

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

[图片上传失败...(image-9ede2b-1687186002049)]

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

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

[图片上传失败...(image-a2f6c7-1687186002049)]

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

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

此处的 rc 是 ReplicationController 的缩写

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

查看服务

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

[图片上传失败...(image-4fab14-1687186002049)]

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

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

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

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

[图片上传失败...(image-e61226-1687186002049)]

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

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

欢迎点赞,关注,收藏

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

[图片上传失败...(image-686a05-1687186002049)]

好了,本次就到这里

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

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

上一篇 下一篇

猜你喜欢

热点阅读