目 录CONTENT

文章目录

Kubernetes-Pod

Administrator
2024-10-10 / 0 评论 / 0 点赞 / 3 阅读 / 10871 字

Kubernetes-Pod

概念

在k8s中我们不会直接操作容器,而是把容器包装成Pod在进行管理运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命令空间
、ip地址和端口,能够通过localhost进行通信。Pod是k8s进行创建、调度和管理的最小单位,他提供了比容器更高层次的抽象、使得部署和管理更加灵活。一个Pod可以包含一个容器或多个容器。

发布第一个容器化应用

1、有镜像
2、部署应用。
  --考虑做不做副本
    不做副本就是pod
    做副本以deployment/RC/DaemonSet方式去创建
  --做了副本访问还需要做一个service,使用访问。

创建Pod

参考文档

https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/

使用yaml方式创建

[root@kubernetes-master study]# cat pod-nginx.yaml 
---
apiVersion: v1          #api版本
kind: Pod           #创建的资源对象为pod
metadata:           #元数据
  name: my-nginx        #pod的名字
spec:             #属性
  containers:         #定义容器
    - name: my-nginx-web    #容器名
      image: daocloud.io/library/nginx    #镜像 我这里用的daocloud的镜像
      ports:          #端口
        - containerPort: 80     #容器暴漏端口

image-20231107111521934

查看Pod信息
# 查看pod信息
[root@kubernetes-master study]# kubectl  get pod 
NAME       READY   STATUS    RESTARTS   AGE
my-nginx   1/1     Running   0          4m5s

image-20231107112045840

# 查看详情pod信息
[root@kubernetes-master study]# kubectl  get pod  -o wide

image-20231107112222120

# 查看pod创建详细信息
[root@kubernetes-master study]# kubectl  describe  pod my-nginx 
Name:             my-nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             kubernetes-node1/10.10.10.22
Start Time:       Tue, 07 Nov 2023 11:18:45 +0800
Labels:           <none>
Annotations:      cni.projectcalico.org/containerID: 89f8c7ab53802b66299950e163f2c3258809dc0e238efc6ee7c02df2587df857
                  cni.projectcalico.org/podIP: 10.10.20.230/32
                  cni.projectcalico.org/podIPs: 10.10.20.230/32
Status:           Running
IP:               10.10.20.230
IPs:
  IP:  10.10.20.230
Containers:
  my-nginx-web:
    Container ID:   docker://c56dd1464b60fd9bd7e1545553461adf38a243800a01cad0c366fd25687eb5e4
    Image:          daocloud.io/library/nginx
    Image ID:       docker-pullable://daocloud.io/library/nginx@sha256:1a53eb723d17523512bd25c27299046cfa034cce309f4ed330c943a304513f59
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 07 Nov 2023 11:18:47 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tdpfn (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-tdpfn:
    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  4m48s  default-scheduler  Successfully assigned default/my-nginx to kubernetes-node1
  Normal  Pulling    4m47s  kubelet            Pulling image "daocloud.io/library/nginx"
  Normal  Pulled     4m46s  kubelet            Successfully pulled image "daocloud.io/library/nginx" in 529.869685ms (529.888256ms including waiting)
  Normal  Created    4m46s  kubelet            Created container my-nginx-web
  Normal  Started    4m46s  kubelet            Started container my-nginx-web
​

image-20231107112735671

image-20231107113106939

访问测试
# 访问podip
[root@kubernetes-master study]# curl 10.10.20.230

image-20231107113329212

进入pod
# 进入pod容器中
[root@kubernetes-master study]# kubectl  exec -it  my-nginx sh 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.

# 查看nginx默认发布目录下文件
# ls /usr/share/nginx/html/              
50x.html  index.html

删除pod
[root@kubernetes-master study]# kubectl  delete -f pod-nginx.yaml 
pod "my-nginx" deleted

使用命令方式生成yaml

# 生成yaml
kubectl run my-nginx-2 --image=daocloud.io/library/nginx --restart=Never --dry-run=client -o yaml > my-nginx-2.yaml

# 创建pod
[root@kubernetes-master study]# kubectl  apply -f pod-nginx-2.yaml 
pod/my-nginx-2 created

# 查看pod
[root@kubernetes-master study]# kubectl  get pod 
NAME         READY   STATUS    RESTARTS   AGE
my-nginx-2   1/1     Running   0          9s

# 查看详细信息
[root@kubernetes-master study]# kubectl  get pod  -o wide  
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE               NOMINATED NODE   READINESS GATES
my-nginx-2   1/1     Running   0          17s   10.10.20.232   kubernetes-node1   <none>           <none>

# 测试访问podip
[root@kubernetes-master study]# curl 10.10.20.232
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    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
[root@kubernetes-master study]# kubectl  delete  -f pod-nginx-2.yaml 
pod "my-nginx-2" deleted

Pod的状态详解

CrashLoopBackOff: 容器退出,kubelet正在将它重启
InvalidImageName: 无法解析镜像名称
ImageInspectError: 无法校验镜像
ErrImageNeverPull: 策略禁止拉取镜像
ImagePullBackOff: 正在重试拉取
RegistryUnavailable: 连接不到镜像中心
ErrImagePull: 通用的拉取镜像出错
CreateContainerConfigError: 不能创建kubelet使用的容器配置
CreateContainerError: 创建容器失败
m.internalLifecycle.PreStartContainer  执行hook报错
RunContainerError: 启动容器失败
PostStartHookError: 执行hook报错 
ContainersNotInitialized: 容器没有初始化完毕
ContainersNotReady: 容器没有准备完毕 
ContainerCreating:容器创建中
PodInitializing:pod 初始化中 
DockerDaemonNotReady:docker还没有完全启动
NetworkPluginNotReady: 网络插件还没有完全启动

0

评论区