Arp*_*ran 6 kubernetes kubernetes-helm
我有一个 Kubernetes 部署,它是两个具有不同配置的 ACTIVE ReplicaSet 的所有者/父级。
此设置由 Helm 管理。
我已经尝试过制作revisionHistory: 0. 这不起作用,因为 ReplicaSet 并未处于非活动状态。这个旧的 ReplicaSet 尝试启动一个 Pod,但由于节点上的资源限制,它仍处于挂起状态。
我尝试更新 Deployment,但只更新了新的 ReplicaSet。旧的还是一样。
我也无法删除此 ReplicaSet。这给我带来了很多麻烦。
有人可以帮我解决这个问题吗?
Helm 部署模板 -
apiVersion: apps/v1
kind: Deployment
metadata:
name: example
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: example
replicas: 1
template:
metadata:
labels:
k8s-app: example
spec:
serviceAccountName: example
nodeSelector:
node-role: example-node
containers:
- name: example
image: example-image:vX.X.X
resources:
requests:
cpu: 100m
ports:
- name: example-port
containerPort: XXXX
- name: example-port-1
containerPort: XXXX
readinessProbe:
httpGet:
path: /example
port: XXXX
initialDelaySeconds: 5
timeoutSeconds: 5
- name: example-sidecar
image: example-image-sidecar:vX.X.X
resources:
limits:
memory: 400Mi
requests:
cpu: 100m
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
command:
- command
- --container=example
- --cpu=200m
- --extra-cpu=10m
- --memory=300Mi
- --extra-memory=2Mi
- --threshold=5
- --deployment=example
Run Code Online (Sandbox Code Playgroud)
堆栈:使用 Kops 和 Helm 2.13.1 在 AWS EC2 上部署独立 K8
输出 -
kubectl get rs -o wide -n kube-system | grep example
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
example-6d4f99bc54 0 0 0 12h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=6d4f99bc54
example-59d46955b6 0 0 0 13h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=59d46955b6
example-5855866cdb 0 0 0 18h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=5855866cdb
example-ccc5cf5cd0 0 0 0 18h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=ccc5cf5cd
example-66db79f578 1 1 0 19h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=66db79f578
example-759469945f 1 1 1 19h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=759469945f
example-ff8f986960 0 0 0 19h example,example-sidecar example-image:vX.X.X,example-image-sidecar:vX.X.X k8s-app=example,pod-template-hash=ff8f98696
Run Code Online (Sandbox Code Playgroud)
kubectl describe deployments example -n kube-system
Name: example
Namespace: kube-system
CreationTimestamp: Tue, 03 Mar 2020 00:48:18 +0530
Labels: k8s-app=example
Annotations: deployment.kubernetes.io/revision: 27
Selector: k8s-app=example
Replicas: 1 desired | 1 updated | 2 total | 1 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: k8s-app=example
Service Account: example
Containers:
example:
Image: example-image:vX.X.X
Ports: 8080/TCP, 8081/TCP
Host Ports: 0/TCP, 0/TCP
Limits:
cpu: 1630m
memory: 586Mi
Requests:
cpu: 1630m
memory: 586Mi
Readiness: http-get http://:8080/healthz delay=5s timeout=5s period=10s #success=1 #failure=3
Environment: <none>
Mounts: <none>
example-sidecar:
Image: example-image-sidecar:vX.X.X
Port: <none>
Host Port: <none>
Command:
command
--container=example
--cpu=200m
--extra-cpu=10m
--memory=300Mi
--extra-memory=2Mi
--threshold=5
--deployment=example
Limits:
memory: 400Mi
Requests:
cpu: 100m
Environment:
MY_POD_NAME: (v1:metadata.name)
MY_POD_NAMESPACE: (v1:metadata.namespace)
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
OldReplicaSets: example-759469945f (1/1 replicas created)
NewReplicaSet: example-66db79f578 (1/1 replicas created)
Events: <none>
Run Code Online (Sandbox Code Playgroud)
kubectl rollout history deployments example -n kube-system
deployment.extensions/example
REVISION CHANGE-CAUSE
1 <none>
16 <none>
17 <none>
21 <none>
24 <none>
26 <none>
27 <none>
Run Code Online (Sandbox Code Playgroud)
理论
我尝试更新 Deployment,但只更新了新的 ReplicaSet。旧的还是一样。
在这种情况下,问题是您有 2 个不同的Deployments. 您正在编辑的一个(因此rs会更新)和以其他方式创建的另一个(“旧”)。
通常,您无法ReplicaSet轻易删除,因为它由另一个实体控制。
在 Kubernetes 中,可以rs通过以下方式删除:
rs使用查找“old”的名称kubectl get replicaset -n kube-system。rs找到“old”所控制的对象:kubectl describe <rs-name>rs。实践
您观察到多个 'es 的事实rs意味着您一直在尝试更新Deployment.
kubectl get rs -o wide -n kube-system | grep example
NAME DESIRED CURRENT READY AGE
example-6d4f99bc54 0 0 0 12h
example-59d46955b6 0 0 0 13h
example-5855866cdb 0 0 0 18h
example-ccc5cf5cd0 0 0 0 18h
example-66db79f578 1 1 0 19h
example-759469945f 1 1 1 19h
example-ff8f986960 0 0 0 19h
Run Code Online (Sandbox Code Playgroud)
从该输出中我们可以看到example-759469945f19 小时前创建的内容还活着 ( DESIRED/CURRENT/READY= 1/1/1) 。之后又尝试更新它,所以rs通过更新过程一一创建了其他的。
由于问题Deployment(我们稍后会讨论),所有这些尝试都失败了。
经过几次不成功的尝试后,您回滚到example-66db79f578创建时Deployment也已损坏的位置(这就是为什么最新的一个而example-6d4f99bc54不是 )0/0/01/1/0
这种损坏Deployment是你有 2 个=1的副本集(分别为和)的根本原因。CURRENTexample-759469945fexample-66db79f5781/1/11/1/0
请注意,RollingUpdate这里使用的是策略Deployment。
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Run Code Online (Sandbox Code Playgroud)
这就是为什么旧的rs没有退役,而新的没有完全“启动并运行”(具有匹配的值DESIRED/CURRENT/READY)
rs一旦您修复并应用更改,您最终将只剩下一个Deployment。
为了修复部署,需要检查 k8s 尝试创建podfor时出了什么问题example-66db79f578
您可以通过以下方式进行操作:
# check the pod name
kubectl get pods -n kube-system | grep 66db79f578
# describe pod. it shall give you the root cause in "Events:" section
kubectl describe pod example-66db79f578-<somehash>
# additionally you can try checking logs for the containers on that pod.
kubectl logs example-66db79f578-<somehash> example
kubectl logs example-66db79f578-<somehash> example-sidecar
# fix :)
# apply changes
Run Code Online (Sandbox Code Playgroud)
一旦修复了损坏的部分,Deployment您就可以毫无问题地应用它。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
5152 次 |
| 最近记录: |