k8s入门知识之Pod

149 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

1、背景

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。

Kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。Kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的。

Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。

pod.png

2、操作

2.1、创建

# 命令格式: kubectl run (pod控制器名称) [参数] 
# --image 指定Pod的镜像 
# --port 指定端口 
# --namespace 指定namespace 
[root@master temp]# kubectl create deployment nginx --image=nginx:latest --port=80 --namespace dev deployment.apps/nginx created

2.2、查看

a.查看Pod基本信息

[root@master temp]# kubectl get pod -n dev 
NAME                    READY   STATUS    RESTARTS   AGE
nginx-8d545c96d-wnl8r   1/1     Running   0          4m8s

b.查看Pod详细信息

[root@master temp]# kubectl describe pod -n dev nginx-8d545c96d-wnl8r 
Name:         nginx-8d545c96d-wnl8r
Namespace:    dev
Priority:     0
Node:         node2/192.168.119.102
Start Time:   Wed, 13 Apr 2022 11:50:35 +0800
Labels:       app=nginx
              pod-template-hash=8d545c96d
Annotations:  <none>
Status:       Running
IP:           192.168.2.10
IPs:
  IP:           192.168.2.10
Controlled By:  ReplicaSet/nginx-8d545c96d
Containers:
  nginx:
    Container ID:   docker://3382ae08bb84cb0c856fab8878c71f1b4001204b90640513b2fde5f1bec2a572
    Image:          nginx:latest
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 13 Apr 2022 11:50:37 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wnjt8 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-wnjt8:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  4m30s  default-scheduler  Successfully assigned dev/nginx-8d545c96d-wnl8r to node2
  Normal  Pulling    4m28s  kubelet            Pulling image "nginx:latest"
  Normal  Pulled     4m28s  kubelet            Successfully pulled image "nginx:latest" in 716.697962ms
  Normal  Created    4m28s  kubelet            Created container nginx
  Normal  Started    4m28s  kubelet            Started container nginx

2.3、访问

a.获取Pod的IP信息

[root@master temp]# kubectl get pod -n dev -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
nginx-8d545c96d-wnl8r   1/1     Running   0          5m17s   192.168.2.10   node2   <none>           <none>

b.访问Pod链接

[root@master temp]# curl 192.168.2.8:80
<!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>

2.4、删除pod

a.删除指定pod

[root@master temp]# kubectl delete -n dev pods nginx-8d545c96d-wnl8r 
pod "nginx-8d545c96d-wnl8r" deleted

b.原pod被删除后再次查询,会发现系统又创建一个新的pod

NAME                    READY   STATUS    RESTARTS      AGE
nginx-8d545c96d-nrfnn   1/1     Running   1 (37h ago)   45h
# ~这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建
# ~此时要想删除Pod,必须删除Pod控制器

c.先来查询一下当前namespace下的Pod控制器(deployment)

[root@master ~]# kubectl get deploy -n dev 
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           45h

d.删除Pod控制器(deployment)

[root@master ~]# kubectl delete deploy nginx -n dev 
deployment.apps "nginx" deleted

e.再次查询,pod也被删除了

[root@master ~]# kubectl get deploy -n dev 
No resources found in dev namespace.
[root@master ~]# kubectl get pods -n dev 
No resources found in dev namespace.

2.5、配置

a.准备配置文件:pod-nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

b.启动文件

[root@master temp]# kubectl apply -f pod-nginx.yaml 
pod/nginx created
[root@master temp]# kubectl get pods -n dev 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          5m49s

3、总结

以上就是今天关于pod的介绍了,感觉学习k8s一定要实际操作,需要动手的地方太多了。路漫漫其修远兮,吾将上下而求索。吾辈继续加油,明天见!