Kubernetes Deployments
理论学习
在 Kubernetes 中,Deployments 是一种资源对象,用于定义和管理容器化应用程序的部署过程,
- 容器化应用的声明式定义:使用 Deployments ,可以声明性地定义应用程序的部署配置,包括容器镜像、副本数量、升级策略等信息,而不需要手动操作每个容器。
- 自动化应用部署和升级: Deployments 允许用户指定应用程序的副本数量,并负责将制定数量的 Pod 部署到 Kubernetes 集群中。它还提供了自动化的滚动更新功能,允许用户在不中断服务的情况下对应用程序进行升级。
- 滚动更新策略:可以通过 Deployments 对象定义滚动更新策略,包括最大不可用实例数、最大搜索时间等参数,从而控制升级过程中的服务稳定性和可用性。
- 健康检查和自愈能力:Deployments 支持定义健康检查机制,以及自动重启失败的 Pod,从而提高应用程序的可靠性和稳定性。
- 回滚操作:如果升级失败或引入了严重的 bug,Deployments 允许用户通过简单的命令或 API 调用进行快速回滚操作,将应用程序恢复到先前的稳定状态。
下面是一个 Deployment 示例:
apiVersion: apps/v1 # 制定 Kubernetes API 的版本
kind: Deployment # 指定对象的类型
metadata: # 元数据部分
name: nginx-deployment
labels: # 指定 Deployments 对象的标签
app: nginx
spec: # 指定 Deployments 的规范部分
replicas: 3 # 指定要创建的 Pod 的副本数量
selector: # 指定用于选择要控制的 Pod 的标签选择器
matchLabels: # 匹配 Pod 标签的规则
app: nginx
template: # 指定要创建的 Pod 的模板数据
metadata:
labels:
app: nginx
spec:
containers: # 指定容器的配置信息
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
实战练习
操作步骤
- (标准步骤) 进入题目指定集群
$ kubectl config use-context k8s
- 检查 Deployments 信息 记录 SELECTOR 值
$ kubectl get deployment front-end -o wide
3. 编辑 front-end
$ kubectl edit deployment front-end
spec:
containers:
- image: vicuu/nginx:hello
imagePullPolicy: IfNotPresent
name: nginx # 找到该位置在下面添加一下6行内容
ports:
- containerPort: 80
name: http
protocol: TCP
selector:
app: front-end
- 暴露对应端口
$ kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc
检查命令
$ kubectl get svc -o wide
$ curl 10.104.200.158:80
参考链接:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/