k8s-pod参数详解

目录

概述

  k8s中的pod参数详解。官方文档

  版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3.19-perl

创建Pod

编写一个简单的Pod

yaml 复制代码
apiVersion: v1
kind: Pod
# 元数据
metadata:
  # pod 名称 唯一
  name: busybox
  # 命名空间
  namespace: test
  # 标签
  labels:
    app: busybox

spec:
  containers:
  - name: busybox
    image: harbor.easzlab.io.local:8443/library/busybox:stable-musl
    imagePullPolicy: IfNotPresent
    command:
      - sleep
      - "3600"
  restartPolicy: Always
bash 复制代码
[root@hadoop01 pod]# kubectl get pod -n test
NAME                           READY   STATUS    RESTARTS   AGE
busybox                        1/1     Running   0          25s
tomcat-demo-7ddd4cf4f5-bpskf   1/1     Running   0          7d20h

[root@hadoop01 pod]# kubectl exec -it -n test busybox -- sh
/ # 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # 

添加常用参数

yaml 复制代码
apiVersion: v1
kind: Pod
# 元数据
metadata:
  # pod 名称 唯一
  name: busybox
  # 命名空间
  namespace: test
  # 标签
  labels:
    app: busybox

spec:
  containers:
  - name: busybox
    image: harbor.easzlab.io.local:8443/library/busybox:stable-musl
    # 可选值: Always|IfNotPresent|Never
    imagePullPolicy: IfNotPresent
    # 环境变量
    env:
    - name: app
      value: busybox
    # 运行终端 守护进程,不会运行完就结束
    tty: true
    # 特权模式 对宿主机有 root 权限
    securityContext:
      privileged: true
    # 工作目录
    workingDir: /test
    # 命令
    command: ["/bin/sh"]
    # 参数
    args: ["-c", "while true; do echo hello;sleep 10;done"]
  restartPolicy: Always
bash 复制代码
[root@hadoop01 pod]# kubectl apply -f arg-busbox-pod.yaml
pod/busybox created
[root@hadoop01 pod]# kubectl get pod -n test
NAME                           READY   STATUS    RESTARTS   AGE
busybox                        1/1     Running   0          7s
tomcat-demo-7ddd4cf4f5-bpskf   1/1     Running   0          7d22h
[root@hadoop01 pod]# kubectl logs -f busybox -n test
hello
hello
hello
hello
hello
hello
hello

为Pod的容器分配资源

yaml 复制代码
apiVersion: v1
kind: Pod
# 元数据
metadata:
  # pod 名称 唯一
  name: busybox
  # 命名空间
  namespace: test
  # 标签
  labels:
    app: busybox

spec:
  restartPolicy: Always
  containers:
  - name: busybox
    image: harbor.easzlab.io.local:8443/library/busybox:stable-musl
    imagePullPolicy: IfNotPresent
    command:
      - sleep
      - "3600"
    resources:
      # 注意MiB 和 Mb 有区别,1MiB=1024k,而1Mb=100k k8s 使用 Mi 大的
      # cpu的单位 ,1c=1000m
      # 最小需要
      requests:
        memory: "100Mi"
        cpu: "1000m"
      # 最大限制
      limits:
        memory: "200Mi"
        cpu: "1000m"

注意:因为安装的不是 docker ,所以 crictl stats 并不详细

如 docker stats 能看出资源限制后的变化。

网络相关

网络默认配置使用的是 k8s 集群的配置。

自定义网络配置如下:

yaml 复制代码
apiVersion: v1
kind: Pod
# 元数据
metadata:
  # pod 名称 唯一
  name: nginx
  # 命名空间
  namespace: test
  # 标签
  labels:
    app: nginx 

spec:
  # 使用宿主机的网络,与宿主机共享局域网
  hostNetwork: false
  # 可选值:Default | ClusterFirst | ClusterFirstWithHostNet | None
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
    - 8.8.8.8
  # 域名映射
  hostAliases:
    - ip: 192.168.1.18
      hostnames:
      - "foo.local"
      - "bar.local"
  containers:
  - name: nginx
    image: harbor.easzlab.io.local:8443/library/nginx:stable-alpine3.19-perl
    imagePullPolicy: IfNotPresent
    ports:
    - name: default
      containerPort: 80
      # 如果使用hostnetwork 那这里就不能指定端口,配置了也不会生效
      hostPort: 8080

Pod健康检查

  有一种情况,容器还是正常运行的,但是服务无法使用;这种场景,一般称之为容器死锁,为了能够迟早的发现这种问题,可以通过对容器做健康检查来迟早发现问题。

  • 启动探针:启动成功之后才是就绪与存活探针,启动失败,会根据策略重启

  • 就绪探针:如初始化 mysql 等,不会重启,会让服务不可用

  • 存活探针:通过 http tcp grpc 等方式验证容器是否可用

  • 探针示例,后续补充

启动探针

yaml 复制代码
spec:
  containers:
  - name: your-container
    startupProbe:
      httpGet:
        path: /healthz
        port: 8080
      failureThreshold: 30
      initialDelaySeconds: 120
      periodSeconds: 10
      timeoutSeconds: 1
      successThreshold: 1

存活探针

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: myapp:latest
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10

  Liveness探针每10秒检查一次http://myapp-pod:8080/healthz,initialDelaySeconds用于指定探针初次执行前的延迟时间。

就绪探针

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: myapp:latest
    ports:
    - containerPort: 80
    readinessProbe:
      httpGet:
        path: /readyz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10

  Readiness探针每5秒检查一次http://myapp-pod:8080/readyz,initialDelaySeconds用于指定探针初次执行前的延迟时间。

作用整个Pod参数配置

创建docker-registry

bash 复制代码
kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址> \
-n test

卷挂载

结束

相关推荐
LRL_6 小时前
深入浅出 Kubernetes 控制器:Deployment 与 StatefulSet 核心区别全景图
云原生·容器·kubernetes
MrSYJ7 小时前
Network Namespace 到底是个啥,别人再问你告诉他
docker·云原生·kubernetes
彬冷的心9 小时前
K8s 部署若依项目 + Harbor 私有仓库(双节点版)
云原生·容器·kubernetes
convee_ai9 小时前
Agent 执行为什么需要独立 Sandbox:拆解 Hullwork 的 gVisor 隔离
架构·kubernetes
想要成为老金高手10 小时前
Kubernetes Service 深度实践:从 ClusterIP 到 Ingress 七层代理
云原生·容器·kubernetes
IT大白鼠10 小时前
Kubernetes 持久化存储:PV、PVC、StorageClass 存储体系
云原生·容器·kubernetes
GGG76611 小时前
K8s1.28 全栈落地|Jenkins+GitLab+Harbor DevOps 流水线封神实战
kubernetes·gitlab·jenkins
名字还没想好☜21 小时前
用 systemd 托管后台服务:Restart 策略、日志接管、资源限制与开机自启全踩一遍
运维·docker·kubernetes
野熊佩骑1 天前
Kubernetes实战系列文章(三) 之 K8S运维常用命令
linux·运维·docker·微服务·云原生·容器·kubernetes
一个向上的运维者1 天前
Kubernetes 网络三部曲:CNI、kube-proxy 与 CoreDNS 是如何协作的?
网络·容器·kubernetes