Kubernetes状态集示例与监控指标详解
立即解锁
发布时间: 2025-08-25 02:10:09 阅读量: 3 订阅数: 7 


Kubernetes for Developers: 实战容器编排与应用部署
### Kubernetes 中的 StatefulSet 示例与监控指标实践
#### 1. 使用 StatefulSet 的 Node.js 示例
本示例将展示如何使用 StatefulSet 部署 Node.js 应用,并观察其运行过程。
##### 1.1 获取代码
项目代码可从 GitHub 获取,使用以下命令克隆指定分支:
```bash
git clone https://github.com/kubernetes-for-developers/kfd-nodejs -b 0.4.0
cd kfd-nodejs
```
##### 1.2 服务定义变更
服务定义发生了变化,移除了 Nodeport 类型,并将 clusterIP 设置为 None,新的 `nodejs-service` 定义如下:
```yaml
kind: Service
apiVersion: v1
metadata:
name: nodejs-service
spec:
ports:
- port: 3000
name: web
clusterIP: None
selector:
app: nodejs
```
这将设置一个无头服务,用于与 StatefulSet 配合使用。
##### 1.3 转换为 StatefulSet
将部署类型从 Deployment 转换为 StatefulSet 很简单,只需替换类型并添加 `serviceName`、`replicas` 和 `selector` 等值。以下是最终的 StatefulSet 规范:
```yaml
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nodejs
spec:
serviceName: "nodejs"
replicas: 5
selector:
matchLabels:
app: nodejs
template:
metadata:
labels:
app: nodejs
spec:
containers:
- name: nodejs
image: quay.io/kubernetes-for-developers/nodejs:0.3.0
imagePullPolicy: Always
ports:
- containerPort: 3000
name: web
envFrom:
- configMapRef:
name: nodejs-config
volumeMounts:
- name: config
mountPath: /etc/nodejs-config
readOnly: true
- name: datastore
mountPath: /opt/data
livenessProbe:
httpGet:
path: /probes/alive
port: 3000
initialDelaySeconds: 1
periodSeconds: 5
readinessProbe:
httpGet:
path: /probes/ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: config
configMap:
name: nodejs-config
updateStrategy:
type: RollingUpdate
volumeClaimTemplates:
- metadata:
name: datastore
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
```
##### 1.4 部署 Redis
由于之前更新代码使用了 Redis 及其就绪探针,需要确保 Redis 已启动并运行。使用以下命令部署更新后的 Redis 服务定义:
```bash
kubectl apply -f deploy/redis.yaml
```
##### 1.5 观察 StatefulSet 部署过程
打开一个新的终端窗口,使用以下命令观察 Kubernetes 如何设置 StatefulSet:
```bash
kubectl get pods -w -l app=nodejs
```
在原终端窗口中,使用以下命令部署更新后的 StatefulSet 规范:
```bash
kubectl apply -f deploy/nodejs.yaml
```
你将看到服务、配置映射和 StatefulSet 对象已创建的响应。在观察 Pod 的窗口中,随着第一个容器上线,将开始显示输出,例如:
```plaintext
NAME READY STATUS RESTARTS AGE
nodejs-0 0/1 Pending 0 2h
nodejs-0 0/1 Pending 0 2h
nodejs-0 0/1 ContainerCreating 0 2h
nodejs-0 0/1 Running 0 2h
nodejs-0 1/1 Running 0 2h
nodejs-1 0/1 Pending 0 2h
...
```
##### 1.6 查看部署状态
使用以下命令查看部署状态:
```bash
kubectl get sts nodejs
```
输出示例:
```plaintext
NAME DESIRED
```
0
0
复制全文
相关推荐










