K8s的Pod详解

k8s查看资源属性命令explain

[root@master ~]# kubectl explain pod`
[root@master ~]# kubectl explain pod.metadata

k8s资源各级属性

在这里插入图片描述

在这里插入图片描述

pod各属性详解

在一个pod中定义多个容器(不包括根容器)

[root@master ~]# vim pod_base.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  - name: busybox
    image: busybox:1.30
    
[root@master ~]# kubectl create -f pod_base.yaml
pod/pod-base created
[root@master ~]# kubectl get pods -n dev
NAME       READY   STATUS             RESTARTS   AGE
pod-base   1/2     CrashLoopBackOff   1          24s

pod的containers的镜像拉取策略

在这里插入图片描述

[root@master ~]# vim podimagepullpolicy.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-imagepullpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.3
    imagePullPolicy: Never
  - name: busybox
    image: busybox:1.30

[root@master ~]# kubectl create -f podimagepullpolicy.yaml
pod/pod-imagepullpolicy created
[root@master ~]# kubectl get pods -n dev
NAME                  READY   STATUS             RESTARTS   AGE
pod-imagepullpolicy   0/2     CrashLoopBackOff   1          11s

[root@master ~]# vim podimagepullpolicy.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-imagepullpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.3
    imagePullPolicy: IfNotPresent
  - name: busybox
    image: busybox:1.30
    
[root@master ~]# kubectl delete -f podimagepullpolicy.yaml
pod "pod-imagepullpolicy" deleted
[root@master ~]# kubectl create -f podimagepullpolicy.yaml
pod/pod-imagepullpolicy created
[root@master ~]# kubectl get pods -n dev
NAME                  READY   STATUS             RESTARTS   AGE
pod-imagepullpolicy   1/2     CrashLoopBackOff   1          26s

pod的containers属性command、args

在这里插入图片描述

[root@master ~]# vim pod-command.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-command
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;"]

[root@master ~]# kubectl create -f pod-command.yaml
pod/pod-command created
[root@master ~]# kubectl get pods -n dev
NAME          READY   STATUS    RESTARTS   AGE
pod-command   2/2     Running   0          12s
[root@master ~]# kubectl exec pod-command -n dev -it -c busybox /bin/sh
/ # tail -f /tmp/hello.txt
13:15:35
13:15:38
13:15:41

在这里插入图片描述

在这里插入图片描述

pod的containers属性ports

[root@master ~]# vim pod-ports.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-ports
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
      
[root@master ~]# kubectl create -f pod-ports.yaml
pod/pod-ports created
[root@master ~]# kubectl get pods pod-ports -n dev -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2023-02-13T13:51:21Z"
  name: pod-ports
  namespace: dev
  resourceVersion: "88905"
  selfLink: /api/v1/namespaces/dev/pods/pod-ports
  uid: 5a04086e-c5bc-4d72-9db4-bf730b7a9564
spec:
  containers:
  - image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 80
      name: nginx-port
      protocol: TCP
......

注:要访问pod中的程序需要使用的是podIP:containerPort

pod的containers属性resources

在这里插入图片描述
在这里插入图片描述

[root@master ~]# vim pod-resources.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-resources
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    resources:
      limits:   #资源上限
        cpu: "2"
        memory: "10Gi"
      requests: #资源下限
        cpu: "1"
        memory: "10Mi"
        
[root@master ~]# kubectl create -f pod-resources.yaml
pod/pod-resources created
[root@master ~]# kubectl get pods -n dev
NAME            READY   STATUS    RESTARTS   AGE
pod-ports       1/1     Running   0          22m
pod-resources   1/1     Running   0          19s
[root@master ~]# vim pod-resources.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-resources
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    resources:
      limits:   #资源上限
        cpu: "2"
        memory: "100Gi"
      requests: #资源下限
        cpu: "1"
        memory: "100Gi"

[root@master ~]# kubectl create -f pod-resources.yaml
pod/pod-resources created
[root@master ~]# kubectl get pods -n dev
NAME            READY   STATUS    RESTARTS   AGE
pod-ports       1/1     Running   0          25m
pod-resources   0/1     Pending   0          5s

pod生命周期

在这里插入图片描述
在这里插入图片描述

pod创建和终止

在这里插入图片描述
在这里插入图片描述

初始化容器

在这里插入图片描述

[root@master ~]# vim pod-initcontainer.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-initcontainer
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
  initContainers:
  - name: test-mysql
    image: busybox:1.30
    command: ['sh','-c','until ping 192.168.109.201 -c 1 ; do echo waiting for mysql...;sleep 2;done;']
  - name: test-redis
    image: busybox:1.30
    command: ['sh','-c','until ping 192.168.109.202 -c 1 ; do echo waiting for redis...;sleep 2;done;']

[root@master ~]# kubectl create -f pod-initcontainer.yaml
pod/pod-initcontainer created
[root@master ~]# kubectl get pods pod-initcontainer -n dev
NAME                READY   STATUS     RESTARTS   AGE
pod-initcontainer   0/1     Init:0/2   0          34s
[root@master ~]# ifconfig ens33:1 192.168.109.201 netmask 255.255.255.0 up
[root@master ~]# ifconfig ens33:2 192.168.109.202 netmask 255.255.255.0 up

