k8s-pod

Pod

k8s集群中部署的最小单元。Pod最主要的功能管理是将一个业务或者一个调用链的所有服务(容器)

pod生命周期

主容器作用:
1.提供pod中基础网络(基础命名空间)
2.提供共享储存
3.监控业务容器
pod生命周期:
1.创建pod
2.创建主容器
3.依次创建业务容器
4.执行回调钩子
5.进行探测(监控容器是否活着,和监控是否能被外网访问,容器挂了会自动创建新的)
6.执行结束回调钩子
7.终止容器


test.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
        - name: redis
          image: redis

查看创建流程

kubectl describe pod test-6799fc88d8-42gkv

k8s配置清单

apiVersion :指定k8s部署的api版本号
kind : 指定资源类型(pod)
metadata : 记录部署应用的基础信息
spec : 指定部署详情
status    # 部署状态(),不可编辑

# k8s部署一个yaml的应用:kubectl apply -f [配置清单]


string : 跟字符串
Object : key:value
[]Object : 
	- name:value

pod清单初体验

# kubectl explain Pod
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: nginx
      image: nginx
    - name: tomcat
      image: tomcat

容器状态

Pending:挂起
Running:运行中
compland:成功,pod中所有容器都成功终止并且不会被重启
Failed:失败,至少有一个容器失败终止,即容器以非0状态推出或者被系统禁止
Unknown:未知,aip server无法正常回去到pod对象状态信息,通常由于无法与所在工作节点的kubelet通信所致
ImgPullErr : 镜像拉取失败
ContainerCreating : 容器创建中

Pod重启策略

当某个容器异常退出或者健康检查失败, kubelet将根据RestartPolicy的设置来进行相应的操作, 重启策略有Always , OnFailure, Never
1.Always: 当容器失效时, 由kubelet自动重启该容器
2.OnFailure: 当容器终止运行且退出码不为0时, 由kubelet自动重启该容器
3.Never: 不论容器运行状态如何, kubelet都不会重启该容器

kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算, 例如1丶2丶4丶8倍等, 最长延时5min, 并且在重启后的10min后重置该时间
pod的重启策略与控制方式息息相关
1.RC和DeamonSet必须设置为Always,需要保证该容器持续运行
2.Job: OnFailure或Never, 确保容器执行完成后不再重启
3.kubelet:在pod失效时自动重启它,不论将restartPolicy设置什么值,也不会对pod进行健康检查

# 查看pod文件,restartPolicy值默认Always
kubectl edit pod test-6799fc88d8-42gkv 

[root@sg-14 k8s_yaml]# kubectl get pod -o json |grep restartPolicy

Pod删除

kubectl delete pod test-tag

删除master的pod之后,容器不会自动下载重启

Pod指定部署在某一台机器

[root@sg-14 ~]# kubectl get nodes  ## 查看机器名字
nodeName: XXX机器名字


apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeName: sg-15
      containers:
        - name: nginx
          image: nginx

pod配置清单详解

apiVersion: v1 # 必选,API的版本号
kind: Pod    # 必选,类型Pod
metadata:    # 必选,元数据
  name: nginx    # 必选,符合RFC 1035规范的Pod名称
  namespace: web-testing # 可选,不指定默认为default,Pod所在的命名空间
  labels:    # 可选,标签选择器,一般用于Selector
    - app: nginx
  annotations:    # 可选,注释列表
    - app: nginx
spec:    # 必选,用于定义容器的详细信息
  containers:    # 必选,容器列表
  - name: nginx    # 必选,符合RFC 1035规范的容器名称
    image: nginx:v1 # 必选,容器所用的镜像的地址
    imagePullPolicy: Always    # 可选,镜像拉取策略
    workingDir: /usr/share/nginx/html    # 可选,容器的工作目录
    volumeMounts:    # 可选,存储卷配置
    - name: webroot # 存储卷名称
      mountPath: /usr/share/nginx/html # 挂载目录
      readOnly: true    # 只读
    ports:    # 可选,容器需要暴露的端口号列表
    - name: http    # 端口名称
      containerPort: 80    # 端口号
      protocol: TCP    # 端口协议,默认TCP
    env:    # 可选,环境变量配置
    - name: TZ    # 变量名
      value: Asia/Shanghai
    - name: LANG
      value: en_US.utf8
    resources:    # 可选,资源限制和资源请求限制
      limits:    # 最大限制设置
        cpu: 1000m
        memory: 1024MiB
      requests:    # 启动所需的资源
        cpu: 100m
        memory: 512MiB
    readinessProbe: # 可选,容器状态检查
      httpGet:    # 检测方式
        path: /    # 检查路径
        port: 80    # 监控端口
      timeoutSeconds: 2    # 超时时间 
      initialDelaySeconds: 60    # 初始化时间
    livenessProbe:    # 可选,监控状态检查
      exec:    # 检测方式
        command: 
        - cat
        - /health
      httpGet:    # 检测方式
        path: /_health
        port: 8080
        httpHeaders:
        - name: end-user
          value: jason
      tcpSocket:    # 检测方式
        port: 80
      initialDelaySeconds: 60    # 初始化时间
      timeoutSeconds: 2    # 超时时间
      periodSeconds: 5    # 检测间隔
      successThreshold: 2 # 检查成功为2次表示就绪
      failureThreshold: 1 # 检测失败1次表示未就绪
    securityContext:    # 可选,限制容器不可信的行为
      provoleged: false
  restartPolicy: Always    # 可选,默认为Always
  nodeSelector:    # 可选,指定Node节点
    region: subnet7
  imagePullSecrets:    # 可选,拉取镜像使用的secret
  - name: default-dockercfg-86258
  hostNetwork: false    # 可选,是否为主机模式,如是,会占用主机端口
  volumes:    # 共享存储卷列表
  - name: webroot # 名称,与上述对应
    emptyDir: {}    # 共享卷类型,空
    hostPath:        # 共享卷类型,本机目录
      path: /etc/hosts
    secret:    # 共享卷类型,secret模式,一般用于密码
      secretName: default-token-tf2jp # 名称
      defaultMode: 420 # 权限
      configMap:    # 一般用于配置文件
      name: nginx-conf
      defaultMode: 420

pod配置清单图解

posted @ 2021-07-20 16:16  Jeff的技术栈  阅读(95)  评论(0编辑  收藏  举报
回顶部