Log*_*son 7 kubernetes kops statefulset
我有一个非常简单的 Kubernetes pod。我想要一个有状态的集合并想要以下过程:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: app
namespace: test
labels:
name: app
spec:
serviceName: app
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
initContainers:
- name: preparing
image: alpine:3.8
imagePullPolicy: IfNotPresent
command:
- "sh"
- "-c"
- |
echo "Downloading data"
wget https://s3.amazonaws.com/.........
tar -xvzf xxxx-........ -C /root/
volumeMounts:
- name: node-volume
mountPath: /root/data/
containers:
- name: main-container
image: ecr.us-west-2.amazonaws.com/image/:latest
imagePullPolicy: Always
volumeMounts:
- name: node-volume
mountPath: /root/data/
volumeClaimTemplates:
- metadata:
name: node-volume
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: gp2-b
resources:
requests:
storage: 80Gi
Run Code Online (Sandbox Code Playgroud)
我继续收到以下错误:
起初我运行它,我可以看到我的 tarball 的日志正在被 initcontainer 下载。大约完成一半它终止并给我以下错误:
Multi-Attach error for volume "pvc-faedc8" Volume is
already exclusively attached to one node and can't be
attached to another
Run Code Online (Sandbox Code Playgroud)
Ric*_*ico 10
看起来您有一个悬挂的PVC和/或PV连接到您的节点之一。您可以通过 ssh 进入节点并运行df或mount进行检查。
如果你看看这个StatefulSet 中的 PVC 总是映射到它们的 pod 名称,所以你可能仍然有一个悬空的 pod(?)
如果你有一个悬空的吊舱:
$ kubectl -n test delete pod <pod-name>
Run Code Online (Sandbox Code Playgroud)
你可能不得不强制它:
$ kubectl -n test delete pod <pod-name> --grace-period=0 --force
Run Code Online (Sandbox Code Playgroud)
然后,您可以尝试删除 PVC 及其对应的 PV:
$ kubectl delete pvc pvc-faedc8
$ kubectl delete pv <pv-name>
Run Code Online (Sandbox Code Playgroud)
这是唯一对我有用的解决方案:
0kubectl -n NAMESPACE scale deployment/stateful NAME --replicas 0
Run Code Online (Sandbox Code Playgroud)
或者
kubectl -n NAMESPACE edit deployment/stateful NAME
Run Code Online (Sandbox Code Playgroud)
并手动编辑replicas: 0
删除所有volumeattachment:
kubectl -n NAMESPACE delete volumeattachment --all
Run Code Online (Sandbox Code Playgroud)
带回复制品。
就是这样
| 归档时间: |
|
| 查看次数: |
11772 次 |
| 最近记录: |