在Docker for Desktop OSX上删除Kubernetes集群?

37

在OSX上,docker-for-desktopminikube delete的等效命令是什么?

据我了解,minikube创建一个虚拟机来托管其kubernetes集群,但我不明白docker-for-desktop在OSX上如何管理它。

7个回答

42

在OS X中卸载Kubernetes很容易。

进入{{首选项}},打开{{重置}}选项卡,然后点击{{重置Kubernetes集群}}。

enter image description here

所有使用Kubectl创建的对象都将被删除。

您还可以重置Docker VM映像(重置磁盘映像)和所有设置(恢复出厂设置),甚至卸载Docker。


2
在Docker for Mac 18.06.1-ce上,没有重置Kubernetes集群按钮。但是,在Kubernetes选项卡上禁用Kubernetes并点击应用程序可以解决问题。 - RichVel
4
有没有命令行的方法来做这个?每次都得进入界面很烦人。 - demisx
这对于 Windows 上的 Docker for Desktop 实际上是相同的。 - Dominik
1
谢谢。看起来它已经被移动到了“Kubernetes”选项卡中,但仍然有一个重置按钮。 - Matt Browne
有没有一种标准的方法来移除kubectl的安装? - Kevin McDonough
这取决于你如何安装它。有几种获取它的方式,因此卸载方法也不同。最好在Stack上提出具体问题并附上更多细节。 - VAS

25
在最近的Docker Edge版本中(2.1.7),Preferences设计已经改变。现在,您可以通过切换到Preferences窗口右上角的bug平面来重置Kubernetes集群和其他docker方面: 注意:只有在启用Kubernetes的情况下,您才能重置Kubernetes集群。如果取消选中“启用Kubernetes”复选框,则“重置Kubernetes集群”按钮将变为不活动状态。

enter image description here

为了方便起见,在主要偏好设置面板的Kubernetes选项卡中也提供了“重置Kubernetes集群”选项:

enter image description here


13
关于重新设计的不幸之处是,如果您卡在“Kubernetes启动”页面,您无法禁用它。 - Austin Hanson
重启Docker引擎有助于禁用Kubernetes吗? - VAS
2
不行,它没有帮助。我也卡住了。尝试在控制台中找到禁用它的配置。 - Thomas Schwärzl
你能否尝试“恢复出厂设置”? - VAS
1
没有,但是重新启动我的MBP解决了这个问题。 - Austin Hanson
有没有办法从CLI执行与此按钮相同的操作? - Apreche

6

若要使用命令行重置 Docker-desktop Kubernetes 集群,请将以下内容放入一个文件中 (dd-reset.sh) 并标记为可执行 (chmod a+x dd-reset.sh)。

#!/bin/bash

dr='docker run -it --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i'

${dr} sh -c 'export PATH=$PATH:/containers/services/docker/rootfs/usr/bin:/containers/services/docker/rootfs/usr/local/bin:/var/lib/kube-binary-cache/ && \
if [ ! -e /var/run/docker.sock ] ; then ln -s /containers/services/docker/rootfs/var/run/docker.sock /var/run/docker.sock ; fi && \
kube-reset.sh'

sleep 3

echo "cluster resetted. restarting docker-desktop..."
osascript -e 'quit app "Docker"'

open --background -a Docker
echo "docker-desktop started. Wait 3-5 mins for kubernetes to start."

解释:

该方法使用Docker桌面版虚拟机中的内部脚本。为使其正常工作,需要进行用户环境的一些准备。

我无法使用VM内部的kube-start.sh脚本启动Kubernetes集群,所以我使用了MacOS命令来重新启动Docker应用程序。

即使您的Docker首选项目前未启用Kubernetes集群,此方法也可行,但需要至少启用一次Kubernetes才能使用该脚本。

已在上进行了测试。
不能保证它与早期或后续版本兼容。

