一个 Kubernetes 的 API 对象的定义,大多可以分为 Metadata 和 Spec 两个部分。前者存放的是这个对象的元数据,对所有 API 对象来说,这一部分的字段和格式基本上是一样的;而后者存放的,则是属于这个对象独有的定义,用来描述它所要表达的功能。
kubernetes推荐使用YAML文件的方式,即:将容器的定义、参数、配置统统记录在一个YAML文件中。然后使用如下命令运行
kubectl apply -f app.yaml
部署nginx应用
配置文件 nginx-deployment.yaml
---apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8ports:- containerPort: 80volumeMounts:- mountPath: "/usr/share/nginx/html"name: nginx-volvolumes:- name: nginx-volhostPath:path: "/var/data"
运行并查看状态
kubectl apply -f nginx-deployment.yamlkubectl get pods -l app=nginxNAME READY STATUS RESTARTS AGEnginx-deployment-74d45d987d-lwbzn 1/1 Running 0 75snginx-deployment-74d45d987d-phqt4 1/1 Running 0 52s
kubectl get 命令检查这个 YAML 运行起来的状态,
-l参数,即获取所有匹配 app: nginx 标签的 Pod
查看POD的描述
kubectl describe pod nginx-deployment-5bf87f5f59-chlc4
进入POD,即容器的namespace
kubectl exec -it nginx-deployment-74d45d987d-lwbzn -- /bin/bash
测试nginx
root@kubernetes-master:~# kubectl get pod -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESSGATESnginx-deployment-c9766564f-2f9rk 1/1 Running 0 12m 192.168.237.10 kubernetes-master <none> <none>nginx-deployment-c9766564f-f9h75 1/1 Running 0 12m 192.168.237.14 kubernetes-master <none> <none>root@kubernetes-master:~# curl 192.168.237.10<html><head><title>403 Forbidden</title></head><body bgcolor="white"><center><h1>403 Forbidden</h1></center><hr><center>nginx/1.8.1</center></body></html>
删除POD
kubectl delete -f nginx-deployment.yaml
Deployment,是一个定义多副本应用(即多个副本 Pod)的对象,曾经简单提到过它的用法。此外,Deployment 还负责在 Pod 定义发生变化时,对每个副本进行滚动更新(Rolling Update)。
推荐使用replica=1而不使用单独pod的主要原因是:pod所在的节点出故障的时候 pod 可以调度到健康的节点上,单独的pod只能在节点健康的情况下由kubelet保证pod的健康状况。
