Kubernetes 资源清单定义入门
创建资源的方法
apiserver仅接收JSON格式的资源定义,yaml格式提供配置清单,apiserver可自动将其转为json格式,而后提交,每个资源引用PATH如下:
/api/GROUP/VERSION/namespces/NAMESPACE/TYPE/NAME #例如 /api/v1/namespaces/default/pods/myapp-1d6a5d1-jgh1
查看帮助字段帮助
kubectl explain pods.spec.containers kubectl explain pods.metadata
大部分资源配置清单格式yaml
apiVersion:group/version #api版本 kind: #资源类别 metadata: #元数据 nama: #名称 namespce: #命名空间 labels: #标签 app:myapp #标签 annotations: leiyan.com/created-by:"qinzc admin" #资源注解 spec: #期望状态 containers: - name: #名称 image: #镜像来源 imagePullPolicy: #pull策略,Always(总是去仓库拉最新),Never(使用本地,本地没有不去拉取),IfNotPresent(使用本地,本地没有去拉取) ports: #暴露端口 - name:http #暴露端口命名 containerPort:80 #暴露80端口 - name:https #暴露端口命名 containerPort:443 #暴露443端口 command: #启动命令如果没有指定,那么默认将使用容器里的CMD或ENTRYPOINT作为启动参数,如果容器中指定了CMD或ENTRYPOINT启动,此处指定args,将作为参数传递进容器 nodeSelector: #指定节点标签选择器 disktype:ssh #指定包含此标签的节点运行Pod nodeName: #指定节点运行Pod selector: #使用什么标签选择器选择 matchLabels: #直接给定键值 matchExpressions: #基于给定的表达式来定义使用标签选择器{key:"KEY",operator:"OPERATOR",values:[VAL1,VAL2,..]},In,NotIN:values 字段的值必须为空列表,Exists,NotExists:values字段的值必须为空列表,
例:创建一个Pod,运行两个容器(myapp、busybox)
vim pod-demo.yaml
apiVersion: v1 kind: Pod metadata: name: pod-demo namespce: default labels: app: myapp tier: frontend spec: contaiters: - name: myapp image: ikubernetes/myapp:v1 - name: busybox image: busybox:latest command: - "/bin/sh" - "-c" - "sleep 3600"
创建Pod
kubectl create -f pod-demo.yaml
查看的Pod日志信息
kubectl describe pods pod-demo kubectl logs pod-demo busybox
删除Pod
方法1:kubectl delete -f pod-demo.yaml 方法2:kubectl delete pod pod-demo
Pod控制器进阶
Pod的生命周期:
状态:Pending,Running,Failed,Succeeded,Unknown
Pod生命周期中的重要行为: 1.初始化容器: 2.启动后钩子:kubectl explain pods.spec.containers.lifecycle postStart:启动前 探针类型有3种:exec、tcpSocket、httpGet preStop:终止前 探针类型有3种:exec、tcpSocket、httpGet 3.容器探测:liveness(主程序,或容器存活状态),readiness(服务存活状态) 4.容器重启策略:restartPolicy:{Always(容器挂了总是重启),OnFailure(错误了重启),Never(容器挂了不重启),Default to Always} 5.结束后钩子:
存活探针类型有3种:
ExecAction、TCPSocketAction、HTTPGetAction
livenessProbe :存活状态 readinessProbe:就绪状态 kubectl explain pods.spec.containers.livenessProbe exec #探测程序 failureThreshold #探测几次算失败,默认连续3次才是真的失败 HTTPGet #探测HTTP initialDelaySeconds #初始化延迟多久开始启动探测 periodSeconds #探测时长周期,默认10s tcpSocket #探测TCP timeoutSeconds #探测无响应超时等多久,默认1s kubectl explain pods.spec.containers.livenessProbe.exec command #如果次平明返回成功,表示存活,返回状态码,表示失败。
例1:
vim liveness-exec.yaml
apiVersion: v1 kind: Pod metadata: name: liveness-exec-pod namespace: default spec: containers: - name: liveness-exec-container image: busybox:latest imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","touch /tmp/healthy; sleep 10; rm -rf /tmp/healthy; sleep 3600"] livenessProbe: exec: command: ["test","-e","/tmp/healthy"] initialDelaySeconds: 1 periodSeconds: 3
例2:
vim liveness-httpget.yaml
apiVersion: v1 kind: Pod metadata: name: liveness-httpget-pod namespace: default spec: containers: - name: liveness-httpget-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3
就绪状态探针
**例1:**
vim readines-httpget.yaml
apiVersion: v1 kind: Pod metadata: name: readines-httpget-pod namespace: default spec: containers: - name: liveness-httpget-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3 readinessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3
启动后钩子
例1:
vim postStart.yaml
apiVersion: v1 kind: Pod metadata: name: poststart-pod namespace: default spec: containers: - name: busybox-httpd image: busybox:latest imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: ["/bin/sh","-c","echo Home_Page >> /tmp/index.html"] command: ["/bin/httpd"] args: ["-f","-h","/tmp"]
停留在世界边缘,与之惜别