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内可以有多个容器。

文章作者: emporer
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
kubernetes kubernetes pod
喜欢就支持一下吧