从Kubernetes集群完全卸载istio(所有组件)

时间:2019-01-18 21:09:05

标签: kubernetes istio

我使用以下命令安装了istio:

VERSION = 1.0.5
GCP = gcloud
K8S = kubectl

@$(K8S) apply -f istio-$(VERSION)/install/kubernetes/helm/istio/templates/crds.yaml
@$(K8S) apply -f istio-$(VERSION)/install/kubernetes/istio-demo-auth.yaml
@$(K8S) get pods -n istio-system
@$(K8S) label namespace default istio-injection=enabled
@$(K8S) get svc istio-ingressgateway -n istio-system

现在,我如何完全卸载它,包括所有容器/入口/出口等(由istio-demo-auth.yaml安装的所有内容?

谢谢。

10 个答案:

答案 0 :(得分:6)

基于他们的documentation here,您可以将所有规格生成为yml文件,然后将其传递到简单的kubectl的delete操作

istioctl manifest generate <your original installation options> | kubectl delete -f -

这是一个示例:

istioctl manifest generate --set profile=default | kubectl delete -f -

这种方法的缺点是记住安装istio时使用的所有选项,这可能很难记住,尤其是在启用特定组件的情况下。

如果您已使用头盔图安装了istio,则可以轻松卸载

首先,列出所有已安装的图表:

helm list -n istio-system
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS   
istiod  istio-system    1       2020-03-07 15:01:56.141094 -0500 EST    deployed   

,然后使用以下语法删除/卸载图表:

helm delete -n istio-system --purge istio-system
helm delete -n istio-system --purge istio-init
...

查看他们的website,以获取有关如何执行此操作的更多信息。

如果您已经使用istioistioctl在其单独的helm中安装了namespace,则可以轻松地完全删除该namespace,这将依次删除在其中创建的所有资源。

kubectl delete namespace istio-system 

答案 1 :(得分:5)

只需对您应用的文件运行kubectl delete

kubectl delete -f istio-$(VERSION)/install/kubernetes/istio-demo-auth.yaml

您也可以在docs中找到它。

答案 2 :(得分:5)

只需删除ns

k delete ns istio-system

答案 3 :(得分:4)

如果您使用 istioctl,那就很简单了:

istioctl x uninstall --purge

当然,如果该命令列在 istioctl --help...

参考:https://istio.io/latest/docs/setup/install/istioctl/#uninstall-istio

答案 4 :(得分:1)

清理Istio有点棘手,因为它添加了所有东西:CustomResourceDefinitions,ConfigMaps,MutatingWebhookConfigurations等。仅删除istio-system名称空间是不够的。最安全的选择是使用istio.io的卸载说明来安装方法。

Kubectl:https://istio.io/docs/setup/kubernetes/install/kubernetes/#uninstall

头盔:https://istio.io/docs/setup/kubernetes/install/helm/#uninstall

执行这些步骤时,请使用要删除的Istio版本。因此,如果您要删除Istio 1.0.2,请从istio.io中获取该版本。

答案 5 :(得分:1)

别忘了禁用注入:

kubectl delete -f istio-$(VERSION)/install/kubernetes/helm/istio/templates/crds.yaml
kubectl delete -f istio-$(VERSION)/install/kubernetes/istio-demo-auth.yaml
kubectl label default your-namespace istio-injection=disabled

答案 6 :(得分:1)

使用您在安装中使用的配置文件,例如demo,运行以下命令 istioctl manifest generate --set profile=demo | kubectl delete -f -

答案 7 :(得分:0)

如果按照说明安装了它,则需要以相同的方式删除它。

kubectl delete -f istio-$(VERSION)/install/kubernetes/helm/istio/templates/crds.yaml
kubectl delete -f istio-$(VERSION)/install/kubernetes/istio-demo-auth.yaml

然后,您将手动删除该文件夹;如果移动到任何位置,也将手动删除istioctl

重要提示:清理名称空间非常容易清理,但是您不能在所有情况下都这样做。在这种情况下,如果仅删除名称空间,则将保留所有权限和凭据。现在,假设您要更新Istio,并且Istio团队已在其RBAC规则中进行了一些安全性更改,但未更改对象的名称。您将部署新的yaml文件,并且将引发错误消息,表明该对象(例如clusterrolebinding)已存在。如果您不注意那个错误是什么,您可能会遇到更糟糕的错误类型(当没有错误,但是出了一些问题时)。

答案 8 :(得分:0)

无需查找舵图即可删除CRD:

kubectl delete crd -l chart=istio

答案 9 :(得分:-1)

您好,如果您是通过helm-template安装的,则可以使用以下命令:

对于CRD:

$ helm template ${ISTIO_BASE_DIR}/install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl delete -f -

$ kubectl delete crd $(kubectl get crd |grep istio)

对于Deployment / NS..etc其他资源:

$     helm template install/kubernetes/helm/istio --name istio --namespace istio-system\
    --values install/kubernetes/helm/istio/values-istio-demo.yaml \
    --set global.controlPlaneSecurityEnabled=true \
    --set global.mtls.enabled=true | kubectl delete -f -