kubernetes-pod
pod)
在k8s管理的最小单位,一个pod可以有多个container容器。一个pod要是running状态正常状态,必须保证所有的主容器为running状态(由docker images 运行的runtime 时,一个container一个容器,一个pod只有一个ip地址。)pod本身不具有高可用,只有资源调度器 例:(deployment,seatefullset daemonset)。pod 才有高可用性.,单机死机,重新启动,前部署的pod会丢失。
例:
kubectl run --image=nginx --namespace=default --restart=Always --image-pull-policy=IfNotPresent nginx
pod/nginx created
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 4s
[root@master01 ~]# kubectl run --image=nginx --namespace=default --restart=Always --image-pull-policy=IfNotPresent nginx --dry-run=client -o yaml >pod1.yaml
[root@master01 ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx 0m 3Mi
[root@master01 ~]# vim pod1.yaml
[root@master01 ~]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
namespace: default
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
pod 主容器
一个pod中可以有多个主容器,所有主容器为running状态,则pod为running,
pod中的container 运行有序的,上下关联的容器需按照顺序运行。
(容器生命周期 docker容器中必须有一个进程为running,即在本机产生一个进程 )
[root@master01 ~]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: multipod
name: multi
namespace: default
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
- image: redis
imagePullPolicy: IfNotPresent
name: db
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
[root@master01 ~]# kubectl create -f pod1.yaml
pod/multi created
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
multi 2/2 Running 0 3s
nginx 1/1 Running 0 4m59s
[root@master01 ~]#
初始化容器
初始化容器在主容器运行之前运行,可一个或多个初始化容器,
初始化容器为complete 状态,为完成状态,所有初始化容器需为complete状态才运行主容器。
[root@master01 ~]# kubectl apply -f pod1.yaml
pod/init created
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
init 0/2 Init:0/1 0 6s
multi 2/2 Running 0 8m40s
nginx 1/1 Running 0 13m
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
init 2/2 Running 0 83s
multi 2/2 Running 0 9m57s
nginx 1/1 Running 0 14m
[root@master01 ~]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: initpod
name: init
namespace: default
spec:
initContainers:
- image: busybox
imagePullPolicy: IfNotPresent
command: ['sh','-c','sleep 30']
name: bz
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
- image: redis
imagePullPolicy: IfNotPresent
name: db
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
[root@master01 ~]# imagePullPolicy: IfNotPresent
静态pod,由kubelet服务管理的。配置文件在/etc/kubernetes/manifests/下
k8s 核心组件都有kubelet管理。
pod 无高可用。正常运行的pod.如pod运行的node断电或关机。pod会退出并删除。node开机。pod会消失。
pod 无手动重启停止概念,只有删除重建。
pod属k8s管理,pod出错时,为k8s使其不断重启,可配置重启策略。
静态pod为kubelet管理, etcd ,apiserver,controller-manager,scheduler
k8s-proxy 由k8s管理不由kubelet
pod中的container 日志查看:kubectl logs podname -c containername
[root@master01 ~]# cat staticpod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: static
name: staticpod
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web1
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
[root@master01 ~]# cp staticpod.yaml /etc/kubernetes/manifests/
[root@master01 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
init 2/2 Running 0 7m57s 10.244.140.92 node02 <none> <none>
multi 2/2 Running 0 16m 10.244.196.154 node01 <none> <none>
nginx 1/1 Running 0 21m 10.244.140.90 node02 <none> <none>
staticpod-master01 1/1 Running 0 62s 10.244.241.65 master01 <none> <none>
[root@master01 ~]# curl 10.244.241.65
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
如何进入pod中的容器:
kubectl exec podname -c containername – /bin/bash
需要看container的shell环境(docker inspect )。默认进入第一个主容器。-c 指定容器名。一个pod内可以有多个容器。