声明:这片文章是我通过实践理解并翻译的kubernetes 官网,源地址:Run a Stateless Application Using a Deployment
目标:
- 创建一个nginx deployment
- 通过kubectl查看deployment信息
- 滚动更新deployment
开始之前:
你需要有一个kubernetes的集群环境,并且配置好kubectl能够连接到kubernetes集群环境。如果你没有kubernetes集群环境,你可以通过Minikube创造一个集群或者使用kubernetes的是运行环境:
创建一个nginx deployment
你可以通过一个yaml文件形式的deployment来创建你的应用。例如,这个yaml文件描述了你创建一个nginx1.7.9镜像的deployment
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template: # create pods using pod definition in this template
metadata:
# unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is
# generated from the deployment name
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
1 通过yaml创建这个应用
kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment.yaml
2 查看这个deployment的详细信息
kubectl describe deployment nginx-deployment
输出如下:
user@computer:~/website$ kubectl describe deployment nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Tue, 30 Aug 2016 18:11:37 -0700
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision=1
Selector: app=nginx
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.7.9
Port: 80/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-1771418926 (2/2 replicas created)
No events.
3 列出这个deployment创建的pods
kubectl get pods -l app=nginx
输出如下:
NAME READY STATUS RESTARTS AGE
nginx-deployment-1771418926-7o5ns 1/1 Running 0 16h
nginx-deployment-1771418926-r18az 1/1 Running 0 16h
4 展示pods详情
kubectl describe pod <pod-name>
升级应用
你可以通过yaml升级你的应用,下面的这个yaml文件描述了将nginx应用升级成1.8的语法。
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
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 # Update the version of nginx from 1.7.9 to 1.8
ports:
- containerPort: 80
1 应用这个新的yaml文件
kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment-update.yaml
2 查看这个deployment的pods的名字从旧的更新到新的
kubectl get pods -l app=nginx
通过增加副本扩展应用的数量
你可以通过一个新的yaml文件来扩展deployment的pods数量,这个yaml文件通过定义replicas是4,来确定deployment的pods数量为4
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
1 应用yaml文件
kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment-scale.yaml
2 确认deployments有4个pods
kubectl get pods -l app=nginx
输出如下
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
删除deployment
通过name删除
kubectl delete deployment nginx-deployment