编辑
2022-11-25
kubernetes
00
请注意,本文编写于 576 天前,最后修改于 566 天前,其中某些信息可能已经过时。

目录

Pod
Pod 与 Container 的不同
Pod 其它命令

Pod

如果在生产环境中运行的都是独立的单体服务,那么 Container (容器) 也就够用了,但是在实际的生产环境中,维护着大规模的集群和各种不同的服务,服务之间往往存在着各种各样的关系。而这些关系的处理,才是手动管理最困难的地方。

Pod 是我们将要创建的第一个 k8s 资源,也是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。在了解 podcontainer 的区别之前,我们可以先创建一个简单的 pod 试试,

我们先创建 nginx.yaml 文件,编写一个可以创建 nginx 的 Pod。

yaml
# nginx.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx

其中 kind 表示我们要创建的资源是 Pod 类型, metadata.name 表示要创建的 pod 的名字,这个名字需要是唯一的。 spec.containers 表示要运行的容器的名称和镜像名称。镜像默认来源 DockerHub

我们运行第一条 k8s 命令 kubectl apply -f nginx.yaml 命令来创建 nginx Pod。

接着通过 kubectl get pods 来查看 pod 是否正常启动。

最后通过 kubectl port-forward nginx-pod 4000:80 命令将 nginx 默认的 80 端口映射到本机的 4000 端口,打开浏览器或者 curl 来访问 http://127.0.0.1:4000 , 查看是否成功访问 nginx 默认页面!

shell
kubectl apply -f nginx.yaml # pod/nginx-pod created kubectl get pods # nginx-pod 1/1 Running 0 6s kubectl port-forward nginx-pod 4000:80 # Forwarding from 127.0.0.1:4000 -> 80 # Forwarding from [::1]:4000 -> 80

kubectl exec -it 可以用来进入 Pod 内容器的 Shell。通过命令下面的命令来配置 nginx 的首页内容。

shell
kubectl exec -it nginx-pod /bin/bash echo "hello kubernetes by nginx!" > /usr/share/nginx/html/index.html kubectl port-forward nginx-pod 4000:80

最后可以通过浏览器或者 curl 来访问 http://127.0.0.1:4000 , 查看是否成功启动 nginx 和返回字符串 hello kubernetes by nginx!

Pod 与 Container 的不同

回到 podcontainer 的区别,我们会发现刚刚创建出来的资源如下图所示,在最内层是我们的服务 nginx,运行在 container 容器当中, container (容器) 的本质是进程,而 pod 是管理这一组进程的资源。

nginx_pod

所以自然 pod 可以管理多个 container,在某些场景例如服务之间需要文件交换(日志收集),本地网络通信需求(使用 localhost 或者 Socket 文件进行本地通信),在这些场景中使用 pod 管理多个 container 就非常的推荐。而这,也是 k8s 如何处理服务之间复杂关系的第一个例子,如下图所示:

pod

Pod 其它命令

我们可以通过 logs 或者 logs -f 命令查看 pod 日志,可以通过 exec -it 进入 pod 或者调用容器命令,通过 delete pod 或者 delete -f nginx.yaml 的方式删除 pod 资源。这里可以看到 kubectl 所有命令

shell
kubectl logs --follow nginx                                kubectl exec nginx -- ls kubectl delete pod nginx # pod "nginx" deleted kubectl delete -f nginx.yaml # pod "nginx" deleted

最后,根据我们在 container 的那节构建的 hellok8s:v1 的镜像,同时参考 nginx pod 的资源定义,你能独自编写出 hellok8s:v1 Pod 的资源文件吗。并通过 port-forward 到本地的 3000 端口进行访问,最终得到字符串 [v1] Hello, Kubernetes!

hellok8s:v1 Pod 资源定义和相应的命令如下所示:

yaml
# hellok8s.yaml apiVersion: v1 kind: Pod metadata: name: hellok8s spec: containers: - name: hellok8s-container image: guangzhengli/hellok8s:v1
shell
kubectl apply -f hellok8s.yaml kubectl get pods kubectl port-forward hellok8s 3000:3000
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Joker

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!