部署应用
kubectl run kubernetes-bootcamp \
--image=docker.io/jocatalin/kubernetes-bootcamp:v1 \
--port=8080
deployment.apps/kubernetes-bootcamp created
deployment 是 kubernetes 中的一个概念,可以理解为应用。
还有一个基础概念 pod,是容器集合,是 kubernetes 调度的最小单位。
上面的命令运行了一个 deployment,那一定就运行了 pod。
查看当前的 deployment:
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 4m45s
查看当前 pod:
kubectl get pod
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-6c5cfd894b-t7hz2 1/1 Running 0 5m8s
kubernetes-bootcamp-6c5cfd894b-t7hz2 是当前应用的 pod。
访问应用
上面运行应用时指定了 port 为 8080,这个端口是用于集群内部访问的,外部访问不了,为了能够外部访问,需要将容器的 8080 端口映射到节点端口。
kubectl expose deployment/kubernetes-bootcamp \
--type="NodePort" \
--port=8080
service/kubernetes-bootcamp exposed
可以看到暴露了一个 service。
查看 service:
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-bootcamp NodePort 10.152.183.59 <none> 8080:31356/TCP 2m21s
可以看到端口的映射,把 8080 映射到了 31356。
访问:
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6c5cfd894b-t7hz2 | v=1
正常访问了应用。
应用扩展
上面我们运行 deployment 时,默认只会运行一个副本,查看一下:
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 4m45s
现在我们想把副本数量增加到3个:
kubectl scale deployment/kubernetes-bootcamp --replicas=3
deployment.extensions/kubernetes-bootcamp scaled
查看一下 deployment:
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 3/3 3 3 17m
数量变为了3个。
查看一下 pod:
kubectl get pod
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-6c5cfd894b-4wdsb 1/1 Running 0 84s
kubernetes-bootcamp-6c5cfd894b-t7hz2 1/1 Running 0 18m
kubernetes-bootcamp-6c5cfd894b-w89v9 1/1 Running 0 84s
pod 增加到了3个。
通过 curl 访问应用时,会自动发送到不同的副本,实现负载均衡:
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6c5cfd894b-t7hz2 | v=1
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6c5cfd894b-4wdsb | v=1
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6c5cfd894b-w89v9 | v=1
可以看到 pod 是不同的。
不仅可以增加,也可以减少:
kubectl scale deployment/kubernetes-bootcamp --replicas=2
查看一下 pod 数量:
kubectl get pod
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-6c5cfd894b-t7hz2 1/1 Running 0 25m
kubernetes-bootcamp-6c5cfd894b-w89v9 1/1 Running 0 8m40s
一个被删除了,变成了2个。
滚动更新
当前应用使用的 image 版本是 v1,现在升级到 v2:
kubectl set image deployment/kubernetes-bootcamp \
kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.extensions/kubernetes-bootcamp image updated
访问测试:
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-mcbxx | v=2
从访问结果可以看到已经是 v2 版本了。
如果 v2 出现问题,想回退到 v1,也很简单:
kubectl rollout undo deployment/kubernetes-bootcamp
curl localhost:31356
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6c5cfd894b-xk9nk | v=1
又回到了 v1。









网友评论