删除 docker-for-desktop OSX 上的 kubernetes 集群?

问题描述 投票:0回答:6

OSX 上

docker-for-desktop
minikube delete 的等效命令是什么?

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

docker kubernetes kubectl minikube
6个回答
42
投票
在 OS X 的 Docker 中拆除 Kubernetes 是一项非常简单的任务。

转到

Preferences

,打开 
Reset
 选项卡,然后单击 
Reset Kubernetes cluster

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

您还可以重置 docker VM 映像 (

Reset disk image

) 和所有设置 (
Reset to factory defaults
),甚至卸载 Docker。 


25
投票
在最近的 Mac 版 Docker Edge 版本 (2.1.7)

Preferences

 设计已发生变化。现在,您可以通过切换到 
Preferences
 窗口右上角的 bug 平面来重置 Kubernetes 集群和其他 docker 方面: 

注意: 仅当 Kubernetes 集群已启用时,您才可以重置它。如果取消选中“启用 Kubernetes”复选框,“重置 Kubernetes 集群”按钮将变为非活动状态。

为了方便起见,“重置 Kubernetes 集群”也出现在主首选项平面的 Kubernetes 选项卡上:


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-desktop VM 的内部脚本。为了使其工作,需要对用户环境进行一些准备。

我无法使用 VM 内部的

kube-start.sh

 脚本启动 Kubernetes 集群,因此我使用 MacOS 命令来重新启动 Docker 应用程序。

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

已在

Docker Edge for MacOS v2.2.2.0 (43066)

 进行测试
不保证它与早期或更高版本兼容。 

此版本的 Docker 使用

kubeadm

 来初始化 Kubernetes 集群。脚本位于文件夹 
/containers/services/docker/rootfs/usr/bin
:

  • kube-pull.sh
    (将 kubernetes 二进制文件带到虚拟机)
  • kube-reset.sh
    (运行 
    kube-stop.sh
     并做 
    kubeadm reset
     + 一些 
    rm
     的事情)
  • kube-restart.sh
    (运行 
    kube-stop.sh
    kube-start.sh
  • kube-start.sh
    (运行 
    kube-pull.sh
    kubelet.sh
  • kube-stop.sh
    (杀死 
    kubelet
    kube-apiserver
     进程,以及所有 
    k8s
     容器)
  • kubeadm-init.sh
    (初始化 Kubernetes 集群)
  • kubelet.sh
    (运行 
    kubeadm-init.sh
     并启动 
    kubelet
     二进制文件)
集群配置位于文件中

/containers/services/docker/lower/etc/kubeadm/kubeadm.yaml



使用的资源

  • 从命令行重新启动 Docker
  • 在特权容器中使用nsenter

4
投票
它确实在代码的幕后。 Docker for Mac 使用以下组件:

HyperkitVPNkitDataKit

Kubernetes 在为 docker 创建的同一个 Hyperkit VM 中运行,并且 kube-apiserver 是公开的。

您可以通过以下方式连接到虚拟机:

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

然后就可以看到VM中所有的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

因此,如果您取消选中以下框(从文档中不清楚它使用什么命令):

您可以看到进程已被删除:

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:~#
    

4
投票
在 docker 桌面版本 3.5.2(引擎版本 20.10.7)上,重置按钮已移至 docker 首选项内。

您可以按照以下步骤到达那里:

    单击菜单栏中的泊坞窗图标并选择“首选项”。
  1. 转到 Kubernetes 选项卡。
  2. 单击
  3. Reset Kubernetes CLuster
     按钮。这是红色按钮。
这将删除所有 Pod 并重置 Kubernetes。您可以在终端执行

docker ps

 命令来验证没有容器在运行。


0
投票
在我的案例中,docker kubernetes 停止使用 docker Desktop v4.17.0,因为 coredns pod 无法提取指定的映像。

在本地集群上执行

kubectl get all --all-namespaces

,如果 coredns pod 启动失败,请尝试应用 
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
    
© www.soinside.com 2019 - 2024. All rights reserved.