此版本的Docker使用kubeadm初始化Kubernetes集群。脚本位于文件夹/containers/services/docker/rootfs/usr/bin中:

  • kube-pull.sh (将kubernetes二进制文件传送到VM)
  • kube-reset.sh (运行kube-stop.sh并执行kubeadm reset+一些rm操作)
  • kube-restart.sh (运行kube-stop.shkube-start.sh
  • kube-start.sh (运行kube-pull.shkubelet.sh
  • kube-stop.sh (终止kubeletkube-apiserver进程以及所有k8s容器)
  • kubeadm-init.sh (初始化Kubernetes集群)
  • kubelet.sh (运行kubeadm-init.sh并启动kubelet二进制文件)

集群配置位于文件/containers/services/docker/lower/etc/kubeadm/kubeadm.yaml

使用的资源:


不错!(如果Docker处于那种状态,UI界面仍会停留在“Kubernetes正在启动”的状态) - Matt
关于连接到Docker桌面虚拟机的一些更新:https://gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389 - VAS

4

这段代码的实现在程序内部。Docker for Mac使用以下组件:HyperkitVPNkitDataKit

Kubernetes在为docker创建的Hyperkit虚拟机中运行,kube-apiserver被暴露出来。

您可以使用以下方式连接到虚拟机:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

然后您可以在虚拟机中看到所有的Kubernetes进程:
linuxkit-025000000001:~# ps -Af | grep kube
 1251 root      0:00 /usr/bin/logwrite -n kubelet /usr/bin/kubelet.sh
 1288 root      0:51 kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --cluster-dns=10.96.0.10 --cluster-domain=cluster.local --cgroups-per-qos=false --enforce-node-allocatable= --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --cadvisor-port=0 --kube-reserved-cgroup=podruntime --system-reserved-cgroup=systemreserved --cgroup-root=kubepods --hostname-override=docker-for-desktop --fail-swap-on=false
 3564 root      0:26 kube-scheduler --address=127.0.0.1 --leader-elect=true --kubeconfig=/etc/kubernetes/scheduler.conf
 3616 root      1:45 kube-controller-manager --cluster-signing-key-file=/run/config/pki/ca.key --address=127.0.0.1 --root-ca-file=/run/config/pki/ca.crt --service-account-private-key-file=/run/config/pki/sa.key --kubeconfig=/etc/kubernetes/controller-manager.conf --cluster-signing-cert-file=/run/config/pki/ca.crt --leader-elect=true --use-service-account-credentials=true --controllers=*,bootstrapsigner,tokencleaner
 3644 root      1:59 kube-apiserver --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --requestheader-username-headers=X-Remote-User --requestheader-group-headers=X-Remote-Group --service-account-key-file=/run/config/pki/sa.pub --secure-port=6443 --insecure-port=8080 --insecure-bind-address=0.0.0.0 --requestheader-client-ca-file=/run/config/pki/front-proxy-ca.crt --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-extra-headers-prefix=X-Remote-Extra- --advertise-address=192.168.65.3 --service-cluster-ip-range=10.96.0.0/12 --tls-private-key-file=/run/config/pki/apiserver.key --enable-bootstrap-token-auth=true --requestheader-allowed-names=front-proxy-client --tls-cert-file=/run/config/pki/apiserver.crt --proxy-client-key-file=/run/config/pki/front-proxy-client.key --proxy-client-cert-file=/run/config/pki/front-proxy-client.crt --allow-privileged=true --client-ca-file=/run/config/pki/ca.crt --kubelet-client-certificate=/run/config/pki/apiserver-kubelet-client.crt --kubelet-client-key=/run/config/pki/apiserver-kubelet-client.key --authorization-mode=Node,RBAC --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/run/config/pki/etcd/ca.crt --etcd-certfile=/run/config/pki/apiserver-etcd-client.crt --etcd-keyfile=/run/config/pki/apiserver-etcd-client.key
 3966 root      0:01 /kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
 4190 root      0:05 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf
 4216 65534     0:03 /sidecar --v=2 --logtostderr --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV
 4606 root      0:00 /compose-controller --kubeconfig  --reconciliation-interval 30s
 4905 root      0:01 /api-server --kubeconfig  --authentication-kubeconfig  --authorization-kubeconfig  --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/etc/docker-compose/etcd/ca.crt --etcd-certfile=/etc/docker-compose/etcd/client.crt --etcd-keyfile=/etc/docker-compose/etcd/client.key --secure-port=9443 --tls-ca-file=/etc/docker-compose/tls/ca.crt --tls-cert-file=/etc/docker-compose/tls/server.crt --tls-private-key-file=/etc/docker-compose/tls/server.key

如果您取消选中以下框(从文档中不清楚使用哪个命令):

docker

您可以看到进程已被移除:
linuxkit-025000000001:~# [ 6616.856404] cni0: port 2(veth5f6c8b28) entered disabled state
[ 6616.860520] device veth5f6c8b28 left promiscuous mode
[ 6616.861125] cni0: port 2(veth5f6c8b28) entered disabled state

linuxkit-025000000001:~#
linuxkit-025000000001:~# [ 6626.816763] cni0: port 1(veth87e77142) entered disabled state
[ 6626.822748] device veth87e77142 left promiscuous mode
[ 6626.823329] cni0: port 1(veth87e77142) entered disabled state

linuxkit-025000000001:~# ps -Af | grep kube
linuxkit-025000000001:~#

1
是的,我做了那个,但当你再次启用它时,集群仍然存在。 - John Smith
这对我在 Docker for Mac 18.06.1-ce 上运行有效 - 你必须点击应用更改才能生效。 - RichVel
2
@Rico,有没有一行代码可以通过编程方式重置Docker for Mac上的Kubernetes集群,而不是通过GUI界面? - Andrew Allbright
必须有API端点和/或命令行,但似乎没有发布。您可能需要查看源代码。 - Rico

4

在docker桌面版3.5.2(引擎版本20.10.7)中,重置按钮已经移动到了docker偏好设置里。

您可以按照以下步骤找到:

  1. 点击菜单栏中的docker图标,选择“Preferences”。 enter image description here
  2. 进入Kubernetes选项卡。enter image description here
  3. 点击“Reset Kubernetes CLuster”按钮。这是红色按钮。

这将删除所有pod并重置kubernetes。您可以在终端中执行“docker ps”命令来验证是否没有正在运行的容器。enter image description here


0

在我的情况下,Docker Desktop v4.17.0导致我的Docker Kubernetes停止工作,因为Coredns pods无法拉取指定的镜像。

在本地集群上执行kubectl get all --all-namespaces,如果Coredns pods无法启动,请尝试应用kubectl patch deployment -n kube-system coredns --patch-file docker-local-core-dns-image-patch.yaml

docker-local-core-dns-image-patch.yaml文件内容更新了要拉取的镜像:

spec:
  template:
    spec:
      containers:
      - name: coredns
        image: registry.k8s.io/coredns/coredns:v1.9.3

-2

只需删除保存 Kubernetes 资源的虚拟机即可。

$ minikube delete


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接