k8s查看资源属性命令explain

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

k8s资源各级属性

命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux

命令如何查看pod 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_02

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的镜像拉取策略

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_03

命令如何查看pod 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_04

[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

命令如何查看pod 和容器的关联 查看pod中有哪些容器_Pod_05

[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 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_06

命令如何查看pod 和容器的关联 查看pod中有哪些容器_kubernetes_07

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

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_08


命令如何查看pod 和容器的关联 查看pod中有哪些容器_kubernetes_09

[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 和容器的关联 查看pod中有哪些容器_Pod_10


命令如何查看pod 和容器的关联 查看pod中有哪些容器_kubernetes_11

pod创建和终止

命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux_12


命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux_13

初始化容器

命令如何查看pod 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_14

[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

钩子函数

命令如何查看pod 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_15


命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_16

[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...

容器探测

命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux_17


命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_18

[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

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_19

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_20

[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

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_21


命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_22

[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 和容器的关联 查看pod中有哪些容器_nginx_23


命令如何查看pod 和容器的关联 查看pod中有哪些容器_Pod_24

pod重启策略

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_25

[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 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_26

pod调度

命令如何查看pod 和容器的关联 查看pod中有哪些容器_Pod_27

定向调度

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_28

[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>

命令如何查看pod 和容器的关联 查看pod中有哪些容器_命令如何查看pod 和容器的关联_29

[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>
亲和性调度

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_30

命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux_31

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_32

[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

命令如何查看pod 和容器的关联 查看pod中有哪些容器_linux_33

[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>

污点和容忍

命令如何查看pod 和容器的关联 查看pod中有哪些容器_Pod_34


命令如何查看pod 和容器的关联 查看pod中有哪些容器_Pod_35


命令如何查看pod 和容器的关联 查看pod中有哪些容器_kubernetes_36

[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>

命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_37


命令如何查看pod 和容器的关联 查看pod中有哪些容器_nginx_38

[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