k8s常用资源之pod资源(三)
k8s常用资源
1.k8s资源常见操作
创建一个资源
kubectl create -f xxx.yaml
查看一个资源
kubectl get pod | rc
查看一个资源的详细过程
kubectl describe pos pod_name
删除一个资源
kubectl delete pod pod_name
kubectl delete -f xxx.yaml
编辑一个资源的配置文件
kubectl edit pod pod_name
2.pod资源
2.1.pod简介
pod是kubernetes的基本操作单元,也是应用运行的载体,整个kubernetes系统都是围绕pod展开的,比如如何部署运行pod、如何保证pod的、如何访问pod等,另外pod是一个或多个机关容器的集合,这可以说是一大创新点,提供了一种容器组合的模型。
pod和容器共享一个网络地址,先来先得端口占用。
pod和nginx为什么不用单独的地址,这是因为k8s有很多功能比如自愈、自动负载均衡,单独一个容器肯定无法实现这种功能,然后pod资源就有这个功能,因此用来和容器共享网络的方式来实现k8s的高级功能
一个pod可以与4个容器共享网络
每当运行一个pod,都会有两个容器产生,一个是pod容器一个是自己服务的容器
2.2.pod基本操作
操作 | 命令 |
---|---|
创建 | kubectl create -f k8s_pod.yml |
查询 | kubectl get pod pod_name kubectl describe pod pod_name |
删除 | kubectl delete pod pod_name |
更新 | kubectl replace xxx.yml |
2.3.运行一个pod
1)准备pod的yml文件
[root@k8s-master k8s]# vim k8s_pod.yml
apiVersion: v1 //定义api的版本
kind: Pod //资源类型,这里是pod
metadata: //元数据,也就是属性,给pod的属性
name: nginx //pod的名称是nginx
labels: //描述
app: web //键值表示时什么类型的
spec: //详细属性
containers: //容器
- name: nginx //容器的名称
image: 192.168.81.240/k8s/nginx:1.15 //容器的镜像地址,这里从harbor下载
ports: //端口
- containerPort: 80 //映射成本机80端口
2)创建一个pod资源
创建一个pod
[root@k8s-master k8s]# kubectl create -f k8s_pod.yml
pod "nginx" created
查看pod
[root@k8s-master k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 15s
containercreating状态表示正在创建容器
查看pod的详细启动过程
[root@k8s-master k8s]# kubectl describe pod nginx
3)删除一个pod
[root@k8s-master k8s]# kubectl delete pod nginx
pod "nginx" deleted
在创建一个会发现这次调度到了node1上,如果配置一样每个节点都会轮着来创建容器
4)查看容器的ip地址
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 1h 172.16.46.2 192.168.81.220
5)报错排查
42s 1s 3 {kubelet 192.168.81.230} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
这个报错是指在redhat官网pull镜像的时候pull不下来导致
可以将pod这个容器放到harbor中再使用私有仓库的地址去下载
配置
1)修改kubelet配置文件
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.81.240/k8s/pod-infrastructure:latest"
2)重启kubelet
[root@k8s-node2 ~]# systemctl restart kubelet
3)再执行kubectl describe pod nginx来查看pod的启动过程
会发现pod已经起来
2.4.pod和容器的关系
在docker中,容器是最小的处理单元,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux namespace实现的,而在kubernetes中,pod包含一个或多个相关的容器,pod可以认为是容器的一种延伸扩展,一个pod是一个隔离体,而pod内部包含的一组容器又是共享的(包括pid、network、ipc、uts),除此之外,pod中的容器可以访问共同的数据卷来实现文件系统的共享。
一个pod单元最多支持4个容器的共享,也就是说在yml中最多一组只能写4个容器,容器启动后就是一个pod容器4个业务容器
每当运行一个容器,k8s都会启动一个pod,pod和容器共享网络、进程,从而实现k8s的高级功能
pod资源至少由两个容器组成:pod资源容器和业务容器
证实运行一个容器就会启动一个pod
[root@k8s-master k8s]# vim k8s_pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx1 //将pod的名称进行更换,创建多个pod
labels:
app: web
spec:
containers:
- name: nginx
image: 192.168.81.240/k8s/nginx:1.15
ports:
- containerPort: 80
[root@k8s-master k8s]# kubectl create -f k8s_pod.yml
[root@k8s-master k8s]# kubectl describe pod nginx1
[root@k8s-master k8s]# kubectl create -f k8s_pod.yml
[root@k8s-master k8s]# kubectl describe pod nginx2
[root@k8s-master k8s]# kubectl create -f k8s_pod.yml
[root@k8s-master k8s]# kubectl describe pod nginx3
去node1上验证
[root@k8s-node1 ~]# docker ps -a | grep 'pod'
2.5.一个pod资源多个业务容器
[root@k8s-master k8s]# vim k8s_pod2.yml
apiVersion: v1
kind: Pod
metadata:
name: test
labels:
app: web
spec:
containers:
- name: nginx
image: 192.168.81.240/k8s/nginx:1.15
ports:
- containerPort: 80
- name: busybox
image: 192.168.81.240/k8s/busybox:latest
command: ["sleep","1000"]
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx2 1/1 Running 0 2d 172.16.77.2 192.168.81.230
test 2/2 Running 0 1m 172.16.46.2 192.168.81.220
[root@k8s-node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7a53e20df02 192.168.81.240/k8s/busybox:latest "sleep 1000" 2 minutes ago Up 2 minutes k8s_busybox.5ce5e697_test_default_6abaed19-c90e-11ea-8389-000c295583b7_edb92cf3
6ded5dbc0a27 192.168.81.240/k8s/nginx:1.15 "nginx -g 'daemon off" 2 minutes ago Up 2 minutes k8s_nginx.773504ef_test_default_6abaed19-c90e-11ea-8389-000c295583b7_a7e87782
4b579810e7a3 192.168.81.240/k8s/pod-infrastructure:latest "/pod" 2 minutes ago Up 2 minutes k8s_POD.ec79030d_test_default_6abaed19-c90e-11ea-8389-000c295583b7_eae7a601
bb58e6e9e16a docker.io/busybox
会看到有一个pod两个业务容器
目录 返回
首页