v1.8.4ã䜿çšããŠããŸãããåé€ãããåå空éãæ°žä¹ ã«ãçµäºãç¶æ ã®ãŸãŸã«ãªããšããåé¡ããããŸãã ãã§ã«ãkubectldeletenamespaceXXXXããå®è¡ããŸããã
/ sigapi-machinery
@ shean-guangchangãããåçŸããæ¹æ³ã¯ãããŸããïŒ
ãããŠå¥œå¥å¿ãããCRDã䜿çšããŠããŸããïŒ ä»¥åãTPRã§ãã®åé¡ã«çŽé¢ããŸããã
/çš®é¡ã®ãã°
ç§ã¯ã«ãŒã¯ãããã€ã¡ã³ãã§ãã®åé¡ãçµéšããŠããããã§ãïŒ
â tmp git:(master) â kubectl delete namespace rook
Error from server (Conflict): Operation cannot be fulfilled on namespaces "rook": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.
â tmp git:(master) â
ç§ã¯ããã圌ãã®CRDãšé¢ä¿ããããšæããŸããç§ã¯ãããAPIãµãŒããŒãã°ã§èŠãŸãïŒ
E0314 07:28:18.284942 1 crd_finalizer.go:275] clusters.rook.io failed with: timed out waiting for the condition
E0314 07:28:18.287629 1 crd_finalizer.go:275] clusters.rook.io failed with: Operation cannot be fulfilled on customresourcedefinitions.apiextensions.k8s.io "clusters.rook.io": the object has been modified; please apply your changes to the latest version and try again
rookãå¥ã®åå空éã«ãããã€ããŸããããã¯ã©ã¹ã¿ãŒCRDãäœæã§ããŸããã
â tmp git:(master) â cat rook/cluster.yaml
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
name: rook
namespace: rook-cluster
spec:
dataDirHostPath: /var/lib/rook-cluster-store
â tmp git:(master) â kubectl create -f rook/
Error from server (MethodNotAllowed): error when creating "rook/cluster.yaml": the server does not allow this method on the requested resource (post clusters.rook.io)
CRDãã¯ãªãŒã³ã¢ãããããªãã£ãããã§ãã
â tmp git:(master) â kubectl get customresourcedefinitions clusters.rook.io -o yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
creationTimestamp: 2018-02-28T06:27:45Z
deletionGracePeriodSeconds: 0
deletionTimestamp: 2018-03-14T07:36:10Z
finalizers:
- customresourcecleanup.apiextensions.k8s.io
generation: 1
name: clusters.rook.io
resourceVersion: "9581429"
selfLink: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/clusters.rook.io
uid: 7cd16376-1c50-11e8-b33e-aeba0276a0ce
spec:
group: rook.io
names:
kind: Cluster
listKind: ClusterList
plural: clusters
singular: cluster
scope: Namespaced
version: v1alpha1
status:
acceptedNames:
kind: Cluster
listKind: ClusterList
plural: clusters
singular: cluster
conditions:
- lastTransitionTime: 2018-02-28T06:27:45Z
message: no conflicts found
reason: NoConflicts
status: "True"
type: NamesAccepted
- lastTransitionTime: 2018-02-28T06:27:45Z
message: the initial names have been accepted
reason: InitialNamesAccepted
status: "True"
type: Established
- lastTransitionTime: 2018-03-14T07:18:18Z
message: CustomResource deletion is in progress
reason: InstanceDeletionInProgress
status: "True"
type: Terminating
â tmp git:(master) â
ç§ã¯åæ§ã®ç¶æ ã®æ žåè£åå空éãæã£ãŠããŸãïŒ
â tmp git:(master) â kubectl delete namespace fission
Error from server (Conflict): Operation cannot be fulfilled on namespaces "fission": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.
â tmp git:(master) â kubectl get pods -n fission
NAME READY STATUS RESTARTS AGE
storagesvc-7c5f67d6bd-72jcf 0/1 Terminating 0 8d
â tmp git:(master) â kubectl delete pod/storagesvc-7c5f67d6bd-72jcf --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (NotFound): pods "storagesvc-7c5f67d6bd-72jcf" not found
â tmp git:(master) â kubectl describe pod -n fission storagesvc-7c5f67d6bd-72jcf
Name: storagesvc-7c5f67d6bd-72jcf
Namespace: fission
Node: 10.13.37.5/10.13.37.5
Start Time: Tue, 06 Mar 2018 07:03:06 +0000
Labels: pod-template-hash=3719238268
svc=storagesvc
Annotations: <none>
Status: Terminating (expires Wed, 14 Mar 2018 06:41:32 +0000)
Termination Grace Period: 30s
IP: 10.244.2.240
Controlled By: ReplicaSet/storagesvc-7c5f67d6bd
Containers:
storagesvc:
Container ID: docker://3a1350f6e4871b1ced5c0e890e37087fc72ed2bc8410d60f9e9c26d06a40c457
Image: fission/fission-bundle:0.4.1
Image ID: docker-pullable://fission/fission-bundle<strong i="6">@sha256</strong>:235cbcf2a98627cac9b0d0aae6e4ea4aac7b6e6a59d3d77aaaf812eacf9ef253
Port: <none>
Command:
/fission-bundle
Args:
--storageServicePort
8000
--filePath
/fission
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/fission from fission-storage (rw)
/var/run/secrets/kubernetes.io/serviceaccount from fission-svc-token-zmsxx (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
fission-storage:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: fission-storage-pvc
ReadOnly: false
fission-svc-token-zmsxx:
Type: Secret (a volume populated by a Secret)
SecretName: fission-svc-token-zmsxx
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: <none>
â tmp git:(master) â
FissionãCRDã䜿çšããŠããŸãããã¯ãªãŒã³ã¢ãããããŠããããã§ãã
@ shean-guangchang-åãåé¡ãçºçããŸããã åå空éã®äžã«ãããã¹ãŠã®ãã®ãæåã§åé€ãããhelmããããã¹ãŠãåé€ããŠããŒãžãããã¹ã¿ãŒããŒãã1ã€ãã€åèµ·åãããšãåé¡ãä¿®æ£ãããŸããã
ç§ãééããããšã¯ããarkãããtillerããããã³Kuberenetsããã¹ãŠäžç·ã«æ©èœããŠããããšãšé¢ä¿ããããšæããŸãïŒãã«ã ã䜿çšããŠããŒãã¹ãã©ããããarkã䜿çšããŠããã¯ã¢ããããŸããïŒãäžæ¹ãé¢é£ãããã°ããªãããããã©ãã«ã·ã¥ãŒãã£ã³ã°ãè¡ãããšã¯ã»ãšãã©äžå¯èœã§ããã
ãããã«ãŒã¯ã®ãã®ã§ããå Žåã¯ããããèŠãŠãã ããïŒ //github.com/rook/rook/issues/1488#issuecomment -365058080
ããã¯çã«ããªã£ãŠãããšæããŸãããåå空éãåé€ã§ããªãç¶æ ã«ããå¯èœæ§ãããã®ã¯ãã°ã®ããã§ãã
@barakAtSolutoãšåæ§ã®ç°å¢ïŒArkïŒHelmïŒããããåãåé¡ãçºçããŸãã ãã¹ã¿ãŒãããŒãžããŠåèµ·åããŠããä¿®æ£ãããŸããã§ããã ãŸã çµäºã«åºå·ããŠããŸãã
åé¡ãåçŸããããšãããšãã«ãããããããŸããã æçµçã«ã¯ãæ°ããã¯ã©ã¹ã¿ãŒãäœæããå¿
èŠããããŸããã
é€å€-ããã©ã«ããkube-system / publicãããã³ãã¹ãŠã®arké¢é£ã®åå空éãããã¯ã¢ãããšåŸ©å
ããé€å€ããŠããããçºçããªãããã«ããŸã...
1.8.4ãã1.9.6ã«ã¢ããã°ã¬ãŒããããã¯ã©ã¹ã¿ãŒã§ãããããçºçããŠããŸãã ã©ã®ãã°ãèŠããããããããŸãã
1.10.1ã®åãåé¡:(
1.9.6ã®åãåé¡
ç·šéïŒäžéšã®ãããããã³ã°ããŠãããããåå空éãåé€ã§ããŸããã§ããã ããããã¹ãŠã«--grace-period = 0 --forceãæå®ããŠåé€ãè¡ããæ°ååŸã«åå空éãåé€ãããŸããã
ããã
ç§ã¯ãããäœåºŠãç¹°ãè¿ããŠãããã»ãšãã©ã®å Žåããã¡ã€ãã©ã€ã¶ãŒã«åé¡ããããŸãã
åå空éãã¹ã¿ãã¯ããŠããå Žåã¯ã kubectl get namespace XXX -o yaml
ãè©ŠããŠããã¡ã€ãã©ã€ã¶ãŒããããã©ããã確èªããŠãã ããã ãã®å Žåã¯ãåå空éãç·šéããŠãã¡ã€ãã©ã€ã¶ãŒãåé€ãããšïŒç©ºã®é
åãæž¡ãããšã«ããïŒãåå空éãåé€ãããŸã
@xetysã¯å®å šã§ããïŒ ç§ã®å Žåããkubernetesããšããååã®ãã¡ã€ãã©ã€ã¶ãŒã¯1ã€ã ãã§ãã
ããã¯å¥åŠã§ããç§ã¯ãã®ãããªãã¡ã€ãã©ã€ã¶ãŒãèŠãããšããããŸããã ç§ã¯èªåã®çµéšã«åºã¥ããŠè©±ãããšãã§ããŸãã ç§ã¯æ¬çªã¯ã©ã¹ã¿ãŒã§ãããæ°åè¡ããŸããããããã¯ãŸã çããŠããŸã
1.10.5ã§ãåãåé¡ã ç§ã¯ãã®åé¡ã®ãã¹ãŠã®ã¢ããã€ã¹ãçµæãªãã§è©ŠããŸããã ããããåãé€ãããšãã§ããŸããããåå空éã¯ãŸã ãã³ã°ããŠããŸãã
å®éãnsããã°ããããŠåé€ãããŸããã
ãã®åäœã®åå ãç解ããŠãããšããã§ããããç§ãæã£ãŠãããã¡ã€ãã©ã€ã¶ãŒã¯kubernetesã ãã§ãã åçãªWebhookããããŸãããããããé¢é£ä»ããããšã¯ã§ããŸããïŒ
@xetysããŠãã€ãã«ç§ã¯ãã®åå空éå ã®ã¬ããªã«ã§ããªãã®ããªãã¯ã䜿çšããŸããã ããããååšããªããªã£ãã«ã¹ã¿ã ãã¡ã€ãã©ã€ã¶ãŒãããã€ããã£ãã®ã§ãåé€ã§ããŸããã§ããã ãã®ãã¡ã€ãã©ã€ã¶ãŒãžã®åç §ãåé€ãããšããããã¯æ¶ããåå空éãæ¶ããŸããã ããããšãïŒ :)
EKS 1.10.3ã¯ã©ã¹ã¿ãŒã§ã®åãåé¡ïŒ
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-28T20:13:43Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
ãã¢ã¡ã¿ã«ã¯ã©ã¹ã¿ãŒã§ãåãåé¡ãçºçããŸãã
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
ç§ã®åå空éã¯æ¬¡ã®ããã«ãªããŸãã
apiVersion: v1
kind: Namespace
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"creneaux-app","namespace":""}}
name: creneaux-app
spec:
finalizers:
- kubernetes
ããã¯å®éãç§ããã®åé¡ãæ±ããŠãã2çªç®ã®åå空éã§ãã
ãããè©ŠããŠãåå空éå ã®ãã¹ãŠã®ãã®ã®å®éã®ãªã¹ããååŸããŠãã ããïŒ https ïŒ
次ã«ããªããžã§ã¯ãããšã«kubectl delete
ãŸãã¯kubectl edit
ãå®è¡ããŠããã¡ã€ãã©ã€ã¶ãŒãåé€ããŸãã
ã€ãã·ã£ã©ã€ã¶ãåé€ããããšã¯ç§ã®ããã«ããªãã¯ãããŸãã...
kubectl edit namespace annoying-namespace-to-delete
ãå®è¡ããŠãã¡ã€ãã©ã€ã¶ãŒãåé€ãããšã kubectl get -o yaml
確èªãããšããã¡ã€ãã©ã€ã¶ãŒãå床远å ãããŸãã
ãŸãã @ adamplã®ææ¡ã--ignore-not-found
åé€ãããšãã©ã®ã¿ã€ãã®åå空éã«ããªãœãŒã¹ãèŠã€ãããªãããšã確èªãããŸãïŒã
@ManifoldFR ãç§ã¯ããªããšåãåé¡ãæ±ããŠããŠãjsonãã¡ã€ã«ã§APIåŒã³åºããè¡ãããšã§ãããæ©èœãããããšãã§ããŸããã
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次ã«ãtmp.jsonãç·šéããŠã "kubernetes"
ãåé€ããŸã
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize
åå空éãåé€ãããŸãã
@slasshããŸããããŸããïŒ APIåŒã³åºããè¡ãããšãèããã¹ãã§ããïŒã©ããããããšãïŒ ç§ãã¡ã¯ããªãã®è³çŸãæ°žé ã«æããŸã
åé¡ã¯v1.11.1ã«ååšããŸãã dokuwikiã®ã©ã³ãã£ãŒ/ãã«ã ã®å±éãæ»ã£ãŠããŸããã @siXorã®ææ¡å¿ èŠãããã次ã«@slasshã®ã¢ããã€ã¹ã«åŸã
@slassh kubernetes-cluster-ipã®è¡šç€ºæ¹æ³ã¯ïŒ kubernetesã¯ã©ã¹ã¿ãŒreplaceããããã€ããããŒãIPã®1ã€ã䜿çšãããšã404ãå ±åãããŸãã
ããã«ã¡ã¯@ jiuchongxiao ãkubernetes-cluster-ipã«ãã£ãŠç§ã¯ããªãã®ããŒããã¹ã¿ãŒIPã®1ã€ãæå³ããŸããã
çŽããããå Žåã¯ããããªããïŒ
æåã«ãkubectlproxyããéå§ãããšãcurlãhttp://127.0.0.1ïŒ8001 / api / v1 / namespaces / annoying-namespace-to-delete / finalizeã«éä¿¡ã§ããŸãã ãã®ããã«ãããŸã§ãèªèšŒãæ©èœãããããšãã§ããŸããã§ããã
è¯ããã³ã@ 2stacksã https
ãhttp
眮ãæããã ãã§ãã
1.11.2ã§ããã®åé¡ãçºçããŠããŸãã
åçŸããããã®ããå€ãã®ã³ã³ããã¹ããäžããããã«ãç§ã¯ãããCRDã§ã®ã¿èŠãŸããã CRDãªããžã§ã¯ããåé€ãããšãCRDãªããžã§ã¯ããææãããªããžã§ã¯ããåé€ãããªããšããå¥åŠãªç¶æ
ã«ãªããŸããã æ°ã¥ããªãã£ãã®ã§ãåå空éã®åé€ãçºè¡ããŸããã 次ã«ã kubectl delete all --all -n my-namespace
ããŠåå空éå
ã®ãã¹ãŠã®ãªããžã§ã¯ããåé€ããŸããã ãã®æç¹ã§ãåå空éã®åé€ãã¹ã¿ãã¯ããŸããã ãããäœããã®åœ¢ã§åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãã°ãèŠããšããã®ç¹å®ã®åé¡ã¯ã³ã³ãããŒã©ãŒãããŒãžã£ãŒãç°åžžã§ããããšã«é¢é£ããŠããããšãããããŸããã ç§ã®å Žåãããã¯ãããããã°ã§ã¯ãããŸããã§ããã ã³ã³ãããŒã©ãããŒãžã£ãåã³èµ·åãããšããã¹ãŠãæ£ããã¯ãªãŒã³ã¢ãããããŸããã
@slasshå®ç§ãªãœãªã¥ãŒã·ã§ã³ïŒ ã©ããããããšãããããŸããïŒïŒïŒïŒ
1.10.xã§ããã®åé¡ãçºçããŸãã @slasshã®ã³ã¡ã³ãã¯ãå®éã®åé¡ãé ãã ãã®åé¿çã ãšæããŸãã åå空éãTerminating
ã¹ã¿ãã¯ããŠããã®ã¯ãªãã§ããïŒ
ç§ãã¡ã®å Žåãåå空éãåé€ããçç±ãã¹ã¿ãã¯ããŠããããšãããããŸããïŒ@palmerabolloïŒ
åå空éã«ãã¡ã€ãã©ã€ã¶ãŒkubernetes
å Žåãããã¯APIãµãŒããŒã®å
éšåé¡ãæå³ããŸãã
kubectl api-resources
å®è¡ããŸãã次ã®ããã«è¿ãããå Žåã¯ãã«ã¹ã¿ã APIã«å°éã§ããªãããšãæå³ããŸãã
error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
kubectl get apiservices v1beta1.metrics.k8s.io -o yaml
å®è¡ããŠãã¹ããŒã¿ã¹æ¡ä»¶ã確èªããŸãã
status:
conditions:
- lastTransitionTime: 2018-10-15T08:14:15Z
message: endpoints for service/metrics-server in "kube-system" have no addresses
reason: MissingEndpoints
status: "False"
type: Available
äžèšã®ãšã©ãŒã¯ãmetrics-serverã«åœ±é¿ãäžããcrashloopbackoffãåå ã§çºçããã¯ãã§ãã Kubernetesã«ç»é²ãããŠããä»ã®ã«ã¹ã¿ã APIã«ã€ããŠãåæ§ã§ãã
åå空éã®åé€ãªã©ã®ã¯ã©ã¹ã¿ãŒã©ã³ã¿ã€ã æäœã埩å
ããã«ã¯ã kube-system
ã§ãµãŒãã¹ã®ç¶æ
ã確èªããŠãã ããã
ç§ã¯v1.11.3ã§ãã®åé¡ã«çŽé¢ããŠããŸãã ãã¡ã€ãã©ã€ã¶ãŒã§ã¯ãåé¡ã®ããåå空éã«ååšããkubernetesã®ã¿ã衚瀺ãããŸãã
spec:
finalizers:
- kubernetes
@slasshçŸäžããããšããããªãã®ãœãªã¥ãŒã·ã§ã³ã¯ããŸãæ©èœããŸãïŒ
ã¢ãŒã¯ããã£ã©ãŒãã¯ããã®ã¯ã©ã¹ã¿ãŒã§ãåãåé¡ãçºçããŸãã å¥ã®åå空éã®åé€ã«åœ±é¿ãäžããçç±ã¯ããããŸããããåé¡ã¯ãšã©ãŒãçºçãããŠããkubedã®APIã§ããå¯èœæ§ããããŸãã
@javierprovechoã¡ããªãã¯ãµãŒããŒã§éãã§ããã ãã§ãæ©èœããŠããªãã£ãããããµãŒãã¹ãåé€ããããšããŸããããåå空éã¯åé€ãããŸããããšã©ãŒã¯
status:
conditions:
- lastTransitionTime: 2018-08-24T08:59:36Z
message: service/metrics-server in "kube-system" is not present
reason: ServiceNotFound
status: "False"
type: Available
ãã®ç¶æ ããå埩ããæ¹æ³ãç¥ã£ãŠããŸããïŒ
ç·šéïŒããã£ã...ã¡ããªãã¯/ HPAã«ãªã¢ãŒãã§é¢é£ãã_ãã¹ãŠ_ãåé€ããŠãããã³ã³ãããŒã«ãã¬ãŒã³å
šäœãåèµ·åããå¿
èŠããããŸããïŒåèµ·åããåã«ããã¹ãŠã®ã¬ããªã«ãåé€ããå¿
èŠããããŸããïŒãããã«ã¯ã apiservice
åé€ãå«ãŸããŸãã v1beta1.metrics.k8s.io
èªäœã
@ 2rs2ts
$ kubectl delete apiservice v1beta1.metrics.k8s.io
æ©èœããŠããªãmetrics
APIãµãŒãã¹ãåãé€ãããšã«ãããã³ã³ãããŒã©ãŒãããŒãžã£ãŒã¯å€ãåå空éãåé€ã§ããããã«ãªããŸãã
ã³ã³ãããŒã«ãã¬ãŒã³ãåèµ·åããå¿ èŠã¯ãããŸããã
@antoinecoããããå¿ èŠã§ããã apiserviceãåé€ããŠãã°ããåŸ ã¡ãŸããããã³ã³ãããŒã«ãã¬ãŒã³ãåèµ·åãããŸã§åå空éã¯åé€ãããŸããã§ããã
ãŸããå°ããªã³ãŒããŒã飲ãã§ãªã©ãã¯ã¹ããŠãããk8sãã¹ã¿ãŒããŒãã«ç§»åããŸã
ã¯ã©ã¹ã¿ã®åé¡ãããã«ãããã°ããã³èšºæããã«ã¯ããkubectlcluster-infodumpãã䜿çšããŸãã
IDãä¿åããŠãåŸã§åé€ããŸã:)
ãã¡ã€ã«ã«å ¥ããŸã
curl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.1ïŒ8001 / api / v1 / namespaces / $ {NAMESPACE} / finalize
ãããŠããã¯ãªããªã£ãð
ããããã¡ã€ãã©ã€ã¶ãŒkubernetes
ã¯çç±ããããŸãã ç§ãã¡ã«ãšã£ãŠãããã¯èª€ã£ãŠæ§æãããã¡ããªãã¯APIãµãŒãã¹åã§ããã ãã¶ãããªãã«ãšã£ãŠã¯äœãä»ã®ãã®ã§ãããããã¯ããªãã®ã³ã³ãããŒã«ãã¬ãŒã³ãã°ãèŠãããšã«ãã£ãŠçºèŠããããšãã§ããŸãã ãã°ã®ç¢ºèªãªãã«ããã¡ã€ãã©ã€ã¶ãŒãåé€ãããšãåé€ã®ç®çã§åã³ã¢ã¯ã»ã¹ã§ããªããªã£ããã®ãäœæããããŸãŸã«ãªããªã©
ãã®åé¡ã¯ãŸã éããŠããããïŒ
ãnoneãã§å®è¡ãããŠããminikubeã¯ã©ã¹ã¿ãŒå
ã§ãããã¯ãã¹ããäŒæ¢ç¶æ
ãã埩垰ããåŸã«çºçããŸããã
ç§ã®ä»®å®ïŒ
ç§ã®å ŽåãäŒæ¢ç¶æ
ãåãåé¡ãåŒãèµ·ãããŸããããæå¹ãªã¹ã¯ããã§åé¡ãçºçããŸãã
ããã¯ä»®å®ããããããŸãïŒ
圱é¿ãåããã¯ã©ã¹ã¿ãŒã§ã¹ã¯ãããæå¹ã«ãªã£ãŠããå¯èœæ§ããããŸããïŒ
ããããããã¯åãªãæšæž¬ã§ãã ç§ã«ãšã£ãŠéèŠãªããšã§ãããç§ã®ããŒã«ã«èšå®ã§ãã®ãã°ã«ééãã人ã¯èª°ã§ãïŒ
ãŸããå°ããªã³ãŒããŒã飲ãã§ãªã©ãã¯ã¹ããŠãããk8sãã¹ã¿ãŒããŒãã«ç§»åããŸã
- kubectlcluster-info
Kubernetesãã¹ã¿ãŒã¯httpsïŒ// localhost ïŒ6443ã§å®è¡ãããŠã
KubeDNSã¯httpsïŒ// localhost ïŒ6443 / api / v1 / namespaces / kube-system / services / kube- dnsïŒdns / proxyã§å®è¡ãããŠããŸãã¯ã©ã¹ã¿ã®åé¡ãããã«ãããã°ããã³èšºæããã«ã¯ããkubectlcluster-infodumpãã䜿çšããŸãã
- kube-proxyãå®è¡ããŸã
kubectlãããã·ïŒ
127.0.0.1:8001ã§ãµãŒãã¹ãéå§IDãä¿åããŠãåŸã§åé€ããŸã:)
- åé€ããªããšæ±ºããåå空éãèŠã€ããŠãã ãã:)ç§ãã¡ã«ãšã£ãŠã¯çã·ã¹ãã ã«ãªããŸã
kubectl get ns
çã·ã¹ãã ã¯1dãçµäºããŸããã¡ã€ã«ã«å ¥ããŸã
- kubectl get namespace cattle-system -o json> tmp.json
- ãã¡ã€ã«ãç·šéãããã¡ã€ãã©ã€ã¶ãŒãåé€ããŸã
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
ãkubernetesã
]
}ã
ç·šéåŸã¯æ¬¡ã®ããã«ãªããŸãð
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
]
}ã
ç§ãã¡ã¯ã»ãšãã©ããã«ããŸãðcurl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.1ïŒ8001 / api / v1 / namespaces / $ {NAMESPACE} / finalize
ãããŠããã¯ãªããªã£ãð
ãããïŒïŒ
äœå
gcloudã€ã³ã¹ã¿ã³ã¹ãå€æŽãããšïŒããŒãã®ã¢ããã°ã¬ãŒããªã©ïŒããã®åé¡ãå®æçã«çºçããŸãã ããã«ããã gcloud instances list
ã®å€ãããŒããæ°ããããŒãã«çœ®ãæããããŸãããk8såå空éã®ãããã¯ãã³ã°ãããŸãŸã«ãªããŸãã
Reason: NodeLost
Message: Node <old node> which was running pod <pod> is unresponsive
ããã«ããããããã¯äžæãªç¶æ ã®ãŸãŸã«ãªããŸãã
$ kubectl get po
NAME READY STATUS RESTARTS AGE
<pod> 2/2 Unknown 0 39d
ãã®ãããåå空éãçµäºããããšã¯ãããŸããã ããããã¡ã€ãã©ã€ã¶ãŒãå€æŽããå¿
èŠãããããšãæå³ããã®ãããããšãUNKNOWN
ç¶æ
ã§ããããåŠçããå¿
èŠãããçµäºã«é¢é£ããå®éã®ãã°ãããã®ãââïŒãŸãã¯ãã®ãããªå Žåã«åå空éã匷å¶çã«çµäºããæ¹æ³ãããã¹ããã©ããïŒã¯ããããŸããïŒã
gcloudã€ã³ã¹ã¿ã³ã¹ãå€æŽãããšïŒããŒãã®ã¢ããã°ã¬ãŒããªã©ïŒããã®åé¡ãå®æçã«çºçããŸãã ããã«ããã
gcloud instances list
ã®å€ãããŒããæ°ããããŒãã«çœ®ãæããããŸãããk8såå空éã®ãããã¯ãã³ã°ãããŸãŸã«ãªããŸããReason: NodeLost Message: Node <old node> which was running pod <pod> is unresponsive
ããã«ããããããã¯äžæãªç¶æ ã®ãŸãŸã«ãªããŸãã
$ kubectl get po NAME READY STATUS RESTARTS AGE <pod> 2/2 Unknown 0 39d
ãã®ãããåå空éãçµäºããããšã¯ãããŸããã ããããã¡ã€ãã©ã€ã¶ãŒãå€æŽããå¿ èŠãããããšãæå³ããã®ãããããšã
UNKNOWN
ç¶æ ã§ããããåŠçããå¿ èŠãããçµäºã«é¢é£ããå®éã®ãã°ãããã®ãââïŒãŸãã¯ãã®ãããªå Žåã«åå空éã匷å¶çã«çµäºããæ¹æ³ãããã¹ããã©ããïŒã¯ããããŸããïŒã
ãã£ãããããã¯åãåé¡ã§ã¯ãããŸãã
ããŒããã¡ã³ããã³ã¹ã¢ãŒãã«ããå¿
èŠããããŸããã¡ã³ããã³ã¹ã¢ãŒãã«ãããšããã¹ãŠã®ããããéé¿ããåé€/ã¢ããã°ã¬ãŒãã§ããŸãã
èŠãŠãã ããã
ãªãœãŒã¹ãç·šéããŠmetadata.finalizersãåé€ããäžèŠãªcrdãåé€ããŸãã匷å¶çã«åé€ã§ããŸãã
ãããã kubernetes
ãã¡ã€ãã©ã€ã¶ãŒã¯æ£ç¢ºã«äœãããŸããïŒ ãã®ãããã³ã°ã§ãªãœãŒã¹ãæ£ããã¯ãªãŒã³ã¢ãããããªããªã¹ã¯ã¯ãããŸããïŒ
ã«ãŒã¯ãã¹ã¿ãã¯ããŠçµäºããå Žåãããã¯https://github.com/rook/rook/blob/master/Documentation/ceph-teardown.mdã«åœ¹ç«ã¡ãŸãã
curl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json httpsïŒ// kubernetes-cluster-ip / api / v1 / namespaces / annoying-namespace-to-delete /ãã¡ã€ãã©ã€ãº
ãµãŒããŒããã®ãšã©ãŒïŒNotFoundïŒïŒåå空é "annoying-namespace-to-delete"ãèŠã€ãããŸãã
ãŸããå°ããªã³ãŒããŒã飲ãã§ãªã©ãã¯ã¹ããŠãããk8sãã¹ã¿ãŒããŒãã«ç§»åããŸã
- kubectlcluster-info
Kubernetesãã¹ã¿ãŒã¯httpsïŒ// localhost ïŒ6443ã§å®è¡ãããŠã
KubeDNSã¯httpsïŒ// localhost ïŒ6443 / api / v1 / namespaces / kube-system / services / kube- dnsïŒdns / proxyã§å®è¡ãããŠããŸãã¯ã©ã¹ã¿ã®åé¡ãããã«ãããã°ããã³èšºæããã«ã¯ããkubectlcluster-infodumpãã䜿çšããŸãã
- kube-proxyãå®è¡ããŸã
kubectlãããã·ïŒ
127.0.0.1:8001ã§ãµãŒãã¹ãéå§IDãä¿åããŠãåŸã§åé€ããŸã:)
- åé€ããªããšæ±ºããåå空éãèŠã€ããŠãã ãã:)ç§ãã¡ã«ãšã£ãŠã¯çã·ã¹ãã ã«ãªããŸã
kubectl get ns
çã·ã¹ãã ã¯1dãçµäºããŸããã¡ã€ã«ã«å ¥ããŸã
- kubectl get namespace cattle-system -o json> tmp.json
- ãã¡ã€ã«ãç·šéãããã¡ã€ãã©ã€ã¶ãŒãåé€ããŸã
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
ãkubernetesã
]
}ã
ç·šéåŸã¯æ¬¡ã®ããã«ãªããŸãð
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
]
}ã
ç§ãã¡ã¯ã»ãšãã©ããã«ããŸãðcurl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.1ïŒ8001 / api / v1 / namespaces / $ {NAMESPACE} / finalize
ãããŠããã¯ãªããªã£ãð
ç¡å¹ãªå€ïŒãç·šéããããã¡ã€ã«ã¯æ€èšŒã«å€±æããŸãããïŒValidationErrorïŒNamespace.specïŒïŒio.k8s.api.core.v1.NamespaceSpecã®ã¿ã€ããç¡å¹ã§ãïŒãæååããååŸããŸãããããããããå¿ èŠã§ãã
çµäºæã«å€ãã®åå空éãã¹ã¿ãã¯ããŠããå Žåã¯ããããèªååã§ããŸãã
kubectl get ns | grep Terminating | awk '{print $1}' | gxargs -n1 -- bash -c 'kubectl get ns "$0" -o json | jq "del(.spec.finalizers[0])" > "$0.json"; curl -k -H "Content-Type: application/json" -X PUT --data-binary @"$0.json" "http://127.0.0.1:8001/api/v1/namespaces/$0/finalize" '
ãã¡ã€ãã©ã€ã¶ãŒãåé€ãããã¹ãŠã®åå空éãå®éã«Terminating
ããšã確èªããŠãã ããã
äžèšãæ©èœãããã«ã¯ã kubectl proxy
å®è¡ãã jq
ãå®è¡ããå¿
èŠããããŸãã
ç§ãã¡ã®å Žåãã¡ããªãã¯APIãµãŒãã¹ãããŠã³ããŠããã詳现ãã°ãããã®ãšã©ãŒãã°ã確èªã§ããŸã
kubectl delete ns <namespace-name> -v=7
.......
I0115 11:03:25.548299 12445 round_trippers.go:383] GET https://<api-server-url>/apis/metrics.k8s.io/v1beta1?timeout=32s
I0115 11:03:25.548317 12445 round_trippers.go:390] Request Headers:
I0115 11:03:25.548323 12445 round_trippers.go:393] Accept: application/json, */*
I0115 11:03:25.548329 12445 round_trippers.go:393] User-Agent: kubectl/v1.11.3 (darwin/amd64) kubernetes/a452946
I0115 11:03:25.580116 12445 round_trippers.go:408] Response Status: 503 Service Unavailable in 31 milliseconds
ã¡ããªãã¯apiserviceãä¿®æ£ããåŸãã¡ããªãã¯ã®çµäºãå®äºããŸãã
åé€ãã¡ããªã¯ã¹apiserviceã«äŸåããçç±ãããããããŸããããŸããã¡ããªã¯ã¹apiserviceãã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ãããŠããªãå Žåã«ã©ã®ããã«æ©èœããããç¥ããããšèããŠããŸãã
åé€ãã¡ããªãã¯apiserviceã«äŸåããçç±ãããããããŸããã
@manojbadamã¡ããªãã¯ã¯APIãµãŒããŒã«ç»é²ãããŠãããããåå空éã®åé€ãå®è¡ãããšãã«ããã®åå空éã«é¢é£ä»ããããŠããïŒåå空éãèšå®ãããïŒãªãœãŒã¹ïŒååšããå ŽåïŒãå€éšAPIã«ç §äŒããå¿ èŠããããŸãã æ¡åŒµãµãŒããŒãå©çšã§ããªãå ŽåãKubernetesã¯ãã¹ãŠã®ãªããžã§ã¯ããåé€ãããããšãä¿èšŒã§ããŸããããŸããã«ãŒããªããžã§ã¯ããåé€ãããŠãããããåŸã§èª¿æŽããããã®æ°žç¶çãªã¡ã«ããºã ïŒã¡ã¢ãªãŸãã¯ãã£ã¹ã¯å ïŒããããŸããã ããã¯ãç»é²æžã¿ã®APIæ¡åŒµãµãŒãã¹ã§çºçããŸãã
ç§ã¯åžžã«ããã«ééããŠããã®ã§ãå°ããªã·ã§ã«ã¹ã¯ãªããã§ãããèªååããŸããïŒ
https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
ãããžã§ã¯ãããã§ããããJSONãä¿®æ£ãããkubectlãããã·ããéå§ããŠé©åã«åæ¢ããŸãâŠ
ç§ãæ£ããæ¹åã«åããŠãããã¿ããªã«æè¬ããŸãïŒ
ç§ã¯åžžã«ããã«ééããŠããã®ã§ãå°ããªã·ã§ã«ã¹ã¯ãªããã§ãããèªååããŸããïŒ
https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
ãããžã§ã¯ãããã§ããããJSONãä¿®æ£ãããkubectlãããã·ããéå§ããŠé©åã«åæ¢ããŸãâŠ
ç§ãæ£ããæ¹åã«åããŠãããã¿ããªã«æè¬ããŸãïŒ
ç§ã®ããŒããŒïŒ <3
ç§ããã®åé¡ã«ééããŸããã ç§ã¯GoogleKubernetes Engineã䜿çšããŠãããTerraformã䜿çšããŠKubernetesã¯ã©ã¹ã¿ãŒãèµ·åããã¯ã©ã¹ã¿ãŒå
ã«åå空éãšããããäœæããŠããŸãã terraform destroy
å®è¡ããåŸããã°ããããŠåé¡ãçºçããŸããã
ç§ã®å Žåãããã¯Terraformãç Žæ£ãå®è¡ããé åºã®åé¡ã§ããããšãå€æããŸããã Terraformã¯ãæåã«ããŒãããŒã«ãåé€ããŠãããåå空éãšããããåé€ããŸãã ããããïŒå¯äžã®ïŒããŒãããŒã«ãåé€ãããããKubernetesã¯ã©ã¹ã¿ãŒãå£ããåå空éã®åé€ãæ°žä¹ ã«ãçµäºãããŠã¹ã¿ãã¯ããåå ã«ãªããŸããã
@FooBarWidgetç§ã«ãšã£ãŠåãåé¡:(
ç§ã¯åžžã«ããã«ééããŠããã®ã§ãå°ããªã·ã§ã«ã¹ã¯ãªããã§ãããèªååããŸããïŒ
https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
ãããžã§ã¯ãããã§ããããJSONãä¿®æ£ãããkubectlãããã·ããéå§ããŠé©åã«åæ¢ããŸãâŠ
ç§ãæ£ããæ¹åã«åããŠãããã¿ããªã«æè¬ããŸãïŒ
[root@k8s-master ~]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://172.*****:6443/api/v1/namespaces/rook-ceph/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "namespaces "rook-ceph" is forbidden: User "system:anonymous" cannot update namespaces/finalize in the namespace "rook-ceph"",
"reason": "Forbidden",
"details": {
"name": "rook-ceph",
"kind": "namespaces"
},
"code": 403
ãªã¿ãŒã³ã³ãŒã403ãåãåããŸãããã©ãããã°ããã§ãã:(
ç§ã¯åžžã«ããã«ééããŠããã®ã§ãå°ããªã·ã§ã«ã¹ã¯ãªããã§ãããèªååããŸããïŒ
https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
ãããžã§ã¯ãããã§ããããJSONãä¿®æ£ãããkubectlãããã·ããéå§ããŠé©åã«åæ¢ããŸãâŠ
ç§ãæ£ããæ¹åã«åããŠãããã¿ããªã«æè¬ããŸãïŒ[root@k8s-master ~]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://172.*****:6443/api/v1/namespaces/rook-ceph/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "namespaces "rook-ceph" is forbidden: User "system:anonymous" cannot update namespaces/finalize in the namespace "rook-ceph"", "reason": "Forbidden", "details": { "name": "rook-ceph", "kind": "namespaces" }, "code": 403
ãªã¿ãŒã³ã³ãŒã403ãåãåããŸãããã©ãããã°ããã§ãã:(
ç¥ããçµäºããåå空éã¯ã€ãã«ãªããªããŸããã 次ã®æ¹æ³ã¯ç§ã«ãšã£ãŠããªãã¯ã§ãã
NAMESPACE=rook-ceph
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
åãåé¡ããããŸãããmetrics-serviceã衚瀺ãããŸããã
ç§ã¯digitaloceanãšgitlabautodevopsã®k8sã§éãã§ããŸãã ç§ã®ä»®å®ã¯ããã€ãã®ããžã¿ã«ãªãŒã·ã£ã³ãããã¹ãã¬ãŒãžã§ããããããåæãŸãã¯ä¿®æ£ããæ¹æ³ã«è¿·ã£ãŠããŸãã
@mingxingshitx ã ããªãã¯ãè¡ããªãã£ãåå空éãç·šéããŸããã ããªãã®ã¹ã¯ãªããã¯ãããããŸããã
ãããŒãã€ãã«ãããåãé€ããŸããã ã³ãã³ã@mingxingshiãããããšãïŒ
ç§ã«ãšã£ãŠã®è§£æ±ºçã¯æ¬¡ã®ãšããã§ãã
kubectl delete apiservice v1beta1.metrics.k8s.io
ç§ã¯ããã®ç§ã®çµéšãããã«æ®ãã¹ãã ãšèããŸããïŒ
ç§ã¯æ¬¡ã®ãªãœãŒã¹ã§terraform apply
ããŠããŸããïŒ
resource "helm_release" "servicer" {
name = "servicer-api"
// n.b.: this is a local chart just for this terraform project
chart = "charts/servicer-api"
namespace = "servicer"
...
}
ããããç§ã¯èµåãã®åå¿è
ã§ã servicer
ãšããåå空éãäœæãããã³ãã¬ãŒããå«ããã³ãã¬ãŒããæã£ãŠããŸããã ããã«ãããterraformãšk8sããã®æªãç¶æ
ã«ãªããterraformã倱æããk8sã¯servicer
åå空éãTerminating
ç¶æ
ã®ãŸãŸã«ããŸãã @mingxingshiãäžèšã§ææ¡ããããšãå®è¡ãããšããªãœãŒã¹ãã¢ã¿ãããããŠããªããããåå空éãçµäºããŸããã
ãã®åé¡ã¯ãåå空éãäœæãããã³ãã¬ãŒããåé€ãããããäœæããããã«èµåãã«ä»»ãããšãã«çºçããªããªããŸããã
åé¡ã¯ç§ã«ãšã£ãŠå®å šã«åçŸå¯èœã§ãã ãŸãã prometheus-operatorã®ã¯ããŒã³ãäœæããŸãã 次ã«ïŒ
cd prometheus-operator/contrib/kube-prometheus
kubectl create -f manifests/ --validate=false
... wait ...
kubectl delete namespace monitoring
ãã³ã°ããŸãã ãã ãã kubectl delete -f manifests/
ã䜿çšãããšãã¯ãªãŒã³ã¢ããã¯æåããŸãã
ãããããã¡ããŠã¹-ãªãã¬ãŒã¿ãŒãšåããã³ã°ãããŸããã ã¹ã¿ãã¯ã解é€ããã«ã¯ã kubectl delete -f manifests/
ããå¿
èŠããããŸãã
ããã¡ããŠã¹CRDã«ã¯ã誀åäœããŠãããã¡ã€ãã©ã€ã¶ãŒãããã€ããããšæããŸãããã®ç¹å®ã®ã·ããªãªã§ã¯ãkubernetesã®é害ã¯ã»ãšãã©ãããŸããã ãã ããkubernetesã䜿çšãããšãåå ãç°¡åã«èŠã€ããããšãã§ããŸãããã®ã¹ã¬ããã®é·ãã¯ãå€ãã®åå ãèããããããšã瀺ããŠãããç¹å®ã®ã·ããªãªããšã«ãã®åå ãçªãæ¢ããã®ã¯ç°¡åã§ã¯ãªãããã§ãã
ç§ã¯kubernetesnoobãªã®ã§ãããã§ã¯å€ãã®æ å ±ãæäŸã§ããŸãããã2ã€ã®åå空éãçµäºã¹ããŒã¿ã¹ã§ã¹ã¿ãã¯ããŠããŸãã ç§ã®kubernetesã»ããã¢ããã¯IBMCloud Private 3.1.2 CommunityEditionã䜿çšããŠããŸã
kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4+icp", GitCommit:"3f5277fa129f05fea532de48284b8b01e3d1ab4e", GitTreeState:"clean", BuildDate:"2019-01-17T13:41:02Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4+icp", GitCommit:"3f5277fa129f05fea532de48284b8b01e3d1ab4e", GitTreeState:"clean", BuildDate:"2019-01-17T13:41:02Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
kubectl cluster-info
Kubernetes master is running at https://ip
catalog-ui is running at https://ip/api/v1/namespaces/kube-system/services/catalog-ui:catalog-ui/proxy
Heapster is running at https://ip/api/v1/namespaces/kube-system/services/heapster/proxy
image-manager is running at https://ip/api/v1/namespaces/kube-system/services/image-manager:image-manager/proxy
CoreDNS is running at https://ip/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
metrics-server is running at https://ip/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
platform-ui is running at https://ip/api/v1/namespaces/kube-system/services/platform-ui:platform-ui/proxy
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip1 Ready,SchedulingDisabled etcd,management,master,proxy 23h v1.12.4+icp
ip2 Ready worker 23h v1.12.4+icp
ip3 Ready worker 23h v1.12.4+icp
2ã€ã®åå空éãçµäºç¶æ ã§ã¹ã¿ãã¯ããŠããŸã
kubectl get ns
NAME STATUS AGE
my-apps Terminating 21h
cert-manager Active 23h
default Active 23h
istio-system Active 23h
kube-public Active 23h
kube-system Active 23h
platform Active 22h
psp-example Terminating 18h
services Active 22h
ãã®ã³ã¡ã³ãã§èª¬æãããŠããããã«ãã¡ã€ãã©ã€ã¶ãŒã確èªãããšã kubernetes
ãã衚瀺ãããŸããã
kubectl get ns my-apps -o yaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"my-apps"}}
creationTimestamp: 2019-04-10T18:23:55Z
deletionTimestamp: 2019-04-11T15:24:24Z
name: my-apps
resourceVersion: "134914"
selfLink: /api/v1/namespaces/my-apps
uid: ccb0398d-5bbd-11e9-a62f-005056ad5350
spec:
finalizers:
- kubernetes
status:
phase: Terminating
ãã¡ã€ãã©ã€ã¶ãŒããkubernetes
ãåé€ããããšããŸããããæ©èœããŸããã§ããã ãŸãããã®ã³ã¡ã³ãã§èª¬æãããŠããjson / apiã¢ãããŒãã䜿çšããŠã¿ãŸããã ãŸããåäœããŸããã§ããã ãã¹ãŠã®ããŒããåèµ·åããããšããŸãããããããæ©èœããŸããã§ããã
ãŸãã匷å¶åé€ãå®è¡ããããšããŸãããããããæ©èœããŸãã
kubectl delete namespace my-apps --force --grace-period 0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (Conflict): Operation cannot be fulfilled on namespaces "my-apps": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.
ç§ã®å Žåãåå空éã¯rook-cephã§ã kubectl -n rook-ceph patch cephclusters.ceph.rook.io rook-ceph -p '{"metadata":{"finalizers": []}}' --type=merge
æ©èœããŸãã ãã以å€ã®å Žåãæ©èœããã¯ãã§ãã
å·®åºäººïŒ https ïŒ
@ManifoldFR ãç§ã¯ããªããšåãåé¡ãæ±ããŠããŠãjsonãã¡ã€ã«ã§APIåŒã³åºããè¡ãããšã§ãããæ©èœãããããšãã§ããŸããã
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次ã«ãtmp.jsonãç·šéããŠã"kubernetes"
ãåé€ããŸã
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize
åå空éãåé€ãããŸãã
ããªãã®ã¢ãããŒãã䜿çšããŠãããšãã«åé¡ãçºçããŸããã次ã®ã¹ãããã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ããã«äœãããã°ããã§ããïŒ
~ curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://39.96.4.11:6443/api/v1/namespaces/istio-system/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "namespaces \"istio-system\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"istio-system\"",
"reason": "Forbidden",
"details": {
"name": "istio-system",
"kind": "namespaces"
},
"code": 403
@ManifoldFR ãç§ã¯ããªããšåãåé¡ãæ±ããŠããŠãjsonãã¡ã€ã«ã§APIåŒã³åºããè¡ãããšã§ãããæ©èœãããããšãã§ããŸããã
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次ã«ãtmp.jsonãç·šéããŠã"kubernetes"
ãåé€ããŸãcurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize
åå空éãåé€ãããŸããããªãã®ã¢ãããŒãã䜿çšããŠãããšãã«åé¡ãçºçããŸããã次ã®ã¹ãããã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ããã«äœãããã°ããã§ããïŒ
~ curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://39.96.4.11:6443/api/v1/namespaces/istio-system/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "namespaces \"istio-system\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"istio-system\"", "reason": "Forbidden", "details": { "name": "istio-system", "kind": "namespaces" }, "code": 403
ç§ã®åé¡ã¯æ¬¡ã®ã¹ã¯ãªããã§è§£æ±ºã§ããŸãïŒ https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
ã
ããhttps://github.com/ctron/kill-kube-ns/blob/master/kill-kube-nsã¯ããªãã¯ãè¡ããŸã
set -eo pipefail
die() { echo "$*" 1>&2 ; exit 1; }
need() {
which "$1" &>/dev/null || die "Binary '$1' is missing but required"
}
# checking pre-reqs
need "jq"
need "curl"
need "kubectl"
PROJECT="$1"
shift
test -n "$PROJECT" || die "Missing arguments: kill-ns <namespace>"
kubectl proxy &>/dev/null &
PROXY_PID=$!
killproxy () {
kill $PROXY_PID
}
trap killproxy EXIT
sleep 1 # give the proxy a second
kubectl get namespace "$PROJECT" -o json | jq 'del(.spec.finalizers[] | select("kubernetes"))' | curl -s -k -H "Content-Type: application/json" -X PUT -o /dev/null --data-binary @- http://localhost:8001/api/v1/namespaces/$PROJECT/finalize && echo "Killed namespace: $PROJECT"
åå空éã¯å®éã«ã¯åé€ãããŠããªãããã§ãã
ç§ã®å Žåã kubectl get ns
ã¯åé€ãããåå空éã衚瀺ããŸãããã kubectl get all -n <namespace>
ã¯ãã¹ãŠã®ãªãœãŒã¹ãå®å
šã§å¥å
šã§ããããšã瀺ããŸãã
ããŒãã確èªããŸããããDockerã³ã³ããã¯ãŸã å®è¡ãããŠããŸãã...
@glouisã¯ãäžèšã®æ¹æ³ã䜿çšããŠãã¡ã€ãã©ã€ã¶ãŒããã€ãã¹ãããããKubernetesã«ã¯ãããã®éèŠãªåé€ã¿ã¹ã¯ããã¹ãŠå®è¡ããæéããããŸããã§ããã
å€ãã®äººããã®çµæãç解ããã«ãã®æ¹æ³ãç²ç®çã«äž»åŒµããŠããã®ãèŠãã®ã¯æ¬åœã«æ²ããããšã§ãã ããã¯éåžžã«éããã¯ã©ã¹ã¿ãŒã«å€§éã®æ®ãç©ãæ®ãå¯èœæ§ããããŸãã @javierprovechoã¯ãã§ã«äžèšã§èšåããŠããã @ liggittã¯å¥ã®GitHubã®åé¡ã§ãèšåããŠããŸãã
å£ããv1beta1.metrics.k8s.io
APIãµãŒãã¹ãä¿®æ£ããããäžèŠãªå Žåã¯åé€ããããšããå§ãããŸãã
ïŒ73405ãåç §ããŠãã ãã
2çªç®ã®@antoinecoã¡ãã»ãŒãžã åå空éãåžžã«ã¹ã¿ãã¯ããŠããããããµã³ãããã¯ã¹ç°å¢ã®1ã€ã§ããããã¹ãããŸããã çŽ1ãæåŸããã¹ãŠã®DockerããŒã¢ã³ãçç±ããªãããªãŒãºããŸããã ãªãœãŒã¹ãæ®ããŠããããšã§ã倧éã®ã¡ã¢ãªãªãŒã¯ãçºçããããšãããããŸããã
å€ãã®è©Šè¡é¯èª€ã®æ«ããããã®ã³ã¡ã³ããèªãã çµæãåå空éã®coreosgrafanaã¹ã¿ãã¯ã®ã«ã¹ã¿ã ãªãœãŒã¹å®çŸ©ã§ããããšãå€æããŸããã CRDãäžèŠ§è¡šç€ºãããšããã®åå空éã®ç¹å®ã®ãªãœãŒã¹ã衚瀺ãããŸããã CRDã®ååã«åå空éãè©°ãŸã£ãŠããã®ã¯ãšãŠã幞éã§ããã
ãŸããã¹ã¿ãã¯ããåå空éã1ã€ãããšãåé€ããåå空éããã以äžåæ¢ããããšãå€æããŸããã ãããã£ãŠãCRDãã¹ã¿ãã¯ããŠããªãåå空éAããããCRDãã¹ã¿ãã¯ããŠããåå空éBãããå Žåã§ããAã®ãã¹ãŠã®ãªãœãŒã¹ã¯BããªããªããŸã§æ®ããŸãã åå空éAã§äžèšã®ä¿®æ£ãè¡ã£ãã«éããªããšæããŸãããæ¯å倧éã®ãªãœãŒã¹ãæ®ã£ãŠããŸãã
ãŸã ç§ã殺ããŠããã®ã¯ãCRDã®åé€ã«å€±æããåå空éã®ã¯ãªãŒã³ã¢ããããŸãã¯çŸåšå®è¡ããŠããããšã瀺ããã°ãäžçèŠã€ããããšãã§ããªãããšã§ãã ç§ã¯ãããã©ã®CRDã«åºå·ããŠããããç解ããããã ãã«1æéãè²»ãããªããã°ãªããŸããã§ããã 誰ããããå€ãã®æ å ±ãååŸããæ¹æ³ã«ã€ããŠã¢ã€ãã¢ãæã£ãŠããã®ã§ãç§ã¯çŽ æŽãããã ããã¹ã¿ãã¯ããããªãœãŒã¹ãç解ããããã«èšå€§ãªæéãè²»ããå¿ èŠã¯ãããŸããã
@jecafarelliæ¬çªã¯ã©ã¹ã¿ãŒã®è¯ããã³ãã ããããç§ã«ãšã£ãŠæ®å¿µãªããšã«ãç§ã¯ãã以å€ã®æ¹æ³ã§ããã殺ãããšãã§ããŸããã§ããã ãŸããåŸã§ã¯ã©ã¹ã¿ãŒå šäœãåäœæããããšãããã£ãŠããŸããã
ç§ã¯åé¡ãåæããããšããŸãããããã®ã¹ã¬ããã§ã¯ä»ã®æ¹æ³ã§åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸããã§ããã
ãã®å
¬åŒãœãªã¥ãŒã·ã§ã³ã¯ç§ãå©ããŸããïŒ https ïŒ
ããã¯kubectl edit namespace rook-ceph
ãšåãã§ã¯ãããŸããã _ "finalizers" _ãåé€ããŠPUT
ãªã¯ãšã¹ããããŸã§ããã®åé¡ã解決ã§ããŸããã§ããã
ããŠãcoreosã§ããã«åã³ééããããå°ãæ·±ãæãäžããŸããã ããã¯ãåå空éãèšå®ãããã¯ã©ã¹ã¿ãŒå šäœã®ãªãœãŒã¹å®çŸ©ãåå ã§ããããšãæã確å®ã§ãããããã«ãcoreosã®æ å ±ãç §äŒã§ããªããããåé€ã§ããªãã£ãå¯èœæ§ããããŸãã apiã°ã«ãŒãã«é¢ããæ å ±ãååŸããããšãããšãã«ãšã©ãŒã瀺ãããšã©ãŒãapiserverãã°ã§èŠã€ããŸããã äžèšã®åé¡ã䜿çšããŠãnsãã¹ã¿ãã¯ããåå ãšãªã£ããªãœãŒã¹ãäžèŠ§è¡šç€ºããç°¡åãªã¹ã¯ãªãããäœæããŸããã
ç§ãåã³ããã«ééããç§ãééããä»ã®åå空éãªãœãŒã¹ãè¿œå ãç¶ããå Žåãããããå°æ¥ããã䜿çšããã ãã§ãã
for ns in `kubectl get ns --field-selector status.phase=Terminating -o name | cut -d/ -f2`;
do
echo "apiservice under namespace $ns"
kubectl get apiservice -o json |jq --arg ns "$ns" '.items[] |select(.spec.service.namespace != null) | select(.spec.service.namespace == $ns) | .metadata.name ' --raw-output
echo "api resources under namespace $ns"
for resource in `kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -o name -n $ns`;
do
echo $resource
done;
done
ã©ããããããšã
cert-manageråå空éå
ã®OpenShiftã¯ã©ã¹ã¿ãŒã«cert-managerãã€ã³ã¹ããŒã«ããŸãããããã®åå空éãåé€ããããšãããšãçµäºç¶æ
ã§ã¹ã¿ãã¯ããŸããã oc delete apiservices v1beta1.admission.certmanager.k8s.io
å®è¡ãããšåé¡ã解決ããããã§ãåå空éã¯ãªããªããŸããã
ã©ããããããšã
cert-manageråå空éå ã®OpenShiftã¯ã©ã¹ã¿ãŒã«cert-managerãã€ã³ã¹ããŒã«ããŸãããããã®åå空éãåé€ããããšãããšãçµäºç¶æ ã§ã¹ã¿ãã¯ããŸããã
oc delete apiservices v1beta1.admission.certmanager.k8s.io
å®è¡ãããšåé¡ã解決ããããã§ãåå空éã¯ãªããªããŸããã
ããã§ãåãã§ããã kubectl delete -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.8/deploy/manifests/00-crds.yaml
ãå®è¡ãããšåœ¹ã«ç«ã¡ãŸãã
GKEã®ããŒãžã§ã³1.13.6
ã§ããã®ãšã©ãŒãçºçãããšèšã£ãŠããã£ã€ã ã鳎ãããŸãã ããã¯ãå®å
šã«å¶åŸ¡ããããã«æåã§ã€ã³ã¹ããŒã«ããããšãç®çãšããŠãGKEã®Istioã¢ããªã³ãç¡å¹ã«ããåŸã«çºçããŸããã
ããã¯ç§ããããŸã§èªãã äžã§æãé·ãåé¡ã®ã¹ã¬ããã§ããããã®åé¡ã®æ ¹æ¬ã«çã®ã³ã³ã»ã³ãµã¹ãåçŸæé ããªãããšã«é©ããŠããŸãã ããã¯éåžžã«å€ãã®ç°ãªãæ¹æ³ã§ã€ãŸããå¯èœæ§ãããããã§ã:(
äžèšã§äœåºŠãèšåããã httpsïŒ//success.docker.com/article/kubernetes-namespace-stuck-in-terminationã«ææžåãããŠããJSONããã³curl / proxyã¡ãœããã¯ãç§ãæã£ããã®ã§ãã
https://success.docker.com/article/kubernetes-namespace-stuck-in-terminationã§ã®ã¢ããã€ã¹ã¯ç©æ¥µçã«æ害ã§ãããåãååã®åå空éãåŸã§åäœæãããå Žåãå€ç«ãããªãœãŒã¹ãã¯ãªãŒã³ã¢ãããããŠå衚瀺ãããªãå¯èœæ§ããããŸãã
ãã³ã°ããåé€ã®ç¹å®ã®åå ãæããã«ããããã®äœæ¥ãé²è¡äžã§ãããæ ¹æ¬çãªåé¡ã¯ãã¯ãªãŒã³ã¢ãããããããšã確èªã§ããªãAPIã¿ã€ãããããããåå空éã®åé€ã¯ç¢ºèªããããŸã§ãããã¯ãããããšã§ãã
ãŸãããã®åå空éä»ãapiserviceãã€ã³ã¹ããŒã«ããKnativeã§ããããããããŸããã
---
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
labels:
autoscaling.knative.dev/metric-provider: custom-metrics
serving.knative.dev/release: v0.7.1
name: v1beta1.custom.metrics.k8s.io
spec:
group: custom.metrics.k8s.io
groupPriorityMinimum: 100
insecureSkipTLSVerify: true
service:
name: autoscaler
namespace: knative-serving
version: v1beta1
versionPriority: 100
---
ãããåé€ããåŸãknative-servingnsãšä»ã®ã¹ã¿ãã¯ããåå空éã®æã®äž¡æ¹ãã¯ãªãŒã³ã¢ãããããŸããã äžèšã®bashã¹ã¯ãªãããæäŸããŠããã
ããã¯ã²ã©ãPowerShellããŒãžã§ã³ã§ãã
$api = kubectl get apiservice -o json | convertfrom-json
#list out the namespaced api items can ignore kube-system
$api.items | % { $_.spec.service.namespace }
#repalce knative-serving with whatever namespace you found
$api.items | ? { $_.spec.service.namespace -eq 'knative-serving' } | ConvertTo-Json
#replace v1beta1.custom.metrics.k8s.io with whatever you found.
k delete apiservice v1beta1.custom.metrics.k8s.io
ç§ã¯ä»æ¥åãåé¡ãæ±ããŠããŸããããããŠãã®ã¹ã¯ãªããã¯ç§ã®ããã«åããŸããã
@ kubernetes / sig-api-machinery-misc
ãã®ãã°ã¯1幎以äžååšãããŸã åé¡ã§ã...ãã®ãããªã€ã³ããŠã³ãã®åé¡ã«å¯ŸåŠããããã®èšç»ã¯äœã§ããïŒ
ããã¯ãå°ãªããšãäœãèµ·ãã£ãŠããã®ããç解ããã®ã«åœ¹ç«ã¡ãŸãïŒ //github.com/kubernetes/kubernetes/pull/80962
ç§ã¯åãåé¡ã«ã¶ã€ãã£ãŠããŸã
k get ns cdnamz-k8s-builder-system -o yaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"labels":{"control-plane":"controller-manager"},"name":"cdnamz-k8s-builder-system"}}
creationTimestamp: "2019-08-05T18:38:21Z"
deletionTimestamp: "2019-08-05T20:37:37Z"
labels:
control-plane: controller-manager
name: cdnamz-k8s-builder-system
resourceVersion: "5980028"
selfLink: /api/v1/namespaces/cdnamz-k8s-builder-system
uid: 3xxxxxxx
spec:
finalizers:
- kubernetes
status:
phase: Terminating
k get ns
NAME STATUS AGE
cdnamz-k8s-builder-system Terminating 4h20m
åå空éã³ã³ãããŒã©ãŒã¯åå空éã¹ããŒã¿ã¹ã«æ¡ä»¶ãå ±åããå¿ èŠããããã¯ã©ã€ã¢ã³ãã¯ãããå ±åããå¿ èŠããããŸãã KEPãå¿ èŠã§ããã誰ãããããååŸããŠæ€èšŒã§ããã®ã§ããã°ãããªãç°¡åãªã¯ãã§ãã
@timothyscã¯ã @ smarterclaytonã®èšãããšãæ£ç¢ºã«å®è¡ããŠããPRãïŒã©ããã§ïŒé£è¡äžã§ãïŒãŸãã¯ãããŸããïŒã
ããã«ã€ããŠãå¥ã®githubã®åé¡ããããšç¢ºä¿¡ããŠããŸããïŒ
ãããç§ãå©ãããªãœãŒã¹ã§ãïŒ https ïŒ
ããã¯@slasshã«ãã£ãŠææ¡ããããœãªã¥ãŒã·ã§ã³ã«äŒŒãŠããŸããã kubectl proxy
ã䜿çšããŠããŒã«ã«ãããã·ãäœæãã curl
ã³ãã³ãã®ã¿ãŒã²ããIPãäºæž¬å¯èœã«ããŸãã
-
ç·šéïŒãã®åçã®äžã§æ°åè¿°ã¹ãããã«ããã®ãœãªã¥ãŒã·ã§ã³ã¯ããŒãã£ããã¯ã§ãããã¯ã©ã¹ã¿ãŒå ã«ããã€ãã®äŸåãªãœãŒã¹ãæ®ãå¯èœæ§ããããŸãã ãèªèº«ã®è²¬ä»»ã§äœ¿çšããŠãã ããããããããéçºã¯ã©ã¹ã¿ãŒã§ã®è¿ éãªæ¹æ³ãšããŠã®ã¿äœ¿çšããŠãã ããïŒæ¬çªã¯ã©ã¹ã¿ãŒã§ã¯äœ¿çšããªãã§ãã ããïŒã
äžèšã®ããã¥ã¡ã³ãã§èª¬æãããŠããããã«ãã¡ã€ãã©ã€ã¶ãŒãçŽæ¥åé€ãããšãçµæãçããå¯èœæ§ããããŸãã åé€ãä¿çããŠãããªãœãŒã¹ã¯ãåå空éã解æŸãããåŸãã¯ã©ã¹ã¿ãŒå ã§å®çŸ©ãããŸãã ããããã¡ã€ãã©ã€ã¶ãŒã®ç®çã§ãã nsã®åé€ãèš±å¯ããåã«ããã¹ãŠã®äŸåé¢ä¿ãåé€ãããŠããããšã確èªããŸãã
åæ§ã®è³ªåã§åé¿çãèŠã€ãããŸããïŒ
NAMESPACE=<namespace-name>
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
åæ§ã®è³ªåã§åé¿çãèŠã€ãããŸããïŒ
NAMESPACE=<namespace-name> kubectl proxy & kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
ããããšãããããŸããïŒ
ããã¯ããŸããããŸãã
ãã®åé¿çã䜿çšããŠç°¡åãªã¢ããªãäœæããŸãïŒ https ïŒ
ç§ã¯ãããè¿
éãªåé€ã«äœ¿çšãã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
Kubernetes1.12.2åå空éã¯çµäºç¶æ ã§ãã nsã®yamlãå€æŽããããšã§ããã¡ã€ãã©ã€ã¶ãŒãåé€ã§ããå ŽåããããŸãã APIã§åé€ããããšã¯ã§ããŸããã åé€ã§ããŸããïŒ ã©ã®ãããªç¶æ³ã§ããïŒ å ·äœçã«è¿œè·¡ããŸãããïŒåææ¡ä»¶ïŒãã®nsã«ã¯ãªãœãŒã¹ããããŸããïŒããã€ã³ã¿ãŒãååŸã§ããããšãé¡ã£ãŠããŸããããããšãããããŸãïŒ
ç¹°ãè¿ãã«ãªããŸããããã¡ã€ãã©ã€ã¶ãŒãåé€ããªãã§ãã ãããçç±ããããŸãã 代ããã«ãNSå ã®ã©ã®ãªãœãŒã¹ãåé€ãä¿çããŠãããã確èªããŠãã ããã
kubectl get apiservice|grep False
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete
ãä»ããŠãŸã ååšãããã¹ãŠã®ãªãœãŒã¹ãæ€çŽ¢ãããã®åé¡ã®è§£æ±ºçã¯ãã¯ãªãŒã³ã¢ããã¡ã«ããºã ãç絡ããããšã§ã¯ãªããã¯ãªãŒã³ã¢ãããæåããªãåå ãèŠã€ããããšã§ãã
ç¹°ãè¿ãã«ãªããŸããããã¡ã€ãã©ã€ã¶ãŒãåé€ããªãã§ãã ãããçç±ããããŸãã 代ããã«ãNSå ã®ã©ã®ãªãœãŒã¹ãåé€ãä¿çããŠãããã確èªããŠãã ããã
- å©çšã§ããªãããã«ãªãœãŒã¹ãæäŸããŠããªãapiserviceããããã©ããã確èªããŸãïŒ
kubectl get apiservice|grep False
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete
ãä»ããŠãŸã ååšãããã¹ãŠã®ãªãœãŒã¹ãæ€çŽ¢ãããã®åé¡ã®è§£æ±ºçã¯ãã¯ãªãŒã³ã¢ããã¡ã«ããºã ãç絡ããããšã§ã¯ãªããã¯ãªãŒã³ã¢ãããæåããªãåå ãèŠã€ããããšã§ãã
ããªãã¯ã©ãã»ã©æ£ãããã
ç§ã®å ŽåãOperator Framework apiserviceã®ããããåé€ãããçµäºããã»ã¹ããããã¯ãããŸããã
æªäœ¿çšã®apiserviceãåé€ããŸãïŒkubectl delete apiservice
ã¿ãªãããããã«ã¡ã¯ãã³ãŒãã®ããªãŒãºã¯ã»ãã®æ°æ¥ïŒæšææ¥ã1æ¥ã®çµãããPSTïŒã§çºçããããããã®åé¡ãv1.16ã§è§£æ±ºãããããv1.17ã«ç§»è¡ãããããšã確èªããå¿ èŠããããŸãã ãã®ç¶æ³ã«ã€ããŠã³ã¡ã³ãã§ããŸããïŒ
ããã¯çŸåšã®GKEãªãªãŒã¹ã«ããã¯ããŒããããŸããïŒ ãŸã ãçµäºãããŠããåå空éãããã€ãããã¯ã©ã¹ã¿ãŒããããŸãã
ãããè¡ã£ãåŸã§ã@squarelover ïŒ https://github.com/kubernetes/kubernetes/issues/60807#issuecomment -524772920
@josiahbjorgaardç§ã¯PRãæ¿èªããŸãããããã¯ã1.16ã§ããã«å¯ŸããŠè¡ããã¹ãŠã®ããšã§ãã
https://github.com/kubernetes/kubernetes/pull/73405ã¯åè¿°ã®PRã§ã
çµ±åãããŸããã ãã£ãšã§ããããšã¯ãããšæããŸãããä»åŸã®ã³ã¡ã³ãã¯ïŒ70916ãŸã§ã©ããã
ç¹°ãè¿ãã«ãªããŸããããã¡ã€ãã©ã€ã¶ãŒãåé€ããªãã§ãã ãããçç±ããããŸãã 代ããã«ãNSå ã®ã©ã®ãªãœãŒã¹ãåé€ãä¿çããŠãããã確èªããŠãã ããã
- å©çšã§ããªãããã«ãªãœãŒã¹ãæäŸããŠããªãapiserviceããããã©ããã確èªããŸãïŒ
kubectl get apiservice|grep False
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete
ãä»ããŠãŸã ååšãããã¹ãŠã®ãªãœãŒã¹ãæ€çŽ¢ãããã®åé¡ã®è§£æ±ºçã¯ãã¯ãªãŒã³ã¢ããã¡ã«ããºã ãç絡ããããšã§ã¯ãªããã¯ãªãŒã³ã¢ãããæåããªãåå ãèŠã€ããããšã§ãã
å€ãã®å ŽåãMetric-Serverãã€ã³ã¹ããŒã«ãããŠããå¯èœæ§ããããŸãã ç¹å®ã®åå空éã«ãããã€ããããããã¡ããªãã¯åéãæ¢ãå Žåã Metric-serverã§ãã³ã°ããŸãã ãããã£ãŠããã®åå空éå
ã®ãã¹ãŠã®ãªãœãŒã¹ãåé€ããåŸã§ããmetric-serverã¯äœããã®åœ¢ã§ãã®åå空éã«ãªã³ã¯ãããŸãã ããã«ãããåå空éãåé€ã§ããªããªããŸãã
ãã®æçš¿ã¯ãããŒã ã¹ããŒã¹ãåé€ã§ããªãçç±ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã ã ããååŒã®æ¹æ³ã
ãããè©ŠããŠãåå空éå ã®ãã¹ãŠã®ãã®ã®å®éã®ãªã¹ããååŸããŠãã ããïŒ kubernetes / kubectlïŒ151ïŒã³ã¡ã³ãïŒ
次ã«ããªããžã§ã¯ãããšã«
kubectl delete
ãŸãã¯kubectl edit
ãå®è¡ããŠããã¡ã€ãã©ã€ã¶ãŒãåé€ããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ç§ã«ãšã£ãŠåœ¹ã«ç«ã¡ãŸãããããããšãã
ããã«ã¡ã¯ãã¿ããªã
çµäºã¹ããŒã¿ã¹ã®åå空éãç°¡åã«åé€ã§ããããã«ããã¹ã¯ãªãããäœæããŸããïŒ https ïŒ
ããããšãã
åãåé¡ãçºçããŸãããåå空éãåé€ãããšããçµäºãç¶æ ã®ãŸãŸã«ãªããŸãã äžèšã®æé ã«åŸã£ãŠãyamlãã¡ã€ã«ã®ãã¡ã€ãã©ã€ã¶ãŒã®ãkubernetesããåé€ããŸããã ã§ããŸãã
ãã ãããªãè¿œå ã®æé ãå®è¡ããå¿ èŠãããã®ãââããããŸããã kubectl delete ns foonamespaceãå®è¡ããåé€ããå¿ èŠããããŸãã 誰ãç§ã«çç±ãæããŠããããŸããïŒ ããããšãããããŸããïŒ
ããã«ã¡ã¯@ xzhang007 ã
åå空éã®åé€ãçµäºç¶æ ã®ãŸãŸã«ãªãçç±ãçºèŠããå Žåã¯ããç¥ãããã ããã ç§ã¯ãã°ããã®éè¯ãçããè©ŠããŸããããäœãããŸããã§ããã 次ã«ãåå ãèŠã€ããŠä¿®æ£ãããŸã§ãèªåã®ç掻ã楜ã«ããã¹ã¯ãªãããäœæããŸããã
ããããšãããããŸããã
@thyalesä»ãŸã§çããèŠã€ãããªãã£ãããã§ãã
ç§ãã¡ã®å Žåãç§ãã¡ãããwebhhoksãšãã¡ã€ãã©ã€ã¶ãŒã®1ã€ãçºèŠããŸãã
䜿çšããããšã¯ãååŸããåå空éã«äœãã§ãããããã«æãå·®ã䌞ã¹ãããšã§ãã
åé€ãããŸããã
ããããåé€ããããšãçµäºãã¹ã¿ãã¯ããŸããã
>>
@ xzhang007ããªããæäŸããåç@alvaroalemanã§èŠãããšããããŸããïŒ ç§ãã¡ã«ãšã£ãŠãããã¯åå ãäœã§ããããèŠã€ããã®ã«ååã§ããã
ç¹°ãè¿ãã«ãªããŸããããã¡ã€ãã©ã€ã¶ãŒãåé€ããªãã§ãã ãããçç±ããããŸãã 代ããã«ãNSå ã®ã©ã®ãªãœãŒã¹ãåé€ãä¿çããŠãããã確èªããŠãã ããã
- å©çšã§ããªãããã«ãªãœãŒã¹ãæäŸããŠããªãapiserviceããããã©ããã確èªããŸãïŒ
kubectl get apiservice|grep False
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete
ãä»ããŠãŸã ååšãããã¹ãŠã®ãªãœãŒã¹ãæ€çŽ¢ãããã®åé¡ã®è§£æ±ºçã¯ãã¯ãªãŒã³ã¢ããã¡ã«ããºã ãç絡ããããšã§ã¯ãªããã¯ãªãŒã³ã¢ãããæåããªãåå ãèŠã€ããããšã§ãã
ãŸãããã®åé¡ã解決ããããšãã«ãåå空éãçµäºæã«ã¹ã¿ãã¯ããŠããçç±ãæ確ã«ããæ¹æ³ã説æããããã«åç §ãããæ°ãããã±ããããããŸããã ãã®ã¯ããŒãºããªåé¡ã®ä»£ããã«ãããã§äŒè©±ãããããšããå§ãããŸãã
çµ±åãããŸããã ãã£ãšã§ããããšã¯ãããšæããŸãããä»åŸã®ã³ã¡ã³ãã¯ïŒ70916ãŸã§ã©ããã
@ jeff-knurekããã¯æ£ããæ¹æ³ã§ããã¯ãã§ãã ããããšãããããŸããã
ç§ãã¡ã®å Žåããã¡ã€ãã©ã€ã¶ãŒãå£ããã®ã¯cert-manager
倱æããã¢ããã°ã¬ãŒãã§ããã https://github.com/jetstack/cert-manager/issues/1582
$ kube get apiservice
NAME SERVICE AVAILABLE AGE
v1. Local True 43d
v1.apps Local True 43d
v1.authentication.k8s.io Local True 43d
v1.authorization.k8s.io Local True 43d
v1.autoscaling Local True 43d
v1.batch Local True 43d
v1.coordination.k8s.io Local True 43d
v1.networking.k8s.io Local True 43d
v1.rbac.authorization.k8s.io Local True 43d
v1.scheduling.k8s.io Local True 43d
v1.storage.k8s.io Local True 43d
v1alpha1.certmanager.k8s.io Local True 3d22h
v1alpha1.crd.k8s.amazonaws.com Local True 43d
v1beta1.admission.certmanager.k8s.io cert-manager/cointainers-cointainers-cert-manager-webhook False (MissingEndpoints) 60m
v1beta1.admissionregistration.k8s.io Local True 43d
v1beta1.apiextensions.k8s.io Local True 43d
v1beta1.apps Local True 43d
v1beta1.authentication.k8s.io Local True 43d
v1beta1.authorization.k8s.io Local True 43d
v1beta1.batch Local True 43d
v1beta1.certificates.k8s.io Local True 43d
v1beta1.coordination.k8s.io Local True 43d
v1beta1.events.k8s.io Local True 43d
v1beta1.extensions Local True 43d
v1beta1.networking.k8s.io Local True 43d
v1beta1.node.k8s.io Local True 43d
v1beta1.policy Local True 43d
v1beta1.rbac.authorization.k8s.io Local True 43d
v1beta1.scheduling.k8s.io Local True 43d
v1beta1.storage.k8s.io Local True 43d
v1beta1.webhook.cert-manager.io cert-manager/cointainers-cointainers-cert-manager-webhook False (MissingEndpoints) 3d22h
v1beta2.apps Local True 43d
v2beta1.autoscaling Local True 43d
v2beta2.autoscaling Local True 43d
ããã«ã¡ã¯ã
https://github.com/rancher/rancher/issues/21546#issuecomment -553635629ã®å Žåãç§ã®ã±ãŒã¹ã®åå空éãçµäºã§ã¹ã¿ãã¯ããŸã
å€åããã¯åœ¹ç«ã€ã§ãããã
https://medium.com/@newtondev/how -to-fix-kubernetes-namespace-deleting-stuck-in-termination-state-5ed75792647e
ããã¯ç§ã«ãšã£ãŠãã£ã³ããªã³ã®ããã«æ©èœããŸãã
ç§ãåãåé¡ã«çŽé¢ããŸããããä»ã¯åé¡ãªãæ©èœããŠããŸãã 次ã®ããã¥ã¡ã³ããåç §ããŠãåé¡ã解決ããŠãã ãã
@zerkmsãããæã ãããã¯æ£åœãªã¢ããã€ã¹ã§ãããïŒ å€ãã®å ŽåãåŸ æ©äžã®ãã¡ã€ãã©ã€ã¶ãŒã¯ãåå空éã®åé€ã®äžéšãšããŠåé€ããããªããžã§ã¯ãã«ãã£ãŠæäŸãããŠããŸããã ãã®å ŽåãããåŸ ã€æå³ããªãã®ã§ïŒãã¡ã€ãã©ã€ãºãè¡ãããšãã§ãããã®ã¯ãããããŸããïŒãèšäºã§èª¬æãããŠããæ¹æ³ã§ãªããžã§ã¯ãã«ããããé©çšããããšãå¯äžã®ãªãã·ã§ã³ã§ãã
ãã®èšäºã¯ãèšäºã®äžéšã«ãªã³ã¯ãããŠãã[æ¢ç¥ã®åé¡]ããŒãžã«ãªã¹ããããŠããé©çšæé ã«ãã£ãŠåé¡ã_解決ãããªãã£ã_å Žåã«ã®ã¿é©çšãããããšã«æ³šæããŠãã ãããããã¯åºæ¬çã«ããªã³ã¯ããã³ã¡ã³ããç¹°ãè¿ãã¢ããã€ã¹ã§ãã
@zerkmsãããæã ãããã¯æ£åœãªã¢ããã€ã¹ã§ãããïŒ å€ãã®å ŽåãåŸ æ©äžã®ãã¡ã€ãã©ã€ã¶ãŒã¯ãåå空éã®åé€ã®äžéšãšããŠåé€ããããªããžã§ã¯ãã«ãã£ãŠæäŸãããŠããŸããã
åå空éã®spec.finalizerã«ãããåœãŠã¯ãŸãã®ãèŠãããšããããŸããã ç§ãèŠããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¯ãåå空éã¯ãªãŒã³ã¢ããã³ã³ãããŒã©ãŒã«é¢ä¿ããŠãããåå空éå ã®æ°žç¶ãªããžã§ã¯ãïŒãã®ã¢ããã€ã¹ã¯etcdã«åãæ®ãããïŒããŸãã¯å¿çããªãéçŽAPIïŒåå空éspec.finalizerãåé€ãããšã¹ãããããïŒã®ãããããåå ã§çºçããŸããåŸ ã£ãŠããã®APIããæ°žç¶åããããªãœãŒã¹ãåãæ®ããŸãïŒ
ãã®èšäºã§ã¯ãåå空éã®ãã¡ã€ãã©ã€ãºããã€ãã¹ãããšãåå空éã®ãªãœãŒã¹ãã¹ãã¬ãŒãžã«åãæ®ããããªã¹ã¯ãããããšãèŠåããŠããªãããããå§ãããŸããã
åå空éã®spec.finalizerã«åœãŠã¯ãŸãã®ãèŠãããšããããŸãã
ã¯ããããã§ããããã¯ããã®ãã¡ã€ãã©ã€ã¶ãŒãkubernetesèªäœã«ãã£ãŠå®è£
ãããŠããããã§ããããã®åå空éå
ã®ãªããžã§ã¯ãã«ä»ã®ãã¡ã€ãã©ã€ã¶ãŒãååšããå¯èœæ§ãããããã®åå空éå
ã®ãªããžã§ã¯ãã«ãã£ãŠå®è£
ãããå¯èœæ§ããããŸãã ç§ãæè¿ééãã1ã€ã®äŸã¯ã https://appscode.com/products/stash/
ã
stash-operatorãããã€ã¡ã³ãã«ãã£ãŠãµãŒãã¹ãããCRDã®äžéšã«ãã¡ã€ãã©ã€ã¶ãŒãé 眮ããŸãã ãã ããstash-operatorããã§ã«åé€ãããŠããããããããã®CRDãããã¡ã€ãã©ã€ã¶ãŒããŒã¯ãåé€ã§ãããã®ã¯ãªããåå空éã®åé€ãã¹ã¿ãã¯ããŸãã ãã®å Žåããããã®ãã¡ã€ãã©ã€ã¶ãŒïŒåå空éèªäœã§ã¯ãªãããããã®ãªããžã§ã¯ãïŒã«ããããé©çšããããšãå¯äžã®è³¢æãªããšã§ãã
ãããçã«ããªã£ãŠããããšãé¡ã£ãŠããŸãã
ãã®å Žåããããã®ãã¡ã€ãã©ã€ã¶ãŒïŒåå空éèªäœã§ã¯ãªãããããã®ãªããžã§ã¯ãïŒã«ããããé©çšããããšãå¯äžã®è³¢æãªããšã§ãã
æ£ããã ããã¹ãŠã®ãªãœãŒã¹ãåé€ãããã¯ãªãŒã³ã¢ããã·ããªãªã§ã¯ããã«å察ããŸãããããªã³ã¯ãããèšäºã§ã¯èª¬æããŠããŸãã...åå空éããspec.finalizerãåé€ããæ¹æ³ã«ã€ããŠèª¬æããŠããŸãã
ãŸããå°ããªã³ãŒããŒã飲ãã§ãªã©ãã¯ã¹ããŠãããk8sãã¹ã¿ãŒããŒãã«ç§»åããŸã
kubectlcluster-info
Kubernetesãã¹ã¿ãŒã¯httpsïŒ// localhost ïŒ6443ã§å®è¡ãããŠã
KubeDNSã¯httpsïŒ// localhost ïŒ6443 / api / v1 / namespaces / kube-system / services / kube- dnsïŒdns / proxyã§å®è¡ãããŠããŸã
ã¯ã©ã¹ã¿ã®åé¡ãããã«ãããã°ããã³èšºæããã«ã¯ããkubectlcluster-infodumpãã䜿çšããŸãã
kube-proxyãå®è¡ããŸã
kubectlãããã·ïŒ
127.0.0.1:8001ã§ãµãŒãã¹ãéå§
IDãä¿åããŠãåŸã§åé€ããŸã:)
ãã¡ã€ã«ã«å ¥ããŸã
ãã¡ã€ã«ãç·šéãããã¡ã€ãã©ã€ã¶ãŒãåé€ããŸã
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
ãkubernetesã
]
}ã
ç·šéåŸã¯æ¬¡ã®ããã«ãªããŸãð
}ã
"ä»æ§"ïŒ{
ããã¡ã€ãã©ã€ã¶ãŒãïŒ[
]
}ã
ç§ãã¡ã¯ã»ãšãã©ããã«ããŸãð
curl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.1ïŒ8001 / api / v1 / namespaces / $ {NAMESPACE} / finalize
ãããŠããã¯ãªããªã£ãð
ç¹°ãè¿ãã«ãªããŸããããã¡ã€ãã©ã€ã¶ãŒãåé€ããªãã§ãã ãããçç±ããããŸãã 代ããã«ãNSå ã®ã©ã®ãªãœãŒã¹ãåé€ãä¿çããŠãããã確èªããŠãã ããã
- å©çšã§ããªãããã«ãªãœãŒã¹ãæäŸããŠããªãapiserviceããããã©ããã確èªããŸãïŒ
kubectl get apiservice|grep False
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete
ãä»ããŠãŸã ååšãããã¹ãŠã®ãªãœãŒã¹ãæ€çŽ¢ãããã®åé¡ã®è§£æ±ºçã¯ãã¯ãªãŒã³ã¢ããã¡ã«ããºã ãç絡ããããšã§ã¯ãªããã¯ãªãŒã³ã¢ãããæåããªãåå ãèŠã€ããããšã§ãã
ãããã¿ããªïŒ @alvaroalemanããæäŸããããã³ãã«åŸãããåå空éã®ããŒãåé€ãè¡ãåã«ãã¯ãªãŒã³ãªåé€ãæ€æ»ããŠ
ã¹ã¯ãªããhttps://github.com/thyarles/knskã®æ©èœïŒ
ããã圹ã«ç«ãŠã°å¹žãã
@thyarlesããããšãããããŸãã ç§ã¯ããªãã®ããæ¹ã§åé¡ã解決ããŸããã
$ kubectlã¯apiservicesãååŸããŠã䜿çšã§ããªããµãŒãã¹ã確èªããŸãã$ kubectl delete apiservice [service-name]ã«ãã£ãŠã䜿çšå¯èœãªãµãŒãã¹ãåé€ãããšfalseã«ãªããŸãããã®åŸãåå空éã®åé€ã«é¢ããåé¡ã¯çºçããŸããã
ç§ãã¡ã®ããŒã ã«ã¯ãv1beta1.admission.certmanager.k8s.ioãv1beta1.metrics.k8s.ioãv1beta1.webhook.certmanager.k8s.ioã®3ã€ã®å©çšã§ããªãapiserviceããããŸãã
ã¡ããªãã¯apiserverãå®è¡ãããŠããªãå Žåãã¯ã©ã¹ã¿ãŒã¯å€å°å£ããŠããããšã«æ³šæããŠãã ãããAPIServiceãåé€ããã ãã§ã¯ãæ ¹æ¬çãªåå ã¯å®éã«ã¯ä¿®æ£ãããŸããã
@lavalampã¡ããªãã¯ã¯å©çšã§ããªãapiserviceã§ãã
ã¯ããããã¯ãã¡ããªãã¯apiserverãå®è¡ãããŠããªãããšãæå³ããŸããã€ãŸããHPAãã¯ã©ã¹ã¿ãŒã§æ©èœããªãããšãæå³ããããããä»ã®ããšãåæ§ã§ãã
ã¯ãã HPAã¯çŸåšæ©èœããŠããŸããã ã¡ããªãã¯ãåé€ããŠä¿®æ£ããæ¹æ³ãèŠã€ããã¹ãã§ã¯ãããŸããã
@thyarlesããããšãããããŸãã ç§ã¯ããªãã®ããæ¹ã§åé¡ã解決ããŸããã
$ kubectlã¯apiservicesãååŸããŠã䜿çšã§ããªããµãŒãã¹ã確èªããŸãã$ kubectl delete apiservice [service-name]ã«ãã£ãŠã䜿çšå¯èœãªãµãŒãã¹ãåé€ãããšfalseã«ãªããŸãããã®åŸãåå空éã®åé€ã«é¢ããåé¡ã¯çºçããŸããã
ç§ãã¡ã®ããŒã ã«ã¯ãv1beta1.admission.certmanager.k8s.ioãv1beta1.metrics.k8s.ioãv1beta1.webhook.certmanager.k8s.ioã®3ã€ã®å©çšã§ããªãapiserviceããããŸãã
@ xzhang007èããŠããããïŒ æ¬¡ã«ãv1beta1.metrics.k8s.ioãå£ããçç±ã確èªããå¿ èŠããããŸãã ãããã©ã®ããã«æããã確èªããŠãã ããïŒ
`` `
$ kubectl -n kube-system get all | grepã¡ããªãã¯
pod / metrics-server-64f74f8d47-r5vcq2 / 2å®è¡äž9119d
service / metrics-ãµãŒããŒClusterIPxx.xx.xx.xx
Deployment.apps / metrics-ãµãŒããŒ1/11 1 201d
Replicaset.apps / metrics-server-55c7f68d94 0 0 0 165d
Replicaset.apps / metrics-server-5c696bb6d7 0 0 0 201d
ããã³replicaset.apps / metrics-server-5cdb8bb4fb0 0 0 201d
Replicaset.apps / metrics-server-64f74f8d47 1 1 1 119d
Replicaset.apps / metrics-server-686789bb4b 0 0 0 145d```
$ kubectl -n kube-system get all | grepã¡ããªãã¯
pod / metrics-server-5dcfd4dd9f-m2v9k1 / 1å®è¡äž02d20h
service / metrics-ãµãŒããŒClusterIPxx.xx.xx.xx
Deployment.apps / metrics-ãµãŒããŒ1/11 1 27d
ããã³replicaset.apps / metrics-server-5dcfd4dd9f1 1 1 27d
Replicaset.apps / metrics-server-7fcf9cc98b 0 0 0 27d
ã¯ãã HPAã¯çŸåšæ©èœããŠããŸããã ã¡ããªãã¯ãåé€ããŠä¿®æ£ããæ¹æ³ãèŠã€ããã¹ãã§ã¯ãããŸããã
@ xzhang007å®éãåé¡ã«æ°ä»ãåã¯æ©èœããŸãããåé€ãããåå空éãã¹ã¿ãã¯ã¢ãŒãã«ãªã£ãŠãããããæ°ã¥ããã ãã§ãã ãã«ã ããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠã¡ããªãã¯ãµãŒããŒãåãããã€ãããã次ã®ã³ãã³ããåŒã³åºããŠä¿®æ£ããŸãïŒé©çšããåã«ãããã€ã¡ã³ããã¡ã€ã«ã確èªããŠãã ããïŒã
$ curl https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/metrics-server/metrics-server-deployment.yaml | kubectl apply -f -
@slasshãœãªã¥ãŒã·ã§ã³ã¯Kubernetes1.15ã§ç§ã®ããã«åãã
v1beta1.metrics.k8s.ioAPIServiceãåé€ããŸã
kubectl get ns ns-to-delete -o yaml
...
status:
conditions:
- lastTransitionTime: "2020-01-08T05:36:52Z"
message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently
unable to handle the request'
...
kubectl get APIService
...
v1beta1.metrics.k8s.io kube-system/metrics-server False (ServiceNotFound)
kubectl delete v1beta1.metrics.k8s.io APIService
cert-managerã¯ãæ£ããèšå®ãããŠããªãããã«äœ¿çšã§ããŸããã§ããã ããšãã°ãå ¥åã³ã³ãããŒã©ã§ééã£ãæ§æã䜿çšããŸãã ç§ãã¡ã®ã·ã¹ãã ã§ã¯ã
"certmanager.k8s.io/cluster-issuer": "letsencrypt-prod"
ãããŠããã¯ã«å€æŽãããŸãã
"cert-manager.io/cluster-issuer": "letsencrypt-prod"
ãããå©çšå¯èœã«ããŸãã
ãã®å·ã§åè¿°ããããã«ã kubectl replace --raw
ãå©çšå¯èœãªææ°ããŒãžã§ã³ã®kubectlã䜿çšããŠãkubectlã«ãã£ãŠå
¬éãããŠããªãAPIã䜿çšããŠåå空éãçµäºããå¥ã®æ¹æ³ããããŸãïŒã©ã®ããŒãžã§ã³ãããã¯ããããŸããïŒã ãã®æ¹æ³ã¯ãããªããåºçŸããå¿
èŠã¯ãããŸããkubectl proxy
ã§ã®ããã»ã¹ãšåé¿ã®äŸåé¢ä¿ãcurl
ïŒbusyboxã®ãããªããã€ãã®ç°å¢ã§ã¯å©çšã§ããªãããšïŒã ãããä»ã®èª°ããå©ããããšãé¡ã£ãŠãç§ã¯ãããããã«æ®ããŸããïŒ
kubectl get namespace "stucked-namespace" -o json \
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
| kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -
ãããä¿®æ£å¯èœãªåé¡ã§ãããã©ããã¯ç¢ºèªãããŠããŸããïŒ ããã§ã¯å€ãã®ããããŒãªè§£æ±ºçã®ããã§ãããåå空éãåé€ã§ããªããšããæ ¹æ¬çãªåé¡ã«å¯ŸåŠãããã®ã¯äœããããŸããã
ç§ã¯EKSv1.14ã¯ã©ã¹ã¿ãŒã«ãããæã£ãŠããŸã
ãããä¿®æ£å¯èœãªåé¡ã§ãããã©ããã¯ç¢ºèªãããŠããŸããïŒ ããã§ã¯å€ãã®ããããŒãªè§£æ±ºçã®ããã§ãããåå空éãåé€ã§ããªããšããæ ¹æ¬çãªåé¡ã«å¯ŸåŠãããã®ã¯äœããããŸãã
åºæ¬çãªåé¡ã¯ãã¯ã©ã¹ã¿ãŒå ã®éçŽãããAPIã°ã«ãŒãã䜿çšã§ããªãããšã§ãã åå空éã¯ãªãŒã³ã¢ããã³ã³ãããŒã©ãŒã¯ããã¹ãŠã®APIã䜿çšå¯èœã«ãªããŸã§ãããã¯ããããšãæå³ããŠããããããã¹ãŠã®APIã°ã«ãŒãã®ãã¹ãŠã®ãªãœãŒã¹ããã®åå空éã«å¯ŸããŠã¯ãªãŒã³ã¢ãããããŠããããšã確èªã§ããŸãã
APIãã«ãŒã«ãããããšããŠããpplã®å ŽåïŒ
# Check all possible clusters, as your .KUBECONFIG may have multiple contexts:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
# Select name of cluster you want to interact with from above output:
export CLUSTER_NAME="some_server_name"
# Point to the API server referring the cluster name
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
# Gets the token value
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode)
# Explore the API with TOKEN
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/#without -kubectl-proxy
ãããèªåçã«è¡ãã¹ã¯ãªããã次ã«ç€ºããŸãã jq
ïŒ
#!/bin/bash
if [ -z "${1}" ] ; then
echo -e "\nUsage: ${0} <name_of_the_namespace_to_remove_the_finalizer_from>\n"
echo "Valid cluster names, based on your kube config:"
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
exit 1
fi
kubectl proxy --port=8901 &
PID=$!
sleep 1
echo -n 'Current context : '
kubectl config current-context
read -p "Are you sure you want to remove the finalizer from namespace ${1}? Press Ctrl+C to abort."
kubectl get namespace "${1}" -o json \
| jq '.spec.finalizers = [ ]' \
| curl -k \
-H "Content-Type: application/json" \
-X PUT --data-binary @- "http://localhost:8901/api/v1/namespaces/${1}/finalize"
kill -15 $PID
å šå¡ïŒãã¡ã€ãã©ã€ã¶ãŒã®åé€ãèªååããã¹ã¯ãªããã¯ãè¯ãããšããã害ãåãŒããŸãã ãããã¯ãå©çšã§ããªãéçŽãããapiserverã«æéç匟ãæ®ãå¯èœæ§ããããŸãã 誰ããåå空éãåäœæãããšãçªç¶ãå€ããªããžã§ã¯ãã®æãå衚瀺ãããå ŽåããããŸãã
æ¬åœã®è§£æ±ºçã¯æ¬¡ã®ãšããã§ãã
$ kubectl get api-services
# something in the list is unavailable. Figure out what it is and fix it.
# ... the namespace lifecycle controller will finish deleting the namespace.
å šå¡ïŒãã¡ã€ãã©ã€ã¶ãŒã®åé€ãèªååããã¹ã¯ãªããã¯ãè¯ãããšããã害ãåãŒããŸãã ãããã¯ãå©çšã§ããªãéçŽãããapiserverã«æéç匟ãæ®ãå¯èœæ§ããããŸãã 誰ããåå空éãåäœæãããšãçªç¶ãå€ããªããžã§ã¯ãã®æãå衚瀺ãããå ŽåããããŸãã
æ¬åœã®è§£æ±ºçã¯æ¬¡ã®ãšããã§ãã
$ kubectl get api-services # something in the list is unavailable. Figure out what it is and fix it. # ... the namespace lifecycle controller will finish deleting the namespace.
https://github.com/thyarles/knsk
ãã®ã¹ã¯ãªããã¯ãã¹ãŠã®ãã§ãã¯ãå®è¡ããå€ç«ãããªãœãŒã¹ã®æ€çŽ¢ãå«ããå®å šãªåé€ãè©Šã¿ãŸãã ãŠãŒã¶ãŒããªã¹ã¯ãåãããå Žåãã¹ã¯ãªããã¯ãæšå¥šãããªãåé€æ¹æ³ãå®è¡ããããã®--forceãªãã·ã§ã³ãæäŸããŸãã
ã¿ã€ããã¹ãapiservicesã§ããå¿ èŠããããŸã
ãã®ã³ãã³ãã¯ã䜿çšã§ããªãAPIã衚瀺ããŸãã
kubectl get apiservices --template='{{range $api := .items}}{{range $api.status.conditions}}{{if eq .type "Available"}}{{$api.metadata.name}} {{.status}}{{"\n"}}{{end}}{{end}}{{end}}' | grep -i false
ãã®èšäºã¯ãã£ãšããªãã«åœ¹ç«ã€ã§ãããïŒ
https://access.redhat.com/solutions/5038511
å®éã«ååšããã®ã¯APIãµãŒãã¹ã®ç«¶åã§ãããopenshiftã§APIã®ãã«ã¹ã¹ããŒã¿ã¹ãæ€èšŒã§ããŸãã
oc get apiservices -o = custom-columns = " nameïŒ.metadata.name ã statusïŒ.status.conditions [0] .status"
倱æããAPIã¯ããããåèµ·åãããã®APIã«å±ããããããŸãã¯ãããã€ãåèµ·åããå¿ èŠããããŸãããã®åŸãåå空éãåé€ããããšããŸãã
$ oc delete namspace
ãããŠæºåãã§ããŠãããžãã¹ã¯ä¿®æ£ãããŸãã!!
誰ããè±èªã話ãããšã«åæããå Žæã§ããªãèªèº«ã®èšèªã䜿çšããããšã¯ããªã倱瀌ã§ãã ð
誰ããè±èªã話ãããšã«åæããã®ã¯ã©ãã§ããïŒ
17æ58åtheAkitoã®æšã2020幎4æ30æ¥ã«[email protected]æžããŸããïŒ
ã¿ããªãããå Žæã§èªåã®èšèªã䜿ãã®ã¯ããªãç¡ç€Œã§ã
è±èªã話ãããšã«åæããŸãã ðâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-622137770 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/ALGMKB6K4OU4X3XOYMALOBLRPHYCDANCNFSM4ETUOEPA
ã>>
ã¯ãªã¹ããªãŒãã¢ãŒããã¯ã@ brace.ai
-
å®ç§çŸ©åã®éç¥ïŒãã®ã¡ãŒã«ã¯ã
æå³ãããåä¿¡è
ã§ãããæ©å¯ãå°æããŸãã¯
ç¹æš©æ
å ±ã ããªããæå³ãããåä¿¡è
ã§ãªãå Žåãããªãã¯
䜿çšãã¬ãã¥ãŒãé
åžãã³ããŒããŸãã¯å®è¡ãããã¢ã¯ã·ã§ã³ã«åºã¥ããŠéç¥ããã
ãã®ã¡ãã»ãŒãžãŸãã¯ãã®æ·»ä»ãã¡ã€ã«ãããå Žåã¯ããããçŠæ¢ããŸãã ããã§ãªãå Žå
ç®çã®åä¿¡è
ã¯ãè¿ä¿¡ã¡ãŒã«ã§éä¿¡è
ã«é£çµ¡ãã
å
ã®ã¡ãã»ãŒãžãšæ·»ä»ãã¡ã€ã«ã®ãã¹ãŠã®ã³ããŒãç Žæ£ãŸãã¯åé€ããŸãã
æºåãã§ããŠããã¿ãŸãããããã¯ç§ã®ã¹ããŒãã®ããã§ãããããã¯ä¿®æ£ãããŸãã
ç§ãã¡ã¯å€èšèªã®ãŠãŒã¶ãŒããŒã¹ãæã£ãŠããŸããããã¯ç§ãã¡ã®ããŒã«ã®ã©ããåœéåãããŠããªãã®ã«ååæªãã§ããç§ãã¡ã¯å°ãªããšãããgithubã§ããããšãã§ããŸãã
@teoincontatto
ãã®å·ã§åè¿°ããããã«ã
kubectl replace --raw
ãå©çšå¯èœãªææ°ããŒãžã§ã³ã®kubectlã䜿çšããŠãkubectlã«ãã£ãŠå ¬éãããŠããªãAPIã䜿çšããŠåå空éãçµäºããå¥ã®æ¹æ³ããããŸãïŒã©ã®ããŒãžã§ã³ãããã¯ããããŸããïŒã ãã®æ¹æ³ã¯ãããªããåºçŸããå¿ èŠã¯ãããŸããkubectl proxy
ã§ã®ããã»ã¹ãšåé¿ã®äŸåé¢ä¿ãcurl
ïŒbusyboxã®ãããªããã€ãã®ç°å¢ã§ã¯å©çšã§ããªãããšïŒã ãããä»ã®èª°ããå©ããããšãé¡ã£ãŠãç§ã¯ãããããã«æ®ããŸããïŒkubectl get namespace "stucked-namespace" -o json \ | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \ | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -
ããã¯å®ç§ã«æ©èœããŸããïŒ
ç§ãã¡ã¯å€èšèªã®ãŠãŒã¶ãŒããŒã¹ãæã£ãŠããŸããããã¯ç§ãã¡ã®ããŒã«ã®ã©ããåœéåãããŠããªãã®ã«ååæªãã§ããç§ãã¡ã¯å°ãªããšãããgithubã§ããããšãã§ããŸãã
ç§ãã¡ã¯å€èšèªã®ãŠãŒã¶ãŒããŒã¹ãæã£ãŠããŸããããã¯ç§ãã¡ã®ããŒã«ã®ã©ããåœéåãããŠããªãã®ã«ååæªãã§ããç§ãã¡ã¯å°ãªããšãããgithubã§ããããšãã§ããŸãã
ãŸã ç解ããããšããŠããŸãã ç§ãèš±ããŠã 誀ã£ãŠèŠªæãäžã«ã¯ãªãã¯ããå¯èœæ§ããããŸãã
ã¯ãã確ãã«ãããŒã«ã¯å®ç§ã«è¡ãããŠããŸããã
説æãªãã§èŠªæãäžã«åãããããã¯ãæå³ããããŸããã
ç§ããã®åé¡ãçµéšããã»ãšãã©ã®å Žåãããã¯CRD次第ã§ãã CRDããã®åå空éã§ã®ã¿äœ¿çšãããŠããå Žåã¯åé€ããŠããããã¡ã€ãã©ã€ã¶ãŒãšåå空éã®åé€ã«é²ãããšãã§ããŸãã
ãã®å·ã§åè¿°ããããã«ã
kubectl replace --raw
ãå©çšå¯èœãªææ°ããŒãžã§ã³ã®kubectlã䜿çšããŠãkubectlã«ãã£ãŠå ¬éãããŠããªãAPIã䜿çšããŠåå空éãçµäºããå¥ã®æ¹æ³ããããŸãïŒã©ã®ããŒãžã§ã³ãããã¯ããããŸããïŒã ãã®æ¹æ³ã¯ãããªããåºçŸããå¿ èŠã¯ãããŸããkubectl proxy
ã§ã®ããã»ã¹ãšåé¿ã®äŸåé¢ä¿ãcurl
ïŒbusyboxã®ãããªããã€ãã®ç°å¢ã§ã¯å©çšã§ããªãããšïŒã ãããä»ã®èª°ããå©ããããšãé¡ã£ãŠãç§ã¯ãããããã«æ®ããŸããïŒkubectl get namespace "stucked-namespace" -o json \ | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \ | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -
@teoincontattoããããšãããããŸãïŒ ããã¯ã€ãã«ããŸããããŸããïŒ
ãªã³ã©ã€ã³ã§ãªãœãŒã¹ãããã§ã¹ããç·šéããã ãã§ã¯ããŸãæ©èœããªãå ŽåããããŸãïŒã€ãŸããæåºãããfinalizers
åé€ããŠä¿åããŸãïŒã
ããã§ãç§ã¯ä»ã®äººããããã€ãã®æ°ããæ¹æ³ãåŸãŸããã
kubectl get namespace linkerd -o json > linkerd.json
# Where:/api/v1/namespaces/<your_namespace_here>/finalize
kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json
ãã®ã³ãã³ããå®è¡ããåŸãåå空éã¯åå空éãªã¹ãã«ååšããªãã¯ãã§ãããããŠããã¯ç§ã®ããã«åããŸãã
namespace
ã ãã§ãªããä»ã®ãªãœãŒã¹ããµããŒãããŸãã
kubectl edit annoying-ns
ã䜿çšããŠãã¡ã€ãã©ã€ã¶ãŒè¡ãåé€ããããšã§åé¡ãä¿®æ£ããŸãã
ããŒã...ç§ã¯ä»ãã®åé¡ãæ±ããŠããŸã:)
ä»æ¥ãeksã¯ã©ã¹ã¿ãŒã1.15ãã1.16ã«æŽæ°ããŸããã
ãããŸã§ã®ãšããããã¹ãŠãæ£åžžã«èŠããŸãã
ããããç§ã®éçºnsãconfigclusterãã¯äžçš®ã®ãæå·ãã§ããã
ã ããç§ã¯ããããããã«ããããšã«ããŸããã
k nsconfigclusterãåé€ããŸã
...ã
ä»ããã¯ãã³ã°ããŸãïŒ3æé+ïŒïŒ/
$ kubectl get namespace configcluster -o yaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"configcluster"}}
creationTimestamp: "2020-06-19T06:40:15Z"
deletionTimestamp: "2020-06-19T09:19:16Z"
name: configcluster
resourceVersion: "22598109"
selfLink: /api/v1/namespaces/configcluster
uid: e50f0b53-b21e-4e6e-8946-c0a0803f031b
spec:
finalizers:
- kubernetes
status:
conditions:
- lastTransitionTime: "2020-06-19T09:19:21Z"
message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently
unable to handle the request'
reason: DiscoveryFailed
status: "True"
type: NamespaceDeletionDiscoveryFailure
- lastTransitionTime: "2020-06-19T09:19:22Z"
message: All legacy kube types successfully parsed
reason: ParsedGroupVersions
status: "False"
type: NamespaceDeletionGroupVersionParsingFailure
- lastTransitionTime: "2020-06-19T09:19:22Z"
message: All content successfully deleted
reason: ContentDeleted
status: "False"
type: NamespaceDeletionContentFailure
phase: Terminating
足ã®åé¡ã§ãã®ãšãã«ãã£ãšãããããã«ã¯ã©ãããã°ããã§ããïŒ
4æ46åAMã¢ã³ãã¬ã¢ã¹ã»ããŒãã³ã§éã2020幎6æ19æ¥ã«ã¯[email protected]
æžããŸããïŒ
ããŒã...ç§ã¯ä»ãã®åé¡ãæ±ããŠããŸã:)
ä»æ¥ãeksã¯ã©ã¹ã¿ãŒã1.15ãã1.16ã«æŽæ°ããŸããã
ãããŸã§ã®ãšããããã¹ãŠãæ£åžžã«èŠããŸãã
ããããç§ã®éçºnsãconfigclusterãã¯äžçš®ã®ãæå·ãã§ããã
ã ããç§ã¯ããããããã«ããããšã«ããŸãããk nsconfigclusterãåé€ããŸã
...ã
ä»ããã¯ãã³ã°ããŸãïŒ3æé+ïŒïŒ/$ kubectl get namespace configcluster -o yaml
apiVersionïŒv1
çš®é¡ïŒåå空é
ã¡ã¿ããŒã¿ïŒ
泚éïŒ
kubectl.kubernetes.io/last-applied-configurationïŒ|
{"apiVersion"ïŒ "v1"ã "kind"ïŒ "Namespace"ã "metadata"ïŒ{"annotations"ïŒ{}ã "name"ïŒ "configcluster"}}
CreationTimestampïŒ "2020-06-19T06ïŒ40ïŒ15Z"
deleteTimestampïŒ "2020-06-19T09ïŒ19ïŒ16Z"
ååïŒconfigcluster
resourceVersionïŒ "22598109"
selfLinkïŒ/ api / v1 / namespaces / configcluster
uidïŒe50f0b53-b21e-4e6e-8946-c0a0803f031b
ã¹ããã¯ïŒ
ãã¡ã€ãã©ã€ã¶ãŒïŒ
- kubernetes
ç¶æ ïŒ
æ¡ä»¶ïŒ- lastTransitionTimeïŒ "2020-06-19T09ïŒ19ïŒ21Z"
ã¡ãã»ãŒãžïŒ 'äžéšã®ã°ã«ãŒãã§æ€åºã«å€±æããŸããã1ã€å€±æããŸããïŒãååŸã§ããŸãã
ãµãŒããŒAPIã®å®å šãªãªã¹ãïŒmetrics.k8s.io/v1beta1ïŒãµãŒããŒã¯çŸåš
ãªã¯ãšã¹ããåŠçã§ããŸããã
çç±ïŒDiscoveryFailed
ã¹ããŒã¿ã¹ïŒãTrueã
ã¿ã€ãïŒNamespaceDeletionDiscoveryFailure- lastTransitionTimeïŒ "2020-06-19T09ïŒ19ïŒ22Z"
ã¡ãã»ãŒãžïŒãã¹ãŠã®ã¬ã¬ã·ãŒkubeã¿ã€ããæ£åžžã«è§£æãããŸãã
çç±ïŒParsedGroupVersions
ã¹ããŒã¿ã¹ïŒãFalseã
ã¿ã€ãïŒNamespaceDeletionGroupVersionParsingFailure- lastTransitionTimeïŒ "2020-06-19T09ïŒ19ïŒ22Z"
ã¡ãã»ãŒãžïŒãã¹ãŠã®ã³ã³ãã³ããæ£åžžã«åé€ãããŸãã
çç±ïŒContentDeleted
ã¹ããŒã¿ã¹ïŒãFalseã
ã¿ã€ãïŒNamespaceDeletionContentFailure
ãã§ãŒãºïŒçµäºâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-646543073 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AFLKRCLHIZ77X2Z3F5GAOCTRXMXVTANCNFSM4ETUOEPA
ã
@bobhenkelãŸãããã®åé¡ã¯ã¯ããŒãºãããŠããã®ã§ãäºå®äžãããã¯åé¡ããªãããšãæå³ããŸãïŒå®è¡å¯èœãªé ç®ã«é¢ããéãïŒã åæ§ã®ç¶æ³ã«å¯ŸåŠããããã®å®éçãªæ¯æŽãå¿ èŠãªå Žåã¯ãäžèšã®ã¹ã¬ããããèªã¿ãã ãããããã«ã¯ããã€ãã®è¯ãã¢ããã€ã¹ããããŸãïŒãŸããããã€ãã®æªãã¢ããã€ã¹ããããŸãïŒã
ç§ã®å ŽåãGCPãããã¯ãŒã¯ãµãŒãã¹ã³ã³ãœãŒã«ããå ¥åããŒããã©ã³ãµãŒãæåã§åé€ããå¿ èŠããããŸããã ããŒããã©ã³ãµãŒã®ããã³ããšã³ããã³ã³ãœãŒã«ã§çŽæ¥æåã§äœæããŸããã ããŒããã©ã³ãµãŒãåé€ãããšãåå空éã¯èªåçã«åé€ãããŸããã
ããŒããã©ã³ãµãŒã®ç¶æ ããããã§ã¹ãã®ç¶æ ãšç°ãªã£ãŠãããããKubernetesã¯åé€ããããªããšèããŠããŸãã
次ã«ã¢ãããŒã·ã§ã³ã䜿çšããŠå ¥åããã³ããšã³ãã®äœæãèªååãããã®åé¡ã解決ã§ãããã©ããã確èªããŸãã
ãªã³ã©ã€ã³ã§ãªãœãŒã¹ãããã§ã¹ããç·šéããã ãã§ã¯ããŸãæ©èœããªãå ŽåããããŸãïŒã€ãŸããæåºããã
finalizers
åé€ããŠä¿åããŸãïŒã
ããã§ãç§ã¯ä»ã®äººããããã€ãã®æ°ããæ¹æ³ãåŸãŸãããkubectl get namespace linkerd -o json > linkerd.json # Where:/api/v1/namespaces/<your_namespace_here>/finalize kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json
ãã®ã³ãã³ããå®è¡ããåŸãåå空éã¯åå空éãªã¹ãã«ååšããªãã¯ãã§ãããããŠããã¯ç§ã®ããã«åããŸãã
namespace
ã ãã§ãªããä»ã®ãªãœãŒã¹ããµããŒãããŸãã
ããªãã¯ãããåããã¹ã¿ãŒã§ã
ãªã³ã©ã€ã³ã§ãªãœãŒã¹ãããã§ã¹ããç·šéããã ãã§ã¯ããŸãæ©èœããªãå ŽåããããŸãïŒã€ãŸããæåºããã
finalizers
åé€ããŠä¿åããŸãïŒã
ããã§ãç§ã¯ä»ã®äººããããã€ãã®æ°ããæ¹æ³ãåŸãŸãããkubectl get namespace linkerd -o json > linkerd.json # Where:/api/v1/namespaces/<your_namespace_here>/finalize kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json
ãã®ã³ãã³ããå®è¡ããåŸãåå空éã¯åå空éãªã¹ãã«ååšããªãã¯ãã§ãããããŠããã¯ç§ã®ããã«åããŸãã
namespace
ã ãã§ãªããä»ã®ãªãœãŒã¹ããµããŒãããŸãã
å€ãã®è§£æ±ºçãè©ŠããŸããããããã¯ç§ã®ããã«åãããã®ã§ãã ããããšãããããŸããïŒ
curl -k -H "Content-TypeïŒapplication / json" -X PUT --data-binary @ tmp.json httpsïŒ// kubernetes-cluster-ip / api / v1 / namespaces / annoying-namespace-to-delete /ãã¡ã€ãã©ã€ãº
ããè¯ãhttps://stackoverflow.com/a/59667608/429476
ããã¯æ¬åœã«ãåãå ¥ãããããçãã§ããã¯ãã§ã-ããã¯ãã®åé¡ã®æ ¹æ¬ãå®å šã«è§£æ±ºããŸããïŒ
äžèšã®ãªã³ã¯ããååŸããŸãã
ããã¯ãç¹ã«å®çšŒåç°å¢ã§ã¯æ£ããæ¹æ³ã§ã¯ãããŸããã
ä»æ¥ãç§ã¯åãåé¡ã«çŽé¢ããŸããã ãã¡ã€ãã©ã€ã¶ãŒãåé€ãããšãããŸããŸãªç¶æ ã§æ®ãç©ãã§ããŠããŸããŸãã å®éã«ãåé€ãå®äºããªãåå ãèŠã€ããå¿ èŠããããŸãã
https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-524772920ãåç §ããŠ
ïŒãŸããæ®å¿µãªããããkubetctl getallãã¯ãã¹ãŠãå ±åããããã§ã¯ãããŸããããªã³ã¯ã®ããã«åæ§ã®ã³ãã³ãã䜿çšããå¿ èŠããããŸãïŒ
ç§ã®å Žåâãcert-managerãåå空éãåé€ããŸãã 'kubectl get apiservice -o yaml'ã®åºåã§ãstatus = Falseã®APIService'v1beta1.admission.certmanager.k8s.io 'ãèŠã€ãããŸããã ãã®apiserviceã¯ãåé€ããcert-managerã®äžéšã§ããã ãã®ããããkubectl delete apiservice v1beta1.admission.certmanager.k8s.ioããã10ç§ã§ãåå空éãæ¶ããŸããã
ã圹ã«ç«ãŠã°å¹žãã§ãã
ããã¯èšã£ãŠããçµäºããåå空éãèªåçã«åé€ããCronJobãšããŠ1æéããšã«å®è¡ããå°ããªãã€ã¯ããµãŒãã¹ãäœæããŸããã
ããã§èŠã€ããããšãã§ããŸãïŒ https ïŒ
çµäºããåå空éãèªåçã«åé€ããCronJobãšããŠ1æéããšã«å®è¡ããå°ããªãã€ã¯ããµãŒãã¹ãäœæããŸããã
ããã§èŠã€ããããšãã§ããŸãïŒ https ïŒ
ããã«å¥ã®ã¯ã³ã©ã€ããŒïŒ
for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}'); do kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -; done
ããããã¹ã¿ãã¯ããåå空éãåé€ããããšã¯è¯ã解決çã§ã¯ãããŸããã æ£ããæ¹æ³ã¯ããããåããªããªã£ãçç±ãèŠã€ããããšã§ãã éåžžã«äžè¬çãªçç±ã¯ãã¯ã©ã¹ã¿ãŒãåå空éããã¡ã€ãã©ã€ãºããã®ã劚ããå©çšã§ããªãAPIãµãŒãã¹ãããããšã§ãã
ããšãã°ãããã§ã¯Knativeãé©åã«åé€ããŠããŸããã
$ kubectl get apiservice|grep False
NAME SERVICE AVAILABLE AGE
v1beta1.custom.metrics.k8s.io knative-serving/autoscaler False (ServiceNotFound) 278d
ãããåé€ãããšåé¡ã¯è§£æ±ºããŸãã
k delete apiservice v1beta1.custom.metrics.k8s.io
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" deleted
$ k create ns test2
namespace/test2 created
$ k delete ns test2
namespace "test2" deleted
$ kgns test2
Error from server (NotFound): namespaces "test2" not found
çµäºããåå空éãèªåçã«åé€ããCronJobãšããŠ1æéããšã«å®è¡ããå°ããªãã€ã¯ããµãŒãã¹ãäœæããŸããã
ããã§èŠã€ããããšãã§ããŸãïŒ https ïŒ
ãããã£ãã
ã©ãk8sã¯ã©ã¹ã¿ãŒã®1.18ã§åæ§ã®åé¡ãçºçããä»ã®äººãå©ããããã«ã¡ã¢ãè¿œå ããŸããã ç§ã¯ã¡ããªã¯ã¹APIãç¹ã«ã«ã¹ã¿ã ã¡ããªã¯ã¹ã䜿çšããŠããŸããã ãããã®k8sãªããžã§ã¯ããåé€ããŠåäœæããåŸãåå空éã®åé€ã§åæ¢ããã¡ããªãã¯APIãšã³ããã€ã³ããèŠã€ãããªããšãããšã©ãŒãçºçããŸããã ãããå¥ã®åå空éã«æ»ããšããã¹ãŠãããã«ã¯ãªã¢ãããŸããã
ããã¯ãstatus.conditions.messageã®äžã®åå空éã«ãããŸããã
Discovery failed for some groups, 4 failing: unable to retrieve the
complete list of server APIs: custom.metrics.k8s.io/v1beta1: the server is currently
unable to handle the request, custom.metrics.k8s.io/v1beta2: the server is currently
unable to handle the request, external.metrics.k8s.io/v1beta1: the server is
currently unable to handle the request, metrics.k8s.io/v1beta1: the server is
ããã«å¥ã®ã¯ã³ã©ã€ããŒïŒ
for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}'); do kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -; done
ããããã¹ã¿ãã¯ããåå空éãåé€ããããšã¯è¯ã解決çã§ã¯ãããŸããã æ£ããæ¹æ³ã¯ããããåããªããªã£ãçç±ãèŠã€ããããšã§ãã éåžžã«äžè¬çãªçç±ã¯ãã¯ã©ã¹ã¿ãŒãåå空éããã¡ã€ãã©ã€ãºããã®ã劚ããå©çšã§ããªãAPIãµãŒãã¹ãããããšã§ãã
ããšãã°ãããã§ã¯Knativeãé©åã«åé€ããŠããŸããã$ kubectl get apiservice|grep False NAME SERVICE AVAILABLE AGE v1beta1.custom.metrics.k8s.io knative-serving/autoscaler False (ServiceNotFound) 278d
ãããåé€ãããšåé¡ã¯è§£æ±ºããŸãã
k delete apiservice v1beta1.custom.metrics.k8s.io apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" deleted
$ k create ns test2 namespace/test2 created $ k delete ns test2 namespace "test2" deleted $ kgns test2 Error from server (NotFound): namespaces "test2" not found
ééããªãæãããããªã¯ã³ã©ã€ããŒïŒ ãããã®ã解決çãã®ã©ããå®éã«ã¯æ ¹æ¬çãªåé¡ã解決ããªãããšã«æ³šæããããšãéèŠã§ãã
ã€ãŸããã¡ãã»ãŒãžã¯ããŸã ãã1ã€ã®ã©ã€ããŒãã§ã¯ãªãïŒsmileïŒãåºããå¿ èŠããããŸãã
ééããªãæãããããªã¯ã³ã©ã€ããŒïŒ ãããã®ã解決çãã®ã©ããå®éã«ã¯æ ¹æ¬çãªåé¡ã解決ããªãããšã«æ³šæããããšãéèŠã§ãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ããã¹ãŠã®å¯èœæ§ã®1ã€ã解決ããŸãã èãããããã¹ãŠã®æ ¹æ¬åå ãæ¢ããŠä¿®æ£ããã«ã¯ã次ã®ã¹ã¯ãªããã䜿çšããŸãïŒ https ïŒ
@thyarlesãšãŠãçŽ æµã§ãïŒ
åå空éã®åé€ã«modify finalize
ã䜿çšããªãã§ãã ããã ãšã©ãŒãçºçããŸã
åå空éãçµäºããåå ã調ã¹ãŠãã ããã çŸåšç¥ãããŠãããã©ãã«ã·ã¥ãŒãã£ã³ã°ã®æ¹å
ç§ã¯åãåé¡ã«ééããŸãïŒ
# sudo kubectl get ns
NAME STATUS AGE
cattle-global-data Terminating 8d
cattle-global-nt Terminating 8d
cattle-system Terminating 8d
cert-manager Active 8d
default Active 10d
ingress-nginx Terminating 9d
kube-node-lease Active 10d
kube-public Active 10d
kube-system Active 10d
kubernetes-dashboard Terminating 4d6h
local Active 8d
p-2sfgk Active 8d
p-5kdx9 Active 8d
# sudo kubectl get all -n kubernetes-dashboard
No resources found in kubernetes-dashboard namespace.
# sudo kubectl get namespace kubernetes-dashboard -o json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2020-09-29T01:15:46Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2020-09-29T01:15:46Z\"}]}",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"kubernetes-dashboard\"}}\n",
"lifecycle.cattle.io/create.namespace-auth": "true"
},
"creationTimestamp": "2020-09-29T01:15:45Z",
"deletionGracePeriodSeconds": 0,
"deletionTimestamp": "2020-10-02T07:59:52Z",
"finalizers": [
"controller.cattle.io/namespace-auth"
],
"managedFields": [
{
"apiVersion": "v1",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
"f:cattle.io/status": {},
"f:lifecycle.cattle.io/create.namespace-auth": {}
},
"f:finalizers": {
".": {},
"v:\"controller.cattle.io/namespace-auth\"": {}
}
}
},
"manager": "Go-http-client",
"operation": "Update",
"time": "2020-09-29T01:15:45Z"
},
{
"apiVersion": "v1",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
}
},
"manager": "kubectl-client-side-apply",
"operation": "Update",
"time": "2020-09-29T01:15:45Z"
},
{
"apiVersion": "v1",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:status": {
"f:phase": {}
}
},
"manager": "kube-controller-manager",
"operation": "Update",
"time": "2020-10-02T08:13:49Z"
}
],
"name": "kubernetes-dashboard",
"resourceVersion": "3662184",
"selfLink": "/api/v1/namespaces/kubernetes-dashboard",
"uid": "f1944b81-038b-48c2-869d-5cae30864eaa"
},
"spec": {},
"status": {
"conditions": [
{
"lastTransitionTime": "2020-10-02T08:13:49Z",
"message": "All resources successfully discovered",
"reason": "ResourcesDiscovered",
"status": "False",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2020-10-02T08:11:49Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2020-10-02T08:11:49Z",
"message": "All content successfully deleted, may be waiting on finalization",
"reason": "ContentDeleted",
"status": "False",
"type": "NamespaceDeletionContentFailure"
},
{
"lastTransitionTime": "2020-10-02T08:11:49Z",
"message": "All content successfully removed",
"reason": "ContentRemoved",
"status": "False",
"type": "NamespaceContentRemaining"
},
{
"lastTransitionTime": "2020-10-02T08:11:49Z",
"message": "All content-preserving finalizers finished",
"reason": "ContentHasNoFinalizers",
"status": "False",
"type": "NamespaceFinalizersRemaining"
}
],
"phase": "Terminating"
}
# sudo kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:41:02Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:32:58Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
etcdctl
ã䜿çšããŠãåé€ãããŠããªããªãœãŒã¹ãèŠã€ããããšãã§ããŸã
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
--key=/etc/kubernetes/pki/etcd/peer.key \
get /registry --prefix | grep <namespace>
ã¿ãŒããã«ã«ã³ããŒããŠè²Œãä»ããã ãã§ã
for NS in $(kubectl get ns 2>/dev/null | grep Terminating | cut -f1 -d ' '); do
kubectl get ns $NS -o json > /tmp/$NS.json
sed -i '' "s/\"kubernetes\"//g" /tmp/$NS.json
kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f /tmp/$NS.json
done
/tmp/$NS.json
ããã¯ç§ã«ãšã£ãŠã¯ããŸããããnsã«ã¶ãäžãã£ãŠããk8sãªããžã§ã¯ãããªãããšã確èªããŠããå®è¡ããŸããã ããããšãïŒ
ããã䜿çšããŠãçµäºæã«ã¹ã¿ãã¯ããåå空éãåé€ããŸãã
äŸïŒ
kubectl get namespace openebs -o json | jq -j '.spec.finalizers=null' > tmp.json
kubectl replace --raw "/api/v1/namespaces/openebs/finalize" -f ./tmp.json
ã©ã³ãã£ãŒåºæã®åå空éïŒäŸïŒcattle-systemïŒã§ã®çµäºæã«ã¹ã¿ãã¯ããåå空éã«ã¶ã€ãã£ããã¹ãŠã®ã°ãŒã°ã«ã«ãšã£ãŠã次ã®å€æŽãããã³ãã³ãïŒgreboisã®ãªãªãžãã«ïŒãç§ã®ããã«æ©èœããŸããïŒ
for NS in $(kubectl get ns 2>/dev/null | grep Terminating | cut -f1 -d ' '); do
kubectl get ns $NS -o json > /tmp/$NS.json
sed -i "s/\"controller.cattle.io\/namespace-auth\"//g" /tmp/$NS.json
kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f /tmp/$NS.json
done
çãããåèãŸã§ã«ããã®ããããããšäžèšã®åœ¹ç«ââã€ã³ã¡ã³ãã®ããã€ãã«ãªã³ã¯ããŠããã®åé¡ãããã¯ããäºå®ã§ãã
äœãèµ·ãã£ãŠããã®ãã«ã€ããŠã®10åéã®èª¬æãèšé²ãããã®SIG DeepDiveã»ãã·ã§ã³ã§çºè¡šããŸããã
ããã65ã®è³æ祚ãå«ãæ£ããã³ã¡ã³ãã§ã
äžã§æ°åèšåããããã®äžçšåºŠã®æçš¿ã¯ãç©äºãæ£ããæ¹æ³ã§è¡ãäŸã§ãã å£ããAPIãµãŒãã¹ãèŠã€ããŠä¿®æ£ããŸãã
åå空éã®ãã¡ã€ãã©ã€ã¶ãŒãåé€ããã ãã®ãã¹ãŠã®ã¯ã³ã©ã€ããŒã¯æ ¹æ¬åå ã«å¯ŸåŠããã¯ã©ã¹ã¿ãŒã埮åŠã«å£ãããŸãŸã«ããŸããããã¯åŸã§ããªããåã¿ãŸãã ã ãããããããªãã§ãã ããã ãšã«ãããæ ¹æ¬åå ã®ä¿®æ£ã¯éåžžç°¡åã§ãã ã¹ã¬ããã«ã¯ãã§ã«å€æ°ã®æ£è§£ããããŸããã人ã ã¯ãã®ããŒãã®ããªãšãŒã·ã§ã³ãæçš¿ããããšã奜ãããã§ãããã®ã³ã¡ã³ããäžçªäžã«ãšã©ãŸãããã«ãä»ããåé¡ãããã¯ããŸãã
æãåèã«ãªãã³ã¡ã³ã
@ManifoldFR ãç§ã¯ããªããšåãåé¡ãæ±ããŠããŠãjsonãã¡ã€ã«ã§APIåŒã³åºããè¡ãããšã§ãããæ©èœãããããšãã§ããŸããã
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次ã«ãtmp.jsonãç·šéããŠã
"kubernetes"
ãåé€ããŸãcurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize
åå空éãåé€ãããŸãã