1. Pod的基本用法

1.1. 说明

  1. Pod实际上是容器的集合,在k8s中对运行容器的要求为:容器的主程序需要一直在前台运行,而不是后台运行。应用可以改造成前台运行的方式,例如Go语言的程序,直接运行二进制文件;java语言则运行主类;tomcat程序可以写个运行脚本。或者通过supervisor的进程管理工具,即supervisor在前台运行,应用程序由supervisor管理在后台运行。具体可参考supervisord
  2. 当多个应用之间是紧耦合的关系时,可以将多个应用一起放在一个Pod中,同个Pod中的多个容器之间互相访问可以通过localhost来通信(可以把Pod理解成一个虚拟机,共享网络和存储卷)。

1.2. Pod相关命令

操作 命令 说明
创建 kubectl create -f frontend-localredis-pod.yaml
查询Pod运行状态 kubectl get pods —namespace=<NAMESPACE>
查询Pod详情 kebectl describe pod <POD_NAME> —namespace=<NAMESPACE> 该命令常用来排查问题,查看Event事件
删除 kubectl delete pod <POD_NAME> ;kubectl delete pod —all
更新 kubectl replace pod.yaml -

2. Pod的定义文件

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: string
  5. namaspace: string
  6. labels:
  7. - name: string
  8. annotations:
  9. - name: string
  10. spec:
  11. containers:
  12. - name: string
  13. images: string
  14. imagePullPolice: [Always | Never | IfNotPresent]
  15. command: [string]
  16. args: [string]
  17. workingDir: string
  18. volumeMounts:
  19. - name: string
  20. mountPath: string
  21. readOnly: boolean
  22. ports:
  23. - name: string
  24. containerPort: int
  25. hostPort: int
  26. protocol: string
  27. env:
  28. - name: string
  29. value: string
  30. resources:
  31. limits:
  32. cpu: string
  33. memory: string
  34. requests:
  35. cpu: string
  36. memory: string
  37. livenessProbe:
  38. exec:
  39. command: [string]
  40. httpGet:
  41. path: string
  42. port: int
  43. host: string
  44. scheme: string
  45. httpHeaders:
  46. - name: string
  47. value: string
  48. tcpSocket:
  49. port: int
  50. initialDelaySeconds: number
  51. timeoutSeconds: number
  52. periodSeconds: number
  53. successThreshold: 0
  54. failureThreshold: 0
  55. securityContext:
  56. privileged: false
  57. restartPolicy: [Always | Never | OnFailure]
  58. nodeSelector: object
  59. imagePullSecrets:
  60. - name: string
  61. hostNetwork: false
  62. volumes:
  63. - name: string
  64. emptyDir: {}
  65. hostPath:
  66. path: string
  67. secret:
  68. secretName: string
  69. items:
  70. - key: string
  71. path: string
  72. configMap:
  73. name: string
  74. items:
  75. - key: string
  76. path: string

3. 静态pod

静态Pod是由kubelet进行管理,仅存在于特定Node上的Pod。它们不能通过API Server进行管理,无法与ReplicationController、Deployment或DaemonSet进行关联,并且kubelet也无法对其健康检查。

静态Pod总是由kubelet创建,并且总在kubelet所在的Node上运行。

创建静态Pod的方式:

3.1. 通过配置文件方式

需要设置kubelet的启动参数“–config”,指定kubelet需要监控的配置文件所在目录,kubelet会定期扫描该目录,并根据该目录的.yaml或.json文件进行创建操作。静态Pod无法通过API Server删除(若删除会变成pending状态),如需删除该Pod则将yaml或json文件从这个目录中删除。

例如:

配置目录为/etc/kubelet.d/,配置启动参数:—config=/etc/kubelet.d/,该目录下放入static-web.yaml。

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: static-web
  5. labels:
  6. name: static-web
  7. spec:
  8. containers:
  9. - name: static-web
  10. image: nginx
  11. ports:
  12. - name: web
  13. containerPort: 80

参考文章

  • 《Kubernetes权威指南》