赵走x博客
网站访问量:151785
首页
书籍
软件
工具
古诗词
搜索
登录
1-准备工作
2-Container
3-Pod
4-Deployment
5-Service
6-ingress
7-Namespace
8-Configmap
9-Secret
10-Job
11-CronJob
12-Helm
13-Dashboard
3-Pod
资源编号:570047
热度:168
## Pod 如果在生产环境中运行的都是独立的单体服务,那么 Container (容器) 也就够用了,但是在实际的生产环境中,维护着大规模的集群和各种不同的服务,服务之间往往存在着各种各样的关系。而这些关系的处理,才是手动管理最困难的地方。 **Pod** 是我们将要创建的第一个 k8s 资源,也是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。在了解 `pod` 和 `container` 的区别之前,我们可以先创建一个简单的 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 的不同 回到 `pod` 和 `container` 的区别,我们会发现刚刚创建出来的资源如下图所示,在最内层是我们的服务 `nginx`,运行在 `container` 容器当中, `container` (容器) 的本质是进程,而 `pod` 是管理这一组进程的资源。  所以自然 `pod` 可以管理多个 `container`,在某些场景例如服务之间需要文件交换(日志收集),本地网络通信需求(使用 localhost 或者 Socket 文件进行本地通信),在这些场景中使用 `pod` 管理多个 `container` 就非常的推荐。而这,也是 k8s 如何处理服务之间复杂关系的第一个例子,如下图所示:  ### Pod 其它命令 我们可以通过 `logs` 或者 `logs -f` 命令查看 pod 日志,可以通过 `exec -it` 进入 pod 或者调用容器命令,通过 `delete pod` 或者 `delete -f nginx.yaml` 的方式删除 pod 资源。这里可以看到 [kubectl 所有命令](https://kubernetes.io/docs/reference/kubectl/cheatsheet/)。 ```shell kubectl logs --follow nginx-pod kubectl exec nginx-pod -- ls kubectl delete pod nginx-pod # pod "nginx-pod" deleted kubectl delete -f nginx.yaml # pod "nginx-pod" 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 ```