k8s学习记录(二):Pod基础篇
一、前言
上一篇文章中,我们对于k8s有了初步的认识,学习了k8s的架构(Master-Worker),同时也简单的了解了k8s中比较重要的的几个组件,Pod、ReplicaSet、Deployment、Service等等(当然了还有更多的组件,后续会一一讲解)今天我们继续站在一个后端开发的角度去详细学习一下其中的Pod组件。本文先假定k8s已经安装完成(具体如何安装后续会有完整的篇幅讲解)
二、Pod
1、什么是Pod
Pod是k8s中资源分配的最小单位,k8s通过pod来运行容器,例如Pod里可以运行docker容器。一个Pod里可以运行一个或多个容器,容器之间相互共享资源包括但不限于内存、网络、CPU等等。
2、创建一个Pod
1、编写Yaml资源清单
我本地有一个Nginx的Docker 镜像,接下来的示例将用这个镜像来做实验。
我们先编写一份资源清单,完整的资源清单从github上可以查看https://github.com/kubernetes/examples/blob/master/guestbook/all-in-one/guestbook-all-in-one.yaml
apiVersion: v1 #api版本v1
kind: Pod #类型为Pod
metadata: #元数据
name: nginx #Pod的name为nginx
spec: #规约
containers: #容器集合(一个Pod里可以有多个Pod)
- name: nginx #名称 nginx
image: nginx:1.23.3 ##重要:镜像
imagePullPolicy: IfNotPresent #镜像拉取策略:如果不存在再拉取
ports:
- containerPort: 80 #端口 80,这里的端口并不会映射到物理机
如果不知道资源清单怎么填写,我们还可以使用k8s提供的命令行的工具来,例如我想知道 spec字段如何填写,我们就可以使用命令 kubectl explain pod.sepc,如下,那个字段不知道就直接查询。
2、基于资源清单创建Pod
编写好资源清单之后,我们使用kubectl apply -f <资源路径>,本案例就是:kubectl apply -f test_pod.yaml
然后我们查看k8s中的pod,kubectl get pods -o wide, 可以看到我们的Pod已经创建了。
k8s为我们创建了一个名为 Nginx的Pod,且分配了IP 10.244.0.52,当然了这个IP在外部是访问不通的,这个是k8s内部的IP,至于如何可以访问放到后面的文章中说明。现在想使用可以先进入当前容器使用命令:
kubect exec -it nginx --/bin/bash
curl 10.244.0.52
3、查看Pod描述
我们可以使用kubectl describe pods nginx来查看我们创建的pod的详细信息,这里看个大概就行,具体的信息用到的时候再查也是可以的。
4、编辑Pod
有时候我们需要编辑Pod,此时使用命令 kubectl edit pods nginx,例如我们想把版本换成1.23.4
5、查看Pod详情
使用Kubectl describe pod <pod_name>可以查看Pod事件,例如 Kubectl describe pod nginx
从图中我们可以看出镜像已经从1.23.3变更为1.23.4,同时还展示了pod的状态为Running,端口为80等信息,最下面的是Pod事件包含Pod是调度、Pod拉取镜像、创建容器、杀死Pod(因为我们编辑了镜像),接着拉取镜像,最后基于最新的镜像创建容器。
6、查看Pod日志
有时候我们需要查看Pod里的日志方便我们排查问题,此时可以用命令 Kubect logs <pod_name>,例如,kubect logs nginx,如下图
7、进入Pod
和我们使用Docker时一样,有时候我们需要进入Pod做一些操作,此时可以用命令 kubectl exec -it <pod_name> --/bin/bash ,例如kubectl exec -it nginx – /bin/bash 这样我们就进入容器内部了。
8、删除一个Pod
删除Pod使用到的命令为kubectl delete pod <pod_name> ,例如我要删除 nginx这个pod命令为,kubectl delete pod nginx
此时名为 nginx的pod已经不存在了(另外两个pod是之前做实验留下的,这里忽略)
三、小结
文章至此,我们对Pod有了更深入一些的了解,当然了这些都只是最基础的Pod操作,包括Pod的增删改查、pod日志查看、进入pod。接下来的文章会继续深入pod其他的一些知识,例如讲解标签、亲和性、容忍度等等。同时如何安装一个k8s集群也会有单独的篇章来讲述,希望对你有所帮助。