创建nginx-deployment.yaml,意思为创建2个pod,每个pod里的nginx版本为1.7.9,容器监听端口(containerPort)是 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
一个 YAML 文件,对应到 Kubernetes 中,就是一个 API Object(API 对象)。当为这个对象的各个字段填好值并提交给 Kubernetes 之后,Kubernetes 就会负责创建出这些对象所定义的容器或者其他类型的 API 资源。
Pod 就是 Kubernetes 世界里的“应用”;而一个应用,可以由多个容器组成。
Deployment,是一个定义多副本应用(即多个副本 Pod)的对象,还负责在 Pod 定义发生变化时,对每个副本进行滚动更新。
Deployment 扮演的是 Pod 的控制器的角色。
Labels 是一组 key-value 格式的标签。可以通过这个 Labels 字段从 Kubernetes 中过滤出它所关心的被控制对象。
使用命令创建,推荐使用apply
kubectl apply -f nginx-deployment.yaml
或者
kubectl create -f nginx-deployment.yaml
检查
[root@k8s-master01 yaml]# kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-5d59d67564-9cf75 1/1 Running 0 76s
nginx-deployment-5d59d67564-ldjjm 1/1 Running 0 76s
查看一个API对象的细节
kubectl describe pod nginx-deployment-5d59d67564-9cf75
在 Kubernetes 执行的过程中,对 API 对象的所有重要操作,都会被记录在这个对象的 Events 里,并且显示在 kubectl describe 指令返回的结果中。
如果要变nginx版本,比如要对这个 Nginx 服务进行升级,把它的镜像版本从 1.7.9 升级为 1.8
修改yaml文件
...
spec:
containers:
- name: nginx
image: nginx:1.8 # 这里被从 1.7.9 修改为 1.8
ports:
- containerPort: 80
使用命令生效,推荐使用apply
kubectl apply -f nginx-deployment.yaml
或者
kubectl replace -f nginx-deployment.yaml
接下来,在这个 Deployment 中尝试声明一个 Volume。
将nginx-deployment.yaml文件修改如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: nginx-vol
volumes:
- name: nginx-vol
emptyDir: {}
emptyDir:不显式声明宿主机目录的 Volume。Kubernetes 会在宿主机上创建一个临时目录,这个目录将来就会被绑定挂载到容器所声明的 Volume 目录上。
Pod 中的容器,使用的是 volumeMounts 字段来声明自己要挂载哪个 Volume,并通过 mountPath 字段来定义容器内的 Volume 目录,比如:/usr/share/nginx/html。
显式声明 Volume
...
volumes:
- name: nginx-vol
hostPath:
path: /var/data
执行命令更新pod
kubectl apply -f nginx-deployment.yaml
kubectl get pods
使用 kubectl describe 查看一下最新的 Pod,会发现 Volume 的信息已经出现在了 Container 描述部分
可以使用 kubectl exec 指令,进入到这个 Pod 当中(即容器的 Namespace 中)查看这个 Volume 目录:
$ kubectl exec -it nginx-deployment-5c678cfb6d-lg9lw -- /bin/bash
# ls /usr/share/nginx/html
删除Nginx Deployment,运行以下命令:
kubectl delete -f nginx-deployment.yaml