钩子函数

在这里插入图片描述
在这里插入图片描述

[root@master ~]# vim pod-hook-exec.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-hook-exec
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
    lifecycle:
      postStart:
        exec: #在容器启动时执行一个命令,修改掉Nginx的默认首页内容
          command: ["/bin/sh","-c","echo postStart... > /usr/share/nginx/html/index.html"]

[root@master ~]# kubectl create -f pod-hook-exec.yaml
pod/pod-hook-exec created
[root@master ~]# kubectl get pods pod-hook-exec -n dev -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
pod-hook-exec   1/1     Running   0          39s   10.244.1.34   node2   <none>           <none>
[root@master ~]# curl 10.244.1.34:80
postStart...

容器探测

在这里插入图片描述
在这里插入图片描述

[root@master ~]# vim pod-liveness-exec.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-exec
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
    livenessProbe:
      exec:
        command: ["/bin/cat","/tmp/hello.txt"]

[root@master ~]# kubectl create -f pod-liveness-exec.yaml
pod/pod-liveness-exec created
[root@master ~]# kubectl get pods -n dev
NAME                READY   STATUS    RESTARTS   AGE
pod-liveness-exec   1/1     Running   6          4m5s

在这里插入图片描述

在这里插入图片描述

[root@master ~]# vim pod-liveness-tcpsocket.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-tcpsocket
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
    livenessProbe:
      tcpSocket:
        port: 8080      #尝试访问8080端口

[root@master ~]# kubectl create -f pod-liveness-tcpsocket.yaml
pod/pod-liveness-tcpsocket created
[root@master ~]# kubectl get pods pod-liveness-tcpsocket -n dev
NAME                     READY   STATUS    RESTARTS   AGE
pod-liveness-tcpsocket   1/1     Running   1          39s

在这里插入图片描述
在这里插入图片描述

[root@master ~]# vim pod-liveness-httpget.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-exec
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /hello
        port: 80
        host: 127.0.0.1
        scheme: HTTP

[root@master ~]# kubectl create -f pod-liveness-httpget.yaml
pod/pod-liveness-httpget created
[root@master ~]# kubectl get pods pod-liveness-httpget -n dev
NAME                   READY   STATUS    RESTARTS   AGE
pod-liveness-httpget   1/1     Running   1          28s

在这里插入图片描述
在这里插入图片描述

pod重启策略

在这里插入图片描述

[root@master ~]# vim pod-restartpolicy.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-restartpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80         #容器要监听的端口
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /hello
        port: 80
        host: 127.0.0.1
        scheme: HTTP
  restartPolicy: Never

[root@master ~]# kubectl create -f pod-restartpolicy.yaml
pod/pod-restartpolicy created
[root@master ~]# kubectl get pods pod-restartpolicy -n dev
NAME                READY   STATUS    RESTARTS   AGE
pod-restartpolicy   1/1     Running   0          19s
[root@master ~]# kubectl describe pods pod-restartpolicy -n dev

在这里插入图片描述

pod调度

在这里插入图片描述

定向调度

在这里插入图片描述

[root@master ~]# vim pod-nodename.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-restartpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeName: node1
[root@master ~]# kubectl create -f pod-nodename.yaml
pod/pod-nodename created
[root@master ~]# kubectl get pods pod-nodename -n dev -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
pod-nodename   1/1     Running   0          37s   10.244.2.19   node1   <none>           <none>
[root@master ~]# kubectl delete -f pod-nodename.yaml
pod "pod-nodename" deleted
[root@master ~]# vim pod-nodename.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-pod-nodename
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeName: node3
  
[root@master ~]# kubectl create -f pod-nodename.yaml
pod/pod-nodename created
[root@master ~]# kubectl get pods pod-nodename -n dev -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP       NODE    NOMINATED NODE   READINESS GATES
pod-nodename   0/1     Pending   0          4s    <none>   node3   <none>           <none>

在这里插入图片描述

[root@master ~]# kubectl label nodes node1 nodeenv=pro
node/node1 labeled
[root@master ~]# kubectl label nodes node2 nodeenv=test
node/node2 labeled
[root@master ~]# vim pod-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeselector
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeSelector:
    nodeenv: pro
  
[root@master ~]# kubectl create -f pod-nodeselector.yaml
pod/pod-nodeselector created
[root@master ~]# kubectl get pods pod-nodeselector -n dev -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
pod-nodeselector   1/1     Running   0          40s   10.244.2.20   node1   <none>           <none>
亲和性调度

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@master ~]# vim pod-nodeaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          matchExpressions:
          - key: nodeenv
            operator: In
            values: ["xxx","yyy"]

