• 1. Pod的基本用法
    • 1.1. 说明
    • 1.2. Pod相关命令
  • 2. Pod的定义文件
  • 3. 静态pod
    • 3.1. 通过配置文件方式

    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权威指南》