Files
docker_practice/13_kubernetes_concepts/13.5_practice.md
T

103 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 13.5 实战练习
本章通过部署一个 Nginx 网站并配置 Service串联前面学到的 Deployment探针资源配额和服务发现知识
Deployment Service [合并清单](../examples/validated/kubernetes/web.yaml)使用仓库内固定的 Kubernetes 1.31 strict schema 做离线 `kubeconform` 校验下面的围栏与该文件由测试强制保持一致
开始前请先准备好可用的 Kubernetes 集群和 `kubectl` 上下文你可以先完成 [14.3 Docker Desktop](../14_kubernetes_setup/14.3_docker-desktop.md) [14.4 Kind](../14_kubernetes_setup/14.4_kind.md)并确认
```bash
kubectl get nodes
```
### 13.5.1 目标
1. 部署一个包含 readiness probe 和资源请求/限制的 Nginx Deployment
2. 创建一个 ClusterIP Service 暴露 Nginx
3. 通过端口转发访问服务并观察一次滚动发布
### 13.5.2 保存并应用合并清单
<!-- canonical-example: kubernetes -->
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.28-alpine
ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
path: /
port: http
resources:
requests:
cpu: 50m
memory: 32Mi
limits:
cpu: 200m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: http
```
仓库内运行时可直接应用经过校验的文件
```bash
kubectl apply -f examples/validated/kubernetes/web.yaml
kubectl get deployment/nginx-deployment service/nginx-service
```
Service 未指定 `type`因此使用默认的 `ClusterIP`不会依赖不同本地集群对 NodePort 的宿主机映射行为
### 13.5.3 访问服务
```bash
kubectl port-forward service/nginx-service 8080:80
```
然后访问 `http://localhost:8080`结束端口转发可按 `Ctrl+C`
> Ingress 只有在集群中已安装 Ingress controller 且配置了 IngressClass 时才会生效当前练习只覆盖 ServiceIngress/Gateway API 建议在完成第 14 章后再单独练习
### 13.5.4 观察滚动发布
修改 Pod 模板中的环境变量会触发 Deployment 滚动发布而无需依赖另一个外部镜像标签
```bash
kubectl set env deployment/nginx-deployment RELEASE_MARKER=demo-v2
kubectl rollout status deployment/nginx-deployment
```
### 13.5.5 清理资源
```bash
kubectl delete -f examples/validated/kubernetes/web.yaml
```