[root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml
pod/pod-nodeaffinity-required created
[root@master ~]# kubectl get pods pod-nodeaffinity-required -n dev
NAME                        READY   STATUS    RESTARTS   AGE
pod-nodeaffinity-required   0/1     Pending   0          36s
[root@master ~]# kubectl delete -f pod-nodeaffinity-required.yaml
pod "pod-nodeaffinity-required" deleted
[root@master ~]# vim pod-nodeaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          matchExpressions:
          - key: nodeenv
            operator: In
            values: ["pro","yyy"]

[root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml
pod/pod-nodeaffinity-required created
[root@master ~]# kubectl get pods pod-nodeaffinity-required -n dev
NAME                        READY   STATUS    RESTARTS   AGE
pod-nodeaffinity-required   1/1     Running   0          7s
[root@master ~]# vim pod-nodeaffinity-preferred.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-preferred
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: nodeenv
            operator: In
            values: ["xxx","yyy"]

[root@master ~]# kubectl create -f pod-nodeaffinity-preferred.yaml
pod/pod-nodeaffinity-preferred created
[root@master ~]# kubectl get pods pod-nodeaffinity-preferred -n dev
NAME                         READY   STATUS    RESTARTS   AGE
pod-nodeaffinity-preferred   1/1     Running   0          20s

在这里插入图片描述

[root@master ~]# vim pod-podaffinity-target.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-podaffinity-target
  namespace: dev
  labels:
    podenv: pro
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeName: node1

[root@master ~]# kubectl create -f pod-podaffinity-target.yaml
pod/pod-podaffinity-target created
[root@master ~]# vim pod-podaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-podaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: podenv
            operator: In
            values: ["xxx","yyy"]
        topologyKey: kubenetes.io/hostname	#作用域
        
[root@master ~]# kubectl create -f pod-podaffinity-required.yaml
pod/pod-podaffinity-required created
[root@master ~]# kubectl get pods pod-podaffinity-required -n dev -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
pod-podaffinity-required   0/1     Pending   0          5s    <none>   <none>   <none>           <none>

[root@master ~]# vim pod-podantiaffinity-required.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-podantiaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: podenv
            operator: In
            values: ["pro"]
        topologyKey: kubenetes.io/hostname      #作用域

[root@master ~]# kubectl create -f pod-podantiaffinity-required.yaml
pod/pod-podantiaffinity-required created
[root@master ~]# kubectl get pods pod-podantiaffinity-required -n dev -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
pod-podantiaffinity-required   1/1     Running   0          19s   10.244.1.44   node2           <none>           <none>

污点和容忍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   Ready      master   7d1h   v1.17.4
node1    Ready      <none>   7d1h   v1.17.4
node2    NotReady   <none>   7d1h   v1.17.4
[root@master ~]# kubectl taint nodes node1 tag=heima:PreferNoSchedule
node/node1 tainted
[root@master ~]# kubectl run taint1 --image=nginx:1.17.1 -n dev
deployment.apps/taint1 created
[root@master ~]# kubectl get pods -n dev -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
taint1-766c47bf55-xxbf4   1/1     Running   0          11s   10.244.2.28   node        1   <none>           <none>
[root@master ~]# kubectl taint nodes node1 tag:PreferNoSchedule-
node/node1 untainted
[root@master ~]# kubectl taint nodes node1 tag=heima:NoSchedule
node/node1 tainted
[root@master ~]# kubectl run taint2 --image=nginx:1.17.1 -n dev
deployment.apps/taint2 created
[root@master ~]# kubectl get pods -n dev -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
taint1-766c47bf55-xxbf4   1/1     Running   0          2m36s   10.244.2.28   node1    <none>           <none>
taint2-84946958cf-lz9ld   0/1     Pending   0          8s      <none>        <none>   <none>           <none>
[root@master ~]# kubectl taint nodes node1 tag:NoSchedule-
node/node1 untainted
[root@master ~]# kubectl taint nodes node1 tag=heima:NoExecute
node/node1 tainted
[root@master ~]# kubectl get pods -n dev -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
taint1-766c47bf55-kw8w8   0/1     Pending   0          10s   <none>   <none>   <none>           <none>
taint2-84946958cf-g2wzn   0/1     Pending   0          10s   <none>   <none>   <none>           <none>

在这里插入图片描述
在这里插入图片描述

[root@master ~]# kubectl get pods -n dev
NAME                      READY   STATUS    RESTARTS   AGE
taint1-766c47bf55-kw8w8   0/1     Pending   0          13m
taint2-84946958cf-g2wzn   0/1     Pending   0          13m
[root@master ~]# vim pod-toleration.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-toleration
  namespace: dev
  labels:
    podenv: pro
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  tolerations:
  - key: "tag"
    operator: "Equal"
    value: "heima"
    effect: "NoExecute"

[root@master ~]# kubectl create -f pod-toleration.yaml
pod/pod-toleration created
[root@master ~]# kubectl get pods -n dev
NAME                      READY   STATUS    RESTARTS   AGE
pod-toleration            1/1     Running   0          5s
taint1-766c47bf55-kw8w8   0/1     Pending   0          16m
taint2-84946958cf-g2wzn   0/1     Pending   0          16